我要求用户可以拥有多个环境来进行实验并测试他们的修改有多好;在用户对他们对工作环境中的数据所做的修改感到满意之后,可以(部分或完全)将这些修改复制到另一个环境中;这些环境可以创建为空或作为其他环境的副本;现在我们正在使用SQL Azure,我们当前(未实现)的方法是使用语句在同一个数据库中将每个环境创建为不同的SQL模式
CREATE SCHEMA
直到现在,在POC中,这对我们来说真的很好。但是我不喜欢这种方法是创建新模式涉及执行多个脚本来在新模式中创建表和SP,因此当我们创建或更新默认模式对象时,我们还需要更新创建模式的脚本,也就是在创建模式时,我们需要使用另一个脚本批量复制原始模式中的数据,因此考虑到客户端数据的大小,这个过程有时不会那么快正如我所愿,并且维护SQL代码来创建环境对团队来说并不是那么好。
所以我的问题是,有没有办法使用T-SQL语句复制具有不同名称的整个dbo架构?我知道这可以使用SQL Server Management Studio和生成脚本选项手动完成,但这必须由于用户可以随时创建新环境,因此我已经检查了
的文档ALTER SCHEMA TargetSchema
TRANSFER SourceSchema.TableName;
但这只是更改了数据库对象架构,它不会创建对象的实际副本。
编辑: 我不是要为dev,qa和production创建不同的数据库,我已经拥有它们;我想要实现的是创建一个具有多个环境的Web应用程序,每个环境都是最终用户进行实验的沙箱,想象它就像在为一般公众提供这些数据之前创建草稿,所以当用户满意时通过修改,他们可以将这些数据移动到公共环境中,然后当它被移动时,其他人可以看到它
答案 0 :(得分:0)
您可以使用CREATE DATABASE ... AS COPY OF transact-sql语句来创建可用作QA,测试和开发数据库的Production数据库的副本。
CREATE DATABASE db_copy
AS COPY OF ozabzw7545.db_original ( SERVICE_OBJECTIVE = 'P2') ;
此处ozabzw7545是Azure SQL数据库服务器的名称。
答案 1 :(得分:0)
以下是Azure SQL数据库特有的完整语法+附加信息:CREATE DATABASE (Azure SQL Database)
的其他信息您也可以使用PowerShell:
New-AzureRmSqlDatabaseCopy -ResourceGroupName "myResourceGroup" `
-ServerName $sourceserver `
-DatabaseName "MySampleDatabase" `
-CopyResourceGroupName "myResourceGroup" `
-CopyServerName $targetserver `
-CopyDatabaseName "CopyOfMySampleDatabase"