2008-06-06 08:37:12 来源:中国计算机报
数据库管理员需要定期对测试或发展中的数据库进行恢复,不管是计划中的还是临时的操作需要,恢复数据库的时候一个重要的步骤是要确保在操作过程中拥有数据库的唯一访问权,否则恢复程序就不能完成。那么要怎么样才能获得数据库的唯一访问权以保证数据库恢复顺利进行呢?
——湖南省长沙市 魏书鹏
Q博士:
以下有几种方法可以让你获得数据库唯一访问权:
Kill 用户
使用这个办法需要注意的是,一旦你Kill掉了连接,要确保它不会再重新连接。有一些系统会有自动连接的设置,那么用这个方法就不太合适。
使用GUI进行数据库恢复
在Enterprise Manager和SQL Server Management Studio里并没有在恢复数据库时Kill掉所有用户的选项。当你运行恢复数据库程序,点击“恢复”按钮,恢复数据库程序会开始运行,但有时候不能完成,会因为各种各样原因,出现错误信息提示。因此,如果你的数据库有开放的交易处理或者连接,这个方法也不适用。
断开数据库,再次连接并恢复数据库。
另一个可行的方法就是断开数据库。在通过GUI断开数据库时,你可以选择首先断开现有连接。要Kill掉所有的连接,然后把数据库设置为单用户模式,最后把数据库断开,使其离线。
通过这个方法,你可以断开现有连接,重新连接数据库,并把它设置为单用户模式,再进行数据库恢复。不过这个方法还是无法排除其他连接与你重新连接同时出现的可能性。因此,这个方法其实也不是十分好,而且步骤太多。
最好的方法应该是使用“ALTER DATABASE”命令把数据库转换成单用户模式,同时拒绝其他任何的执行事务。这个命令可以有以下三种形式:
ALTER DATABASE [Test4] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
OR
ALTER DATABASE [Test4] SET SINGLE_USER WITH ROLLBACK AFTER 30
OR
ALTER DATABASE [Test4] SET SINGLE_USER WITH NO_WAIT
“WITH ROLLBACK IMMEDIATE”这个命令不会等待现有的执行事务完成,它会停止所有开放的执行命令。
“WITH ROLLBACK AFTER ”这个命令在等待秒之后停止所有执行命令。在上面例子里,程序等待了30秒之后开始停止执行事务。
“WITH NO_WAIT”这个命令可以在所有执行事务完成之后把数据库转换为单用户模式。它会等待指定的一段时候,如果执行事务不能在这段时间内完成,该程序就会自动取消。这个办法是最可靠的办法,因为它不会取消任何运行中的执行事务。但是不足的地方是,如果一直存在执行事务,那么这个程序就一直不能完成。
只要把数据库转化成单用户模式,你就可以获得数据库的唯一访问权,并顺利完成数据库恢复。
注意:在选择使用ROLLBACK命令的时候,你会取消所有数据库正在运行的执行事务,虽然取消执行事务不会有什么问题,但是如果存在花费时间较长的执行事务,那么你就要花很长一段时间来完成取消执行事务。因此使用这个命令的时候,要先检查一下数据库系统里有什么执行事务正在运行。如果是针对测试或开发中的系统,反正你需要进行系统恢复,有什么执行事务正在运行并不重要,只是需要注意要取消比较长的执行事务需要较长的时间。
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。