我正在尝试使用以下限制将我的生产数据库备份到我的本地开发机器:
我尝试仅使用以下方法备份架构:
Microsoft.SqlServer.Management.Smo.FailedOperationException: Discover dependencies failed. ---> System.ArgumentException: Item has already been added. Key in dictionary: 'Server[@Name='PRODSQL']/Database[@Name='Database1']/UnresolvedEntity[@Name='SomeObjectName' and @Schema='Some.Schema.SomeObjectName']' Key being added: 'Server[@Name='PRODSQL']/Database[@Name='Database1']/UnresolvedEntity[@Name='SomeObjectName' and @Schema='Some.Schema.SomeObjectName']' at System.Collections.SortedList.Add(Object key, Object value) at Microsoft.SqlServer.Management.Smo.DependencyTree..ctor(Urn[] urns, DependencyChainCollection dependencies, Boolean fParents, Server server) at Microsoft.SqlServer.Management.Smo.DependencyWalker.DiscoverDependencies(Urn[] urns, Boolean parents) --- End of inner exception stack trace --- at Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
所以我继续前进。
任务 - >复制数据库
我收到一条消息,说磁盘上没有足够的空间
提取数据层应用程序
获得与上述相同的错误。
Powershell脚本,以及在运行PS脚本后在生成的.sql文件上调用sqlcmd的批处理文件。
我确信这种方法可行,我花了两天时间才能做到这一点,但仍然在解决多个错误。
基本上我正在做以下事情:
从源数据库创建数据库对象(模式,SP,表,视图,UDF,触发器,索引)并将它们输出到.sql文件 - 大致遵循http://cfmumbojumbo.com/index.cfm/coding/using-powershell-to-backup-your-stored-procedures-and-triggers/并添加了更多工作。< / p>
如果我的服务器上已经存在数据库,请执行kill,drop,然后重新创建它(DropCreate.sql):
IF(db_id(@DatabaseName) IS NOT NULL)
BEGIN
DECLARE @SQL VARCHAR(max)
SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(VARCHAR, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId
EXEC(@SQL);
END
DROP DATABASE MYDATABASE
CREATE DATABASE MYDATABASE ON PRIMARY (...)
.bat文件基本上是这样做的
sqlcmd -S %Server% -U %UserName% -P %Password% -i C:\Database\DatabaseScripts\TestDatabase\DropCreateDB.sql
#loop through and execute multiple .sql files in the directory
for /f %f in (`dir /b C:\Database\DatabaseScripts\TestDatabase\2018-04-18-15-13-13\StoredProcedures\`) do sqlcmd -S %Server% -d %Database% -U %UserName% -P %Password% -i %f
#Just one sql file in this directory, execute it
sqlcmd -S %Server% -d %Database% -U %UserName% -P %Password% -i C:\Database\DatabaseScripts\TestDatabase\2018-04-18-15-13-13\Schemas\AllSchemas.sql
sqlcmd -S %Server% -d %Database% -U %UserName% -P %Password% -i C:\Database\DatabaseScripts\TestDatabase\2018-04-18-15-13-13\Tables\AllTables.sql
.............
我遇到的最新错误是:
将数据库上下文更改为“master”。 消息6107,状态1,状态1,服务器MYSERVER,第1行 只能杀死用户进程。 在这个时候出乎意料。
我转向的任何地方我都遇到了新的错误,花了2天以上的时间,我还没有得到数据......
TLDR:有没有更简单的方法来备份MSSQL Db架构和来自某些表的前n行数据?