创建关系图遇到的错误的解决办法

错误提示:
此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使用“数据库属性”对话框的“文件”页或 ALTER AUTHORIZATION 语句将数据库所有者设置为有效登录名,然后再添加数据库关系图支持对象。
 
    sql2000备份的数据库还原到sql2005后,选择“数据库关系图”提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使用“数据库属性”对话框的“文件”页或   ALTER   AUTHORIZATION   语句将数据库所有者设置为有效登录名,然后再添加数据库关系图支持对象。
解决方法如下: 
方法1、设置兼容级别为90(2005为90) 或是选责你还原的数据库,点右键,选属性->选项->兼容级别,选择sqlserver2005(90) 然后确定,这时,你在该数据库下展开“数据库关系图”节点时会有个提示,"此数据库缺少一个或多个使用数据库关系图所需的支持对象,是否创建",选择“是”即可。
USE    [master]  
GO  EXEC   dbo.sp_dbcmptlevel    @dbname= '数据库名',    @new_cmptlevel= 90  
GO  
方法2、通过以上的方法操作,如果问题依然存在的话,按下列方法继续
选择你的数据库,然后选择"安全性"->"用户",选择dbo,打开属性页,如登录名为空的话,新建查询,然后
执行成功后,你再选择"数据库关系图"节点,时提示 “此数据库缺少一个或多个使用数据库关系图所需的支持对象,是否创建",选择“是”即可。 就可以看到原先建的关系图了。
use  [你的数据库名]  EXEC    sp_changedbowner     'sa'
 
-------------------------------------------
SQL Server 2005 联机丛书(2007 年 9 月)了解数据库关系图所有权 (Visual Database Tools)
若要使用数据库关系图设计器,必须先由 db_owner 角色(Microsoft SQL Server 数据库的一个角色)的成员对其进行设置,以控制对关系图的访问权限。每个关系图都有一个而且只有一个所有者,即创建该关系图的用户。有关设置关系图的详细信息,请参阅如何设置数据库关系图设计器 (Visual Database Tools)
关于关系图所有权,需要记住以下几点:
•尽管任何可以访问数据库的用户都能够创建关系图,但在创建关系图之后,只有关系图的创建者和 db_owner 角色的所有成员才能查看该关系图。
•关系图的所有权只能转让给 db_owner 角色的成员。只有当关系图的前一任拥有者已从数据库中移除时,才需要转让所有权。
•如果关系图的拥有者已从数据库中移除,该关系图将一直保留在数据库中,直到 db_owner 角色的成员试图打开该关系图。此时,db_owner 成员可以选择接管关系图的所有权。
重要提示: 
若要在 SQL Server Management Studio 中安装数据库关系图支持,数据库必须处于 SQL Server 2005 数据库兼容级别。如果数据库未在 90 兼容级别,则在尝试安装关系图支持时出现以下错误: 
此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使用“数据库属性”对话框的“文件”页或 ALTER AUTHORIZATION 语句将数据库所有者设置为一个有效的登录名,然后添加数据库关系图支持对象。
安装关系图支持后,可重置数据库兼容级别。使用以下 Transact-SQL 语句更改数据库的兼容级别,然后重试数据库关系图操作。
EXEC sp_dbcmptlevel 'database_name', '90';
这些支持对象可能无法安装在已附加到其他 SQL Server 实例或通过其他实例还原的数据库中。如果数据库所有者名称(存储于数据库中)在数据库附加或还原到的 SQL Server 实例中不是有效的登录名,则可能会发生这种情况。
使用以下 Transact-SQL 语句将 SQL Server 实例中的数据库所有者改为有效的登录名,然后重试数据库关系图操作。
ALTER AUTHORIZATION ON DATABASE::database_name TO valid_login 
 
 
------------------------
使用sp_change_users_login排除孤立用户
所谓孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的 syslogins中却没有对应的记录
孤立帐户的产生一般是一下两种:
1.将备份的数据库在其它机器上还原;
2.重装系统或SQL SERVER之后只还原了用户库
解决方法是使用sp_change_users_login来修复
sp_change_users_login的用法有三种
用法1:
exec sp_change_users_login 'REPORT'
列出当前数据库的孤立用户
用法2:
exec sp_change_users_login 'AUTO_FIX','用户名'
可以自动将用户名所对应的同名登录添加到syslogins中
用法3:
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
将用户名映射为指定的登录名 
----------------------------------------------------------------------------------------------------------------
看看是否有用

SQL孤立用户解决方案 

症状
当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤
本文介绍了如何解决孤立用户问题
状态
Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题
更多信息
虽然术语登录和用户经常交换使用,但它们之间有很大的不同登录用于用户身份验证,而数据库用户帐户用于数据库访问和权限验证登录通过安全识别符 (SID) 与用户关联访问 SQL Server 服务器需要登录验证特定登录是否有效的过程称为身份验证登录必须与 SQL Server 数据库用户相关联您使用用户帐户控制数据库中执行的活动如果数据库中不存在针对特定登录的用户帐户,使用该登录的用户即使能够连接到 SQL Server 服务器,也无法访问数据库但是,该情形的唯一例外是当数据库包含guest用户帐户时与用户帐户不关联的登录将被映射到 guest 用户相反,如果存在数据库用户,但没有与其关联的登录,则该用户将无法登录到 SQL Server 服务器中
将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户这种情况被称为存在孤立用户
孤立用户疑难解答
当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题以下情形说明了该问题并阐述如何加以解决
1. 向主数据库添加一个登录,并将默认数据库指定为 Northwind: Use master go sp_addlogin 'test', 'password', 'Northwind'
2. 向刚创建的用户授予访问权限: Use Northwind go sp_grantdbaccess 'test'
3. 备份数据库 BACKUP DATABASE Northwind
TO DISK = 'C:MSSQLBACKUPNorthwind.bak'
4. 将数据库恢复到其他 SQL Server 服务器: RESTORE DATABASE Northwind
FROM DISK = 'C:MSSQLBACKUPNorthwind.bak'
      
