分享你我的心得.
共乘一片美好网络.

SQL Server错误80040e37 解决办法

步骤:1.把备份的数据库还原到新的数据库服务器中(

      1.1企业管理器–>1.2数据库(右键)–>1.3所有任务–>1.4还原数据库–>1.5常规/还原为数据库/写上你要的数据库名字xxxx/选中从设备/选择设备/添加(浏览找到你的数据库备份文件)/确定/确定/确定–>1.6选项–>1.7将数据库还原为f:\usr\xxxx.mdf一般存放在你sql安装的目录下如:d:\Program Files\Microsoft SQL Server\MSSQL\Data\xxxx.mdf–>1.8确定就ok了!!

     2. 查看你刚刚还原的数据库中的用户如:abc;

     3. 查看安全性下面的登陆用户中是否有:abc如果没有此时的abc就是一个孤立用户;

     4.打开查询分析器运行脚本

       use  数据库名

       go 

       DECLARE   @sid   BINARY(16)  
       SELECT    @sid=sid FROM sysusers WHERE name=’abc’ and   islogin=1
       exec      sp_addlogin  @loginame = ‘abc’,@sid = @sid

     5.注意,应该是先还原,如果事先在sql的安全性–登录中已经

      创建abc这个登录,则先删除它,再执行上面的语句.同过上面的就能解决问题了!

======================================================================

总结:孤立用户疑难解答  
  把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题。下面的方案显示解决了这个问题:   
  通过执行sp_addlogin,把登录   janetl   改名为   dbo。 
  sp_addlogin  ‘janetl’, ‘dbo’     
  备份数据库。在本例中,备份  Northwind。  
  BACKUP  DATABASE   Northwind  
  TO  DISK = ‘c:\mssql\backup\northwnd’     
  除去刚刚备份的数据库。    
  DROP   DATABASE   Northwind     
  除去登录。    
  sp_droplogin   ‘janetl’     
  还原备份的数据库。    
  RESTORE   DATABASE   Northwind  
  FROM   DISK   =   ‘c:\mssql\backup\northwnd’     
  janetl  登录不能访问  Northwind  数据库,除非允许 guest   登录。尽管   janetl   登录已经删除,
它仍然(作为一个孤立行)显示在   sysusers   表中:    
  USE   Northwind  
  SELECT   *  
  FROM   sysusers  
  WHERE   name   =   ‘janetl’    
  解决孤立用户问题       
  用   sp_addlogin 添加一个临时登录。为孤立用户指定安全标识符(SID)(从   sysusers)。    
  sp_addlogin @loginame = ‘nancyd’,@sid   =   0x32C864A70427D211B4DD00104B9E8A00      
  用   sp_dropalias   除去属于别名   SID   的临时别名。    
  sp_dropalias   ‘nancyd’      
  用   sp_dropuser   除去原始用户(即现在的孤立用户)。    
  sp_dropuser   ‘janetl’     
  用   sp_dropuser   除去原始登录。    
  sp_droplogin   ‘nancyd’

========================================

–孤立用户的产生演示      
  –创建一个测试的数据库  
  CREATE   DATABASE   DB_test  
  go      
  –创建一个登录  
  EXEC   sp_addlogin   ‘aa’      
  –设置登录   aa   的默认数据库为测试数据库   DB_test  
  EXEC   sp_defaultdb   ‘aa’,’DB_test’  
  go      
  –切换到测试数据库  
  USE   DB_test  
  go    
  –为登录   aa   在当前测试数据库中添加用户  
  EXEC   sp_grantdbaccess   ‘aa’  
  go    
  –至此,用户   aa   登录后,其默认的当前数据库就是   DB_test  
  –我们可以在查询分析器,使用用户   aa   登录一下,来验证我们的测试环境  
   
  –备份测试数据库,为下面的测试做准备  
  BACKUP   DATABASE   DB_test   TO   DISK=’c:\DB_test.bak’   WITH   INIT  
  go      
  /*===================   产生孤立用户   ======================*/      
  –切换到   master   数据库  
  USE   master  
  go
   
  –删除测试数据库  
  DROP   DATABASE   DB_test  
  go     
  –删除登录   aa  
  EXEC   sp_droplogin   ‘aa’  
  go    
  /*===================   孤立用户表现形式1   ======================*/    
  –还原测试数据库  
  RESTORE   DATABASE   DB_test   FROM   DISK=’c:\DB_test.bak’  
  go   
  –切换到测试数据库  
  USE   DB_test  
  go    
  –查看用户信息  
  select   name   from   sysusers   where   islogin=1    
  –我们会发现,虽然我们已经将登录   aa   删除了,但用户   aa   仍然存在于数据库中  
  –尝试一下,用   aa   登录,被告知登录失败  
  go    
  –再把删除的登录添加回去  
  EXEC   sp_addlogin   ‘aa’    
  –设置登录   aa   的默认数据库为测试数据库   DB_test  
  EXEC   sp_defaultdb   ‘aa’,’DB_test’    
  –再次登录,被告知无法打开默认数据库,登录失败  
  go     
  –于是把默认数据库改为   master  
  EXEC   sp_defaultdb   ‘aa’,’master’     
  –这次再登录,就可以登录了  
  go    
  –尝试切换到测试数据库   DB_test  
  USE   DB_test   
  –得到错误信息:   服务器用户   ‘aa’   不是数据库   ‘DB_test’   中的有效用户。  
  –看来用户   aa   与登录   aa   失去了联系  
  go     
  –尝试重新为登录   aa   添加用户   aa  
  EXEC   sp_grantdbaccess   ‘aa’     
  –得到错误信息:当前数据库中已存在用户或角色   ‘aa’。   
  –这次我们换个顺序,先建立登录,再恢复数据库,看能否使登录与用户自动建立回联系      
  –做这个测试之前,先清理测试环境,即做前面的<产生孤立用户>步骤,然后再开始测试    
  –先添加登录  
  EXEC   sp_addlogin   ‘aa’  
  go      
  –还原测试数据库  
  RESTORE   DATABASE   DB_test   FROM   DISK=’c:\DB_test.bak’  
  go      
  –切换到测试数据库  
  USE   DB_test  
  go     
  –查看用户信息  
  select   name   from   sysusers   where   islogin=1      
  –我们会发现,用户   aa   存在于数据库中  
  –尝试一下,用   aa   登录,并切换到   DB_test  
  –结果是登录成功,访问   DB_test   出现和测试1一样的错误

for SQL Server 错误 ‘80040e37’

对象名 ‘Dv_User’ 无效。

/***.asp,行 *

先查看了一下数据库表,确实有这个表存在,而且程序中调用语句也没错.
重写了一下代码,结果还是一样.
怀疑不是程序的问题,于是看其他页面,发现所有的页面都有类似的问题,只要有调用到数据库的地方,都会出现错误.

判断是数据库出现了问题.数据库链接没错.
导入也没错.

go了一把,就解决了.

–把所有表的所有者改为DBO就不会了。
–执行下面语句,更改所有表的所有者为DBO
exec sp_msforeachtable "sp_changeobjectowner ‘?’,’dbo’"

赞(0)
未经允许不得转载:小叶白龙博客 » SQL Server错误80040e37 解决办法
分享到: 更多 (0)

评论 56

评论前必须登录!