执行数据库恢复是dba的日常生活的一部分。一个dba可能需要执行恢复由于种种原因,如恢复,刷新数据库用于测试目的等许多倍,它可能很难执行恢复由于损坏的媒体,在服务器上的磁盘空间不足等。在这篇文章中,我将概述的方法之一,我用来恢复的备份生产数据库的
方案
夫妇的日子,我的支持团队的成员来找我,说他们是无法刷新农行从生产服务器相同的的备份副本名为oltp开发环境数据库。从生产服务器的备份副本大约75 gb的大小。在我们的开发机中,我们只有1专门为sql server,这是留下的自由空间仅70 gb驱动器(d)。
恢复解决方案
有一个详细了解后,我来到了一个结论,我不能释放任何空间上的d盘的开发机。很重要的一点要提到的是,我们整个的开发机在不同的域比分期和生产箱。
我登录到生产服务器,并决定分成相等的两部分使用如下所示的t - sql的名为abc的数据库备份:
代码如下 复制代码
backup database abc
to disk='b:db backuabc_1.bak',
disk='b:db backupsabc_2.bak'
go
一旦上述的t - sql语句块被执行,它分割成相等的两部分命名为农行目前在生产服务器上的数据库的完整备份。例如,如果数据库的大小是76 gb,那么它将会分成两个等份,每一个大小为36 gb。
一旦被分裂成两等份的完整备份,然后我就可以执行对他们的rar。显然首先执行的rar,然后将它们移动到不同的服务器会比移动一个规模更大的正本更快。一旦分割文件压缩成功,然后我走上了我的临时服务器。这是因为临时框是不错的,在资源方面也因为的生产和临时服务器复制过程在不同的数据中心,由于良好的硬件工作得更快。正如前面所讨论的自由空间的开发oltp中仅有70 gb,而备份副本为75 gb,因此是不可能的开发oltp中传输完整备份压缩的副本。我有另一个框,这是作为一个ssis开发服务器与大量的自由空间使用。它们如下:
驱动器d有49.9 gb的可用空间
驱动器c有55 gb的可用空间
开发机独立的机器,而不是一个集群,因此有1备份的压缩文件复制到c驱动器没有问题。
然后,我走上了开发ssis服务器和名为backup_03102011_db目前对d盘的文件夹到其他的压缩文件的驱动器c的命名备份文件夹,压缩文件的一个副本。我给这两个文件夹的全部权限。
代码如下 复制代码
restore database abc
from disk='\10.a.a.abackupsabc_1.bak',
disk='\10.a.a.abackup_03102011_dbabc_2.bak'
with move 'abc_data' to 'd:program filesmicrosoft sqlservermssql.1mssqldataabc_data_1.mdf',
move 'abc_log' to 'd:program filesmicrosoft sqlservermssql.1mssqldataabc_log.ldf'
go
凡10.aaa是dev的机器的ip地址。
一旦成功地执行了上述t - sql代码块,然后,我改变了对名为abc的数据库执行以下查询sa数据库的所有者。
代码如下 复制代码
exec sp_changedbowner ‘sa’
下一步涉及映射孤立用户。为了找到孤立的用户,您需要执行对abc数据库上开发oltp机下面的t - sql查询
代码如下 复制代码
sp_change_users_login @action='report'
一旦上面的查询执行时,它会列出所有孤立用户名为abc的数据库中。为了解决这个问题,则需要执行下面的t - sql查询:
代码如下 复制代码
exec sp_change_users_login @action='update_one', @usernamepattern='user name', @loginname='login name';