要么孵化 要么臭掉
SQL Server数据库复制
很少摸 Windows 环境下的东西,最近被个 MS SQL Server 的数据库搞得头大。实在不像 MySQL 那样用起来轻车熟路, OrZ ...
本来以为企业管理器里面既然提供了 DTS 数据导入/导出 的功能,直接使用 DTS 指定源和目标库就可以完全复制数据库到远程服务器上了。结果发现除了表的基本结构和数据,字段约束、键值、默认值等都没过去。最终还是要靠直接磁盘拷贝数据文件了事。
如果数据库服务可以停下来的话,最快的方法是直接拷贝对应的 .mdf 和 .ldf 文件(在企业管理器选择数据库右键看属性的“数据文件”项确定文件名);然后执行T-SQL命令(比如新的目标数据库名为 test ):
-- 如果 test 数据库已经存在,需要先把其分离。
-- 如果已经有应用连接到该数据库的话,就需要使用企业管理器
-- "所有任务"中的"分离数据库"功能强制断开现有连接后再分离
EXEC sp_detach_db
@dbname = 'test',
@skipchecks = 'true'-- 把拷贝出来的 .mdf 文件和 .ldf 文件作为 test 数据库的数据文件挂上去
EXEC sp_attach_db
@dbname = 'test',
@filename1 = 'e:\db\test.mdf',
@filename2 = 'e:\db\test.ldf'-- 如果不想使用原来的 .ldf 文件,也可以单独挂 .mdf 文件
EXEC sp_attach_single_file_db
@dbname = 'test',
@physname = 'e:\db\test.mdf'
如果当前数据库处于生产环境不允许关闭服务的话,可以使用 BACKUP / RESTORE 的方法来完成复制工作:
-- 把数据库名为realdb的数据库备份到指定的磁盘文件
BACKUP DATABASE realdb TO DISK = 'E:\db\BAK_FOR_realdb.bak'
-- 用 RESTORE FILELISTONLY 命令查看数据库备份文件里面的
-- 数据文件和日志文件的逻辑名称,用于下一步的命令
RESTORE FILELISTONLY FROM DISK = 'E:\db\BAK_FOR_realdb.bak'-- 使用备份文件创建一个新的数据库, realdb_dat 和 realdb_log
-- 分别是上面使用 RESTORE FILELISTONLY 命令查出的数据文件逻辑
-- 名称
RESTORE DATABASE test
FROM DISK = 'E:\db\BAK_FOR_realdb.bak'
WITH MOVE 'realdb_dat' TO 'E:\db\test.mdf',
MOVE 'realdb_log' TO 'E:\db\test.ldf'
GO
2008年 04月
2008年 03月
2008年 02月
2008年 01月
2007年 12月
2007年 11月
2007年 10月
2007年 09月
2007年 08月
2007年 07月
2007年 06月
2007年 05月
2007年 04月
2007年 03月
2007年 02月
2007年 01月
2006年 12月
2006年 11月
2006年 10月
2006年 09月
2006年 08月
2006年 07月
2006年 06月
2006年 05月
2006年 04月
2006年 03月
2006年 02月
2006年 01月
2005年 12月
2005年 11月
2005年 10月
2005年 09月
2005年 08月
2005年 07月
2005年 06月
2005年 05月
2005年 04月
Pivot1.24.1 开发