恢复的数据库包含名为test的用户,但没有相应的登录,这就导致test成为孤立用户 
5. 现在,为了检测孤立用户,请运行此代码: Use Northwind go sp_change_users_login 'report'
      
输出中列出了所有登录,其中包含 Northwind 数据库的 sysusers 系统表和主数据库的 sysxlogins 系统表中不匹配的条目
解决孤立用户问题的步骤
1. 为前一步中的孤立用户运行以下命令:
Use Northwind
go
sp_change_users_login 'update_one', 'test', 'test'
      
这样,就将服务器登录test与 Northwind 数据库用户test重新连接起来
sp_change_users_login 存储过程还可以使用auto_fix参数对所有孤立用户执行更新,但不推荐这样做,因为 SQL Server 会尝试按名称匹配登录和用户大多数情况下这都是可行的;但是,如果用户与错误登录关联,该用户可能拥有错误的权限
2. 在上一步中运行代码后,用户就可以访问数据库了然后用户可以使用 sp_password 存储过程更改密码: Use master
go
sp_password NULL, 'ok', 'test'
      
此存储过程不能用于 Microsoft Windows NT 安全帐户通过 Windows NT 网络帐户连接到 SQL Server 服务器的用户是由 Windows NT 授权的;因此,这些用户只能在 Windows NT 中更改密码
只有 sysadmin 角色的成员可以更改其他用户的登录密码 
----------------------------------------------------------------------------------------------------------------
SQL2005删除用户的时候,产生数据库主体在该数据库中拥有架构,无法删除的解决办法
--执行如下SQL语句
ALTER   AUTHORIZATION   ON   SCHEMA::db_owner   TO   dbo; 
--然后手动删除就可以了

----------------------------------------------------------------------------------------------------------------
[导入]sql2000备份的数据库还原到sql2005后,选择数据库关系图提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法 
sql2000 备份的数据库还原到sql2005后,选择数据库关系图提示:此数据库没有有效所有者,因此无法安装数据库关系图支持对象若要继续,请首先使用数据库属性对话框的文件页或 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'
执行成功后,你再选择"数据库关系图"节点,时提示 此数据库缺少一个或多个使用数据库关系图所需的支持对象,是否创建",选择是即可 就可以看到原先建的关系图了
[转贴]
----------------------------------------------------------------------------------------------------------------
从服务器上作导入导出至本地机上,数据库中的表都在,可是表名前段的架构身份不是dbo了,而是服务器上数据库的库名这样架构身份不同了,程序运行就出问题了试过单个修改表,在sql2005的属性窗口可以更改架构者,可是N多表哪儿能手动改得过来呀!还请高手指点批量更改的方法在此谢过 
SQL   Server2005可以使用系统存储过程sp_changeobjectowner更改数据库对象的所有者   
    
sp_changeobjectowner   '对象名(包括架构名)','新架构名'   
    
批量修改请用:   
    
方法一:使用游标   
    
declare   @name   sysname   
declare   csr1   cursor   
for     
      select   TABLE_NAME   from   INFORMATION_SCHEMA.TABLES   
open   csr1   
    
FETCH   NEXT   FROM   csr1   INTO   @name   
while   (@@FETCH_STATUS=0)   
      BEGIN   
SET   @name='原架构名. @name   
                  EXEC   SP_ChangeObjectOwner   @name,   '新架构名'   
    fetch   next   from   csr1   into   @name   
      END   
CLOSE   csr1   
DEALLOCATE   csr1   
    
方法二:使用系统存储过程sp_MSforeachtable   
EXEC   sp_MSforeachtable   @command1="EXEC   SP_ChangeObjectOwner   '?','新架构名'"
----------------------------------------------------------------------------------------------------------------
在sql server 2005数据库中更改数据架构 
在数据库testDB中存在架构A及用户A,现将testDB数据库所属的用户由A改为B,同时删除用户A;架构也由A改为B,删除架构A,操作如下:
1创建用户B,再创建架构B;
2将架构A的权限赋给用户B,取消用户A拥有架构A的权限,删除用户A;
3将数据库的所有属于架构A的对象改为架构B,代码如下:
ALTER SCHEMA [新架构名] TRANSFER 旧架构名.[数据库中的对象表或视图或存储过程]
ALTER SCHEMA [B] TRANSFER A.[对象1]
ALTER SCHEMA [B] TRANSFER A.[对象2]
ALTER SCHEMA [B] TRANSFER A.[对象n]
 









本文转自terryli51CTO博客,原文链接: http://blog.51cto.com/terryli/512486,如需转载请自行联系原作者




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值