求一SQL数据库附加脚本!

3tzjq 2008-12-19 04:55:08
比如我备份了数据库ERP2007 到D:\DB_BAK\ERP2007.bak
然后我想用脚本实现附加这个数据库备份文件'D:\DB_BAK\ERP2007.bak' 为新的数据库(命名'ERP2008').
这条SQL脚本该怎么写?
...全文
367 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
3tzjq 2008-12-20
  • 打赏
  • 举报
回复
嗯!没什么问题了!谢谢!结贴去...
dawugui 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 3tzjq 的回复:]
引用 16 楼 dawugui 的回复:
1.强制用户按标准(规则)进行备份.
2.自己更改相关名字.


我现在想获取现有数据库列表到UI,由用户自己选择要复制的数据库.
这种需求是不是先用SQL脚本备份指定数据库,然后再后上面的语句还原,再删除备份文件?还是有其它更好的方法(SQL脚本搞定)?
[/Quote]

在程序中用代码编写"自己选择要复制的数据库",用代码调用SQL脚本备份指定数据库,然后再用代码调用上面的语句还原.
至于你用什么代码,也就是说用什么开发语言,就自己看着办了.

至于是否删除备份文件,你自己看着办.
3tzjq 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 dawugui 的回复:]
1.强制用户按标准(规则)进行备份.
2.自己更改相关名字.
[/Quote]

我现在想获取现有数据库列表到UI,由用户自己选择要复制的数据库.
这种需求是不是先用SQL脚本备份指定数据库,然后再后上面的语句还原,再删除备份文件?还是有其它更好的方法(SQL脚本搞定)?
dawugui 2008-12-20
  • 打赏
  • 举报
回复
1.强制用户按标准(规则)进行备份.
2.自己更改相关名字.
3tzjq 2008-12-20
  • 打赏
  • 举报
回复
哦,如果文件名就是数据库名的话那好办,但用户可能并不遵守这一规则.
如备份为:
ERP2008-12-20.bak
EPR2008BAK
...
3tzjq 2008-12-20
  • 打赏
  • 举报
回复
不过现在有个问题是:
ERP200[x].bak里的数据库名是未知的(它也可能从ERP2008,2009...)备份.
这时'ERP2007' 和 'ERP2007_log' 就需要更改为备份数据库的名称.

该怎么获得ERP200[x].bak里的数据库名呢?
3tzjq 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dawugui 的回复:]
--11楼我写错了.
--你试试这个语句对不对,自己把路径和名称搞对,就行了.

SQL codeRESTORE DATABASE ERP2008
FROM DISK = 'c:\ERP2007.bak'
WITH MOVE 'ERP2008' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
MOVE 'ERP2008_log' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.ldf'
GO
[/Quote]

谢谢!我成功了!
RESTORE DATABASE ERP2008
FROM DISK = '\\SERVER\ERP\Backup\ERP2007.bak'
WITH MOVE 'ERP2007' TO 'd:\ERP\Data\ERP2008.mdf',
MOVE 'ERP2007_log' TO 'd:\ERP\Data\ERP2008_log.ldf'
GO
dawugui 2008-12-19
  • 打赏
  • 举报
回复
--11楼我写错了.
--你试试这个语句对不对,自己把路径和名称搞对,就行了.
RESTORE DATABASE ERP2008
FROM DISK = 'c:\ERP2007.bak'
WITH MOVE 'ERP2008' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
MOVE 'ERP2008_log' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.ldf'
GO
dawugui 2008-12-19
  • 打赏
  • 举报
回复
--你试试这个语句对不对,自己把路径和名称搞对,就行了.


RESTORE FILELISTONLY
FROM DISK = 'c:\ERP2007.bak'
RESTORE DATABASE TestDB
FROM DISK = 'c:\ERP2007.bak'
WITH MOVE 'ERP2008' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
MOVE 'ERP2008_log' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.ldf'
GO
dawugui 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 3tzjq 的回复:]
谢谢你耐心的回复!

我想你的意思大概是:
断开ERP2007的连接,用FileIO方式备份数据库文件ERP2007.mdb和ERP2007_log.ldf,并更改文件名为ERP2008.mdb和ERP2008_log.ldf

还原时再执行脚本:

SQL codeEXEC sp_attach_db @dbname = N'ERP2008',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.…

对吗?

没有方法从ERP2007.bak里解出ERP2007.mdb和ERP2007_log.ldf?
[/Quote]
不是这个意思,附加用这个方法.
还原时,用还原语句直接把名字改了就是了.
还原的语句不是在2楼已经有了吗?
3tzjq 2008-12-19
  • 打赏
  • 举报
回复
谢谢你耐心的回复!

我想你的意思大概是:
断开ERP2007的连接,用FileIO方式备份数据库文件ERP2007.mdb和ERP2007_log.ldf,并更改文件名为ERP2008.mdb和ERP2008_log.ldf

还原时再执行脚本:
EXEC sp_attach_db @dbname = N'ERP2008', 
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.ldf'
对吗?

没有方法从ERP2007.bak里解出ERP2007.mdb和ERP2007_log.ldf?
dawugui 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 3tzjq 的回复:]
嗯,但我只有备份到一个文件'D:\DB_BAK\ERP2007.bak' .
没有

