加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 数据库还原和孤立用户的解决办法

发布时间:2020-12-12 15:38:16 所属栏目:MsSql教程 来源:网络整理
导读:先用 ? ? RESTORE ? FILELISTONLY ? ? FROM ? DISK ? = ? 'd:comcrm.dat' ? ? ? 可以看到备份集里的LogicalName和PhysicalName ? ? PhysicalName先不管,你记下LogicalName就好了 ? ? ? ? ? ? RESTORE ? DATABASE ? comcrm20041217 ? --新库名 ? ? FROM ? DI
先用 ?
? RESTORE ? FILELISTONLY ?
? FROM ? DISK ? = ? 'd:comcrm.dat' ? ?
? 可以看到备份集里的LogicalName和PhysicalName ?
? PhysicalName先不管,你记下LogicalName就好了 ?
? ?
? ?
? RESTORE ? DATABASE ? comcrm20041217 ? --新库名 ?
? FROM ? DISK ? = ? 'd:comcrm.dat' ? --存放你备份文件的位置及文件名 ?
? WITH ? MOVE ? 'comcrm_Data' ? TO ? 'c:tcomcrm20041217.mdf',? --数据文件还原后存放的新位置 ?
? MOVE ? 'comcrm_Log' ? TO ? 'c:comcrm20041217.ldf' ? ----日志文件还原后存放的新位置 ?
? ?
? comcrm_Data,comcrm_Log就是开始记下的数据文件和日志文件的LogicalName ?
? ?
? 'c:tcomcrm20041217.mdf','c:comcrm20041217.ldf' ? 是还原成的新库的物理文件名??
================================================================= ? ? 1.你可以试试直接恢复: ?
? restore ? database ? comcrm20041217 ?
? from ? disk='x:comcrm.dat' ? ?
? ?
? ?
? ?
? 2.如果恢复出错,则要知道备份文件的具体内容才好恢复 ?
? ?
? ?
? 首先要知道你的备份文件中包含了多少个备份及每个备份的详细信息,用SQL语句: ?
? RESTORE ? HEADERONLY ? from ? disk='x:comcrm.dat' ?
? ?
? ?
? 这样,可以从上面的结果集(结果集列的含义参考SQL联机帮助,下同)中,知道你应该恢复的数据库的备份号Position列) ?
? 然后,就可以从备份文件中获取你要恢复的这次备份的详细信息: ?
? restore ? filelistonly ? from ? disk='x:comcrm.dat' ? with ? file=xx ? --xx是备份号 ?
? ?
? 最后,你就可以用下面的语句来恢复了 ?
? restore ? database ? comcrm20041217 ?
? from ? disk='x:comcrm.dat' ? ?
? with ? file=xx ?
?,move ? '数据文件名' ? to ? '实际恢复后数据文件存放的目录及文件名' ? ? --这些信息根据上面的语句查询出来的结果进行修改 ?
?,move ? '日志文件名' ? to ? '实际恢复后日志文件存放的目录及文件名'??
? ============================================================ 解决复制数据库后 孤立用户的问题 ? sql server数据库进行还原的时候需要先执行解决孤立用户的sql语句,

?????? sp_change_users_login 'report'?? // 查看孤立用户

???????sp_change_users_login 'update_one','bt31user','bt31user'? //bt31user 是需要解决的孤立用户,该语句是将孤立用户关联到系统库。 ? ? 这里可以使用存储过程 sp_change_users_login 。它有三种动作,分别是 report update_one auto_fix

?????? 运行 sp_change_users_login 'report' ,系统会列出当前数据库的孤立用户数。

?????? 我们只需要选择当前数据库为 testdb ,然后运行

?????? sp_change_users_login 'update_one','test','test'

sp_change_users_login 'update_one','hbbt31User','hbbt31User'

?????? 系统就会提示修复了一个孤立用户。

?????? 如果没有建立 test 的登录用户,还可以用

sp_change_users_login 'Auto_Fix',NULL,'testpassword'

来创建一个登录用户名为 test ,密码为 testpassword 的用户与之对应。

?

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

?

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的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中
如果没有建立testuser的登录用户,还可以用
sp_change_users_login 'Auto_Fix','testuser','testpass' 用法3:
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
将用户名映射为指定的登录名。 ? ===================================================== ? 在对syslogins表做操作时如果提示: 未启用对系统目录的特殊更新。系统管理员必须重新配置 SQL Server 以允许这种操作。 的解决办法: ? 在一些网站或者软件系统中,由于安全或者程序异常等问题,可能会在SQL Server 2000中造成一个异常问题:在企业管理器中打开数据库发现有一些“坏表”,即无法使用,也无法正常删除。其原因往往是因为在尝试建表的过程中,只向数据库服务器的系统表sysobjects中写入了类型为“U”的记录,却并未真正在数据库中成功创建该表的实体。ok,解决问题有思路了: 假设“坏表”的表名为cmd,那么我们在查询分析器中对当前的数据库写一个sql语句: delete from sysobjects where [name]='cmd' and xtype='U' 按F5执行,可能会碰到一个错误提示:“未启用对系统目录的特殊更新。系统管理员必须重新配置 SQL Server 以允许这种操作。” 解决这个小小的问题的方法是:打开mssql server 属性---》服务器选项----》启用对系统目录的特殊更新(允许对系统目录进行直接修改)? 即可。(ps:企业管理器---》工具---》SQL Server 配置属性---》服务器设置---》允许对系统目录直接进行修改)之后重新在查询分析器中执行刚才的sql语句。 执行成功后。在企业管理器中会发现那个坏表已经不存在了。 [ 注:SQL2005中,由于微软做了重大调整,正常情况下不允许对系统表进行即席更新操作。所以本文提到的问题目前仅适用于SQL2000数据库,敬请注意 ]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读