关于 SQL 7 数据库恢复的问题,急急急急急急!(100分)

  • 主题发起人 主题发起人 question
  • 开始时间 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
用 SA 创建了一个数据库 TESTDB ,建立一个用户 TEST 授予用户创建表的权
力,将产生的文件TESTDB_Log.LDF和TESTDB_Data.MDF 拷贝到另一台机器上
使用
EXEC sp_attach_db @dbname = N'TESTDB',
@filename1 = N'E:/ExeRun/TESTDB_Data.MDF',
@filename2 = N'E:/ExeRun/TESTDB_Log.LDF'
后创建用户 TEST ,得到错误的提示:
Server: Msg 15023, Level 16, State 1, Procedure sp_grantdbaccess, Line 136
User or role 'test' already exists in the current database.
如何解决???
PS:如果先创建 TEST 用户再sp_attach_db也出现这样的错误。
这样 TEST 就无法访问数据库 TESTDB ,如何恢复?
有解决方法吗???
焦急等待!!!
 
把Role删掉呀
 
是否是创建Test用户的问题.
 
如果是仅仅要建立数据库,那么可以先生成Sql在创建;
如果要包含数据,则可以先做第一不,再导入数据。
如果一定要mdf,则必须先建立一个同名库,stop Sql,再拷贝覆盖生成的文件,再start sql
 
To wrench:
是使用 sp_droprole 'TEST' 吗?
我用 sa use TESTDB 后执行sp_droprole 'TEST'提示:
Server: Msg 15014, Level 16, State 1, Procedure sp_droprole, Line 34
The role 'TEST' does not exist in the current database.
我创建的表用 SA 看是
NAME owner TYPE Create Date
----------------------------
T01 TEST User ..
. . .
. . .
TXX TEST User

而现在我的用户列表中更本就没有 TEST ,这个 TEST 的权利如何剥夺?
就因为存在这个 TEST 所以新加的就出错误,而我的程序都用了
简写的语句 select * from t01 而这样用新用户就检索不到
非要用 select * from test.t01 才可以,而现在的问题是没办法去该程序
所以,只有改数据库.能解决吗?
此题我再多加 100 分。
各位多帮帮忙!!
急、急、急、急、急!
 
产生问题的数据库操作的步骤是
用 SA 创建了一个新数据表,TESTDB
后又创建了用户TEST,默认登录到数据库 TESTDB 上
执行
use TESTDB
go
exec sp_grantdbaccess N'test', N'test'
go
GRANT CREATE TABLE , CREATE VIEW , CREATE PROCEDURE , DUMP DATABASE , CREATE DEFAULT , DUMP TRANSACTION , CREATE RULE TO [test1]
然后使用 test 登录创建了一些表,owner 都显示是 TEST,后关闭 SQL
将文件TESTDB_Data.MDF 和 TESTDB_Log.LDF 拷贝到另一台计算机上
使用
EXEC sp_attach_db @dbname = N'TESTDB',
@filename1 = N'E:/ExeRun/TESTDB_Data.MDF',
@filename2 = N'E:/ExeRun/TESTDB_Log.LDF'
连接后执行
exec sp_addlogin 'TEST',NULL,'TESTDB' 提示成功
后执行
use TESTDB
go
成功
再执行
exec sp_grantdbaccess N'test', N'test' 错误,提示:
Server: Msg 15023, Level 16, State 1, Procedure sp_grantdbaccess, Line 136
User or role 'test' already exists in the current database.

这就是问题的全过程,能恢复成和原机器一样吗?

 
更正:
上面的
GRANT CREATE TABLE , CREATE VIEW , CREATE PROCEDURE , DUMP DATABASE , CREATE DEFAULT , DUMP TRANSACTION , CREATE RULE TO [test1]
应该是:
GRANT CREATE TABLE , CREATE VIEW , CREATE PROCEDURE , DUMP DATABASE , CREATE DEFAULT , DUMP TRANSACTION , CREATE RULE TO [test]
 
你要先在目标机上建立temp用户
再执行sp_attach_db
数据库的恢复连用户权限一起恢复的
不用再授权

如果还不行
把sa的权限给temp
用temp来执行sp_attach_db

如果还不行
。。。。
我们再讨论

这个问题我遇到过
但我忘记了
不妥的话
我再想想





 
To wrench:
>你要先在目标机上建立temp用户
>执行sp_attach_db
>据库的恢复连用户权限一起恢复的
>用再授权
能具体点吗?最好有示例代码,我不太明白你的意思。

 
可以建TEST用户再Restore
 
就是说 你要先执行sp_addlogin
再执行sp_attach_db
 
use test
sp_revokedbaccess 'test'
 
你这样做不好,最好不要把TESTDB_Log.LDF和TESTDB_Data.MDF 拷贝到另一台机器
上使用,你最好是应该先备份,得到这个备份文件再拷贝到另一台机器上,再
Restore。
 
fstao:
这样做也会碰到同样的问题.关键是SQL7 恢复或者 attach 数据库时,会将登录用户的访问许可一起恢复上去.
 
好象不行,如果库是用户创建的还可以,如果不是好象还是解决不了!
Sigh.
 
同意fstao的办法:为何不试试Backup and Restore
 
用 sa 登录, use test

如果 test 用户已经创建了一些表,可先用
sp_changeobjectowner 'test.XXX','dbo' 改变表的 owner
再用
sp_revokedbaccess 'test' 取消 test 的访问许可,

sp_addlogin 'TEST',NULL,'TESTDB'
sp_grantdbaccess 'test', 'test'

我反复试验了几次,没问题.

如果先 backup 再 restore 也同样.
 
-》关于Backup and Restore我这里没法Backup
数据库就有 8G ,而硬盘就10.5G没法生成 备份。
-》gxg8816 你的方法我也试过,可我的数据表有几百个表、存储过程、触发、试图
一一都要改,这恐怕 ... 好累! ^_^
我正在试验用一个存储过程读系统表解决这个问题,OK了就结束问题。
Good Luck!
 
多人接受答案了。
 
后退
顶部