1、我如何回滚因错误产生的变更?
2、我如何将变更从一个数据库移到另一个数据库中?
熟悉到在开发时间里你可能会犯错误,那么在每次更改之前都先给数据库进行一次拷贝。你可能会发现自己最终被埋在数据库的几百份拷贝中——我就见过这种情况发生。这会变得非常难以处理。假如你的工作方式更像我,那么你会想要工作在开发数据库中,只是简单的找到一种方法来治理错误。要处理这种错误,通常有两种方式:数据库备份和数据库快照。我将要讨论的第一种方式是数据库备份(注重:你可以使用SQL Server治理套件执行每种技巧——但是因为我们是开发人员,所以我们将会在Transact-SQL完成这些任务。)
首先,让我们创建一个完全的数据库备份。
| BACKUP DATABASE [AdventureWorksDW] TO DISK = N'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLBackupAdventureWorksDW.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorksDW-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO |
在这个例子中,我为SQL Server默认环境备份了AdventureWorks DW示例数据库到备份文件夹中去。备份是我们最可靠的擦除器。假如你不想要经常备份,试试叫作“数据库快照”的数据库新功能。数据库快照就是第二种方式。它答应我们取出某个时间点的数据库图像。当主数据库(或者源数据库)发生变化的时候,快照数据库对数据库备份之前发生的主要变化进行了记录。从本质上说,数据库快照在拷贝上使用了从被修改页面上传过来的写技术。因此你可以使用快照来进行恢复。要创建数据库快照,我执行如下的T-SQL:
CREATE DATABASE AdventureWorks_DWBEFORECHANGE ON ( NAME = AdventureWorksDW_Data, FILENAME = 'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataAdventureWorks_DW.ss'AS SNAPSHOT OF AdventureWorksDW; |
这里灵活的部分就是知道数据文件的名字,在NAME子句中提供出来。你可以通过在SQL Server治理套件的数据库对象浏览器中找到拥有的文件来找到数据库数据文件名(是的,我们耍赖了)。
现在,我们做一些修改,然后。噢我的天!我们需要回滚!魔法就在这里: