300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 转贴:Microsoft OLE DB Provider for SQL Server错误80040e37

转贴:Microsoft OLE DB Provider for SQL Server错误80040e37

时间:2021-08-16 07:01:07

相关推荐

转贴:Microsoft OLE DB Provider for 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:/ProgramFiles/MicrosoftSQLServer/MSSQL/Data/xxxx.mdf-->1.8确定就ok了!!

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

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

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

use数据库名

go

DECLARE@sidBINARY(16)

SELECT@sid=sidFROMsysusersWHEREname='abc'andislogin=1

execsp_addlogin@loginame='abc',@sid=@sid

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

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

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

总结:孤立用户疑难解答

把数据库备份还原到另一个服务器时,可能会遇到孤立用户的问题。下面的方案显示解决了这个问题:

通过执行sp_addlogin,把登录janetl改名为dbo。

sp_addlogin'janetl','dbo'

备份数据库。在本例中,备份Northwind。

BACKUPDATABASENorthwind

TODISK='c:/mssql/backup/northwnd'

除去刚刚备份的数据库。

DROPDATABASENorthwind

除去登录。

sp_droplogin'janetl'

还原备份的数据库。

RESTOREDATABASENorthwind

FROMDISK='c:/mssql/backup/northwnd'

janetl登录不能访问Northwind数据库,除非允许guest登录。尽管janetl登录已经删除,

它仍然(作为一个孤立行)显示在sysusers表中:

USENorthwind

SELECT*

FROMsysusers

WHEREname='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'

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

--孤立用户的产生演示

--创建一个测试的数据库

CREATEDATABASEDB_test

go

--创建一个登录

EXECsp_addlogin'aa'

--设置登录aa的默认数据库为测试数据库DB_test

EXECsp_defaultdb'aa','DB_test'

go

--切换到测试数据库

USEDB_test

go

--为登录aa在当前测试数据库中添加用户

EXECsp_grantdbaccess'aa'

go

--至此,用户aa登录后,其默认的当前数据库就是DB_test

--我们可以在查询分析器,使用用户aa登录一下,来验证我们的测试环境

--备份测试数据库,为下面的测试做准备

BACKUPDATABASEDB_testTODISK='c:/DB_test.bak'WITHINIT

go

/*===================产生孤立用户======================*/

--切换到master数据库

USEmaster

go

--删除测试数据库

DROPDATABASEDB_test

go

--删除登录aa

EXECsp_droplogin'aa'

go

/*===================孤立用户表现形式1======================*/

--还原测试数据库

RESTOREDATABASEDB_testFROMDISK='c:/DB_test.bak'

go

--切换到测试数据库

USEDB_test

go

--查看用户信息

selectnamefromsysuserswhereislogin=1

--我们会发现,虽然我们已经将登录aa删除了,但用户aa仍然存在于数据库中

--尝试一下,用aa登录,被告知登录失败

go

--再把删除的登录添加回去

EXECsp_addlogin'aa'

--设置登录aa的默认数据库为测试数据库DB_test

EXECsp_defaultdb'aa','DB_test'

--再次登录,被告知无法打开默认数据库,登录失败

go

--于是把默认数据库改为master

EXECsp_defaultdb'aa','master'

--这次再登录,就可以登录了

go

--尝试切换到测试数据库DB_test

USEDB_test

--得到错误信息:服务器用户'aa'不是数据库'DB_test'中的有效用户。

--看来用户aa与登录aa失去了联系

go

--尝试重新为登录aa添加用户aa

EXECsp_grantdbaccess'aa'

--得到错误信息:当前数据库中已存在用户或角色'aa'。

--这次我们换个顺序,先建立登录,再恢复数据库,看能否使登录与用户自动建立回联系

--做这个测试之前,先清理测试环境,即做前面的<产生孤立用户>步骤,然后再开始测试

--先添加登录

EXECsp_addlogin'aa'

go

--还原测试数据库

RESTOREDATABASEDB_testFROMDISK='c:/DB_test.bak'

go

--切换到测试数据库

USEDB_test

go

--查看用户信息

selectnamefromsysuserswhereislogin=1

--我们会发现,用户aa存在于数据库中

--尝试一下,用aa登录,并切换到DB_test

--结果是登录成功,访问DB_test出现和测试1一样的错误

for SQL Server 错误 '80040e37'

对象名 'Dv_User' 无效。

/***.asp,行 *

先查看了一下数据库表,确实有这个表存在,而且程序中调用语句也没错.

重写了一下代码,结果还是一样.

怀疑不是程序的问题,于是看其他页面,发现所有的页面都有类似的问题,只要有调用到数据库的地方,都会出现错误.

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

导入也没错.

go了一把,就解决了.

--把所有表的所有者改为DBO就不会了。

--执行下面语句,更改所有表的所有者为DBO

exec sp_msforeachtable "sp_changeobjectowner '?','dbo'"

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。