该怎么做?
[/Quote]
不是早就告诉你了,用还原,自己把名字改了就是了.
3tzjq 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wufeng4552 的回复:]
SQL code1:還原數據庫
2:修改書庫庫名 Renamedb
[/Quote]

我试过,却把以前的数据库名给改了.
我要的是用备份的数据库(ERP2007.bak)文件创建一个新的数据库ERP2008,以前的不变.
水族杰纶 2008-12-19
  • 打赏
  • 举报
回复
1:還原數據庫
2:修改書庫庫名 Renamedb
3tzjq 2008-12-19
  • 打赏
  • 举报
回复
嗯,但我只有备份到一个文件'D:\DB_BAK\ERP2007.bak' .
没有

该怎么做?
dawugui 2008-12-19
  • 打赏
  • 举报
回复
就是把名字改了.
如果是附加.
如:
把拷贝出来的ERP2007.mdf ERP2008.mdf
把拷贝出来的ERP2007_log.ldf 改为ERP2008_log.ldf

然后把
然后附加时ERP2008.mdf和ERP2008_log.ldf拷贝到data目录下.

EXEC sp_attach_db @dbname = N'ERP2008',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.ldf'
3tzjq 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
SQL code示例
下面的示例将 pubs 中的两个文件附加到当前服务器。

EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'
SQL code
把文件名改为ERP2008
EXEC sp_attach_db @dbname = N'ERP2008',
@filename1 = N'c:\Program Files\Microsoft S…
[/Quote]

我以前的数据库'ERP2007'需要保留.该怎么写?
dawugui 2008-12-19
  • 打赏
  • 举报
回复
还原的例如下:

A. 还原完整数据库


说明 MyNwind 数据库仅供举例说明。


下例显示还原完整数据库备份。

RESTORE DATABASE MyNwind
FROM MyNwind_1

B. 还原完整数据库备份和差异备份
下例还原完整数据库备份后还原差异备份。另外,下例还说明如何还原媒体上的另一个备份集。差异备份追加到包含完整数据库备份的备份设备上。

RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH FILE = 2

C. 使用 RESTART 语法还原数据库
下例使用 RESTART 选项重新启动因服务器电源故障而中断的 RESTORE 操作。

-- This database RESTORE halted prematurely due to power failure.
RESTORE DATABASE MyNwind
FROM MyNwind_1
-- Here is the RESTORE RESTART operation.
RESTORE DATABASE MyNwind
FROM MyNwind_1 WITH RESTART

D. 还原数据库并移动文件
下例还原完整数据库和事务日志,并将已还原的数据库移动到 C:\Program Files\Microsoft SQL Server\MSSQL\Data 目录下。

RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH NORECOVERY,
MOVE 'MyNwind' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.mdf',
MOVE 'MyNwindLog1' TO 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\NewNwind.ldf'
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH RECOVERY

E. 使用 BACKUP 和 RESTORE 创建数据库的复本
下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息,请参见 RESTORE FILELISTONLY。

BACKUP DATABASE Northwind
TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY
FROM DISK = 'c:\Northwind.bak'
RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'
WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
GO

F. 使用 STOPAT 语法还原到即时点和使用多个设备进行还原
下例将数据库还原到其在 1998 年 4 月 15 日中午 12 点时的状态,并显示涉及多个日志和多个备份设备的还原操作。

RESTORE DATABASE MyNwind
FROM MyNwind_1, MyNwind_2
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog1
WITH NORECOVERY
RESTORE LOG MyNwind
FROM MyNwindLog2
WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'

G. 使用 TAPE 语法还原
下例显示从 TAPE 备份设备还原完整数据库备份。

RESTORE DATABASE MyNwind
FROM TAPE = '\\.\tape0'

H. 使用 FILE 和 FILEGROUP 语法还原
下例还原一个包含两个文件、一个文件组和一个事务日志的数据库。

RESTORE DATABASE MyNwind
FILE = 'MyNwind_data_1',
FILE = 'MyNwind_data_2',
FILEGROUP = 'new_customers'
FROM MyNwind_1
WITH NORECOVERY
-- Restore the log backup.
RESTORE LOG MyNwind
FROM MyNwindLog1

I. 将事务日志还原到标记处
下例显示将事务日志还原到名为"RoyaltyUpdate"的标记处。

BEGIN TRANSACTION RoyaltyUpdate
WITH MARK 'Update royalty values'
GO
USE pubs
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'PC%'
GO
COMMIT TRANSACTION RoyaltyUpdate
GO
--Time passes. Regular database
--and log backups are taken.
--An error occurs.
USE master
GO

RESTORE DATABASE pubs
FROM Pubs1
WITH FILE = 3, NORECOVERY
GO
RESTORE LOG pubs
FROM Pubs1
WITH FILE = 4,
STOPATMARK = 'RoyaltyUpdate'
dawugui 2008-12-19
  • 打赏
  • 举报
回复
示例
下面的示例将 pubs 中的两个文件附加到当前服务器。

EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'




把文件名改为ERP2008
EXEC sp_attach_db @dbname = N'ERP2008',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ERP2008_log.ldf'



另,你需要的不是附加,是还原.

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