Microsoft OLE DB Provider for SQL Server 错误 '80004005'

Microsoft OLE DB Provider for SQL Server 错误 '80004005',第1张

解决办法:

步骤: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'"

在实际使用环境中,有时候我们需要清空所有redis集群的数据进行测试,这是使用这个脚本就开始发挥作用了。希望能帮到所需要的人。

cat /tmp/flushall-cluster.sh

脚本怎么使用

sh flushall-cluster.sh 主机地址 端口

参考:

flushall-cluster.sh


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9999906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存