问题1:恢复过程中出现“
因为数据库正在使用,所以未能获得对数据库的排它访问权。”
解决方法:出现这种问题主要是由于数据库的会话还没有中断,可以采用kill会话进程或重启服务器,个人比较喜欢的方法是,代码如下:
/*
断开所有用户打开的连接
*/
use master
go
/*
断开所有用户打开的连接
*/
use master
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
go
drop procedure [dbo].[p_killspid]
go
create proc p_killspid
@dbname sysname --要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)
@dbname sysname --要关闭进程的数据库名
as
declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go
--用法
exec p_killspid '数据库名'
--恢复数据库.
RESTORE DATABASE 数据库名 FROM disk='F:\DATA\sample.bak'
-----------------------------------------------------------------------------------------------------------------------
问题2:恢复数据库后,增加登录名出现“
数据库中的用户名存在“,但是登录名却显示<无>而且新加用户会提示用户已存在 !”
解决方法:使用如下代码:
sp_change_users_login 'update_one','数据库用户名称','登录名称'
sp_change_users_login 'update_one','数据库用户名称','登录名称'
-----------------------------------------------------------------------------------------------------------------------
问题3:无法更改数据库中对象的所有者:
解决方法:使用如下代码:
exec sp_changeobjectowner '原所有者名',[dbo]
执行存储过程changename
exec changename '原所有者名','新所有者名'
-----------------------------------------------------------------------------------------------------------------------
问题4:mssql2000备份的数据库还原到2005后,选择“数据库关系图”提示:
此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使用“数据库属性”对话框的“文件”页或 ALTER AUTHORIZATION 语句将数据库所有者设置为有效登录名,然后再添加数据库关系图支持对象。
解决方法:
1、设置兼容级别为90(2005为90) USE [master] GO EXEC dbo.sp_dbcmptlevel @dbname='数据库名', @new_cmptlevel=90 GO 或是选责你还原的数据库,点右键,选属性->选项->兼容级别,选择sqlserver2005(90) 然后确定.
2.选择你的数据库,然后选择"安全性"->"用户",选择dbo,打开属性页,如登录名为空的话,新建查询,然后use [你的数据库名]EXEC sp_changedbowner 'sa' 执行成功后,你再选择"数据库关系图"节点,时提示 “此数据库缺少一个或多个使用数据库关系图所需的支持对象,是否创建",选择“是”即可。 就可以看到原先建的关系图了。
-----------------------------------------------------------------------------------------------------------------------
问题5:如何将SQLSERVER数据库备份到网络上
解决方法:
[@physicalname =] 'physical_name'
备份设备的物理名称。物理名称必须遵照操作系统文件名称的规则或者网络设备的通用命名规则,并且必须包括完整的路径。physical_name 的数据类型为 nvarchar(260),没有默认值,并且不能为 NULL。
当创建远程网络位置上的备份设备时,请确保在其下启动 SQL Server 的名称对远程的计算机有适当的写入能力。
B. 添加网络磁盘备份设备
下面的示例显示一个远程磁盘备份设备。在其下启动 SQL Server 的名称必须对该远程文件拥有权限。
下面的示例显示一个远程磁盘备份设备。在其下启动 SQL Server 的名称必须对该远程文件拥有权限。
USE masterEXEC sp_addumpdevice 'disk', 'networkdevice', '\\servername\sharename\path\filename.ext'"
以前曾看到过有人问,怎么样才能将数据备份到网络上,一直没有答案,然后我就试验了一把.
在服务器上建了一个目录,然后确保共享并有权限,如果需要建在共享目录下的目录下,那还得保证用户有权限
当然,SQLSERVER系统启动早于登录,一般用户会在登录中使用本地系统账户,我想在登录到系统之前一直是administrator用户模拟,因此,我将登录的账户改为了网络用户,因为我公司有域,因此我将域用户设置为本机的系统管理员,以确保该服务能启动.
接下来更简单了:
sp_addumpdevice'DISK','NetWork','\\server\d$\databak\xuzh.bak'gobackup database xuzh to network
得到的结果如下:
成功完成网络备份
以前曾看到过有人问,怎么样才能将数据备份到网络上,一直没有答案,然后我就试验了一把.
在服务器上建了一个目录,然后确保共享并有权限,如果需要建在共享目录下的目录下,那还得保证用户有权限
当然,SQLSERVER系统启动早于登录,一般用户会在登录中使用本地系统账户,我想在登录到系统之前一直是administrator用户模拟,因此,我将登录的账户改为了网络用户,因为我公司有域,因此我将域用户设置为本机的系统管理员,以确保该服务能启动.
接下来更简单了:
sp_addumpdevice'DISK','NetWork','\\server\d$\databak\xuzh.bak'gobackup database xuzh to network
得到的结果如下:
成功完成网络备份
本文转自 saturn 51CTO博客,原文链接:http://blog.51cto.com/saturn/108202