我有一个包含数据库的 MS SQL Server 2008 Express 系统,我想要将其“复制并重命名”(用于测试),但我不知道如何简单地实现这一点。
我注意到在 SQL Server 的 R2 版本中有一个复制数据库向导,但遗憾的是我无法升级。
所涉及的数据库大小约为1G。我尝试将所需复制的数据库的备份还原到一个新数据库中,但没有成功。
我有一个包含数据库的 MS SQL Server 2008 Express 系统,我想要将其“复制并重命名”(用于测试),但我不知道如何简单地实现这一点。
我注意到在 SQL Server 的 R2 版本中有一个复制数据库向导,但遗憾的是我无法升级。
所涉及的数据库大小约为1G。我尝试将所需复制的数据库的备份还原到一个新数据库中,但没有成功。
安装 Microsoft SQL Management Studio,你可以从 Microsoft 网站免费下载:
版本 2008
Microsoft SQL Management Studio 2008 是 SQL Server 2008 Express with Advanced Services 的一部分。
版本 2012
点击下载按钮并勾选ENU\x64\SQLManagementStudio_x64_ENU.exe
版本 2014
点击下载按钮并勾选 MgmtStudio 64BIT\SQLManagementStudio_x64_ENU.exe
打开Microsoft SQL Management Studio。
右键数据库进行克隆,点击任务
,再点击复制数据库...
。按照向导操作即可完成。
您可以尝试将数据库分离,通过命令提示符将文件复制到新名称,然后附加两个数据库。
在SQL中:
USE master;
GO
EXEC sp_detach_db
@dbname = N'OriginalDB';
GO
在命令提示符下(为了简化示例中的文件路径):
copy c:\OriginalDB.mdf c:\NewDB.mdf
copy c:\OriginalDB.ldf c:\NewDB.ldf
再次回到SQL:
USE master;
GO
CREATE DATABASE OriginalDB
ON (FILENAME = 'C:\OriginalDB.mdf'),
(FILENAME = 'C:\OriginalDB.ldf')
FOR ATTACH;
GO
CREATE DATABASE NewDB
ON (FILENAME = 'C:\NewDB.mdf'),
(FILENAME = 'C:\NewDB.ldf')
FOR ATTACH;
GO
select * from OriginalDB.sys.sysfiles
语句可以查找数据库文件的位置。 - JohnLBevan事实证明,我之前尝试从备份中还原数据的方式错误了。
最初我创建了一个新的数据库,然后试图在此处恢复备份。而我应该做的是打开还原对话框,并在目标字段中键入新数据库的名称,这才是最终有效的方法。
因此,简而言之,从备份中还原数据解决了问题。
感谢大家提供的反馈和建议。
这是我使用的脚本。有点复杂,但它可以工作。 在SQL Server 2012上进行了测试。
DECLARE @backupPath nvarchar(400);
DECLARE @sourceDb nvarchar(50);
DECLARE @sourceDb_log nvarchar(50);
DECLARE @destDb nvarchar(50);
DECLARE @destMdf nvarchar(100);
DECLARE @destLdf nvarchar(100);
DECLARE @sqlServerDbFolder nvarchar(100);
SET @sourceDb = 'db1'
SET @sourceDb_log = @sourceDb + '_log'
SET @backupPath = 'E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\Backup\' + @sourceDb + '.bak' --ATTENTION: file must already exist and SQL Server must have access to it
SET @sqlServerDbFolder = 'E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\DATA\'
SET @destDb = 'db2'
SET @destMdf = @sqlServerDbFolder + @destDb + '.mdf'
SET @destLdf = @sqlServerDbFolder + @destDb + '_log' + '.ldf'
BACKUP DATABASE @sourceDb TO DISK = @backupPath
RESTORE DATABASE @destDb FROM DISK = @backupPath
WITH REPLACE,
MOVE @sourceDb TO @destMdf,
MOVE @sourceDb_log TO @destLdf
SET @sourceDb_log = (SELECT files.name FROM sys.databases dbs INNER JOIN sys.master_files files ON dbs.database_id=files.database_id WHERE dbs.name=@sourceDb AND files.type=1)
和一个类似的查询的单独变量 @sourceDb_data(替换为 files.type=0
)。希望对你有所帮助! - Dan CaseleyMsg 137, Level 15, State 2, Line 25 Must declare the scalar variable "@destDb".
原来我在变量声明和使用之间放了一个 GO
语句,我们不能这样做,参见:https://dev59.com/0Ww05IYBdhLWcg3wiyRJ#55347161 - Arsinclair'@'
即可进行语法修正:
SET @backupPath = 'E:\tmp\' + @sourceDb + '.bak' --注意:文件必须已经存在,SQL Server 必须能够访问它。
此外,您可以将备份文件夹设置为 E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\Backup\
,以避免设置安全访问权限。 - Andreas Venieris从SSMS :
1 - 备份原始数据库为 .BAK 文件 (your_source_db -> 任务 -> 备份).
2 - 右键点击 "Databases" 和 '还原数据库'
3 - 设备 > ... (按钮) > 添加 > 选择 your_source_db.bak
4 - 在 '常规' 选项卡中,在 '目标' 部分,将 your_source_db 重命名为 new_name_db
5 - 在 '文件' 选项卡中,勾选 '重定位所有文件到文件夹',
6 - 在 '选项' 选项卡中,在 '还原选项' 部分中,勾选前两个选项 ('覆盖...', '保留...'),并对 '恢复状态' 选择 'RESTORE WITH RECOVERY'
.sql
文件
.sql
文件保存在本地.sql
文件中用目标数据库替换源数据库
Data Source=Mehdi\SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
USE
命令设置为正确的数据库即可。