创建现有数据库的副本并使用 Powershell 脚本对其进行重命名
Posted
技术标签:
【中文标题】创建现有数据库的副本并使用 Powershell 脚本对其进行重命名【英文标题】:Create a copy of an existing database and rename it with a Powershell script 【发布时间】:2019-12-07 18:00:22 【问题描述】:我正在尝试使用我在堆栈溢出时发现的 powershell 脚本来自动化我的项目中的一项任务,如下所述。
-
从集成环境登录 SQL Server。
在同一 SQL Server 中创建现有数据库的副本并重命名。
Import-Module SQLPS -DisableNameChecking
$Server = "Servername"
$SQLInstanceName = "SQLInsta\Test01"
$SourceDBName = "mrl_mpr_2_4_db"
Param(
[Parameter(Mandatory=$true)] [string]$CopyDBName
)
$Server = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.Server' -ArgumentList $SQLInstanceName
$SourceDB = $Server.Databases[$SourceDBName]
**$CopyDB = New-Object -TypeName 'Microsoft.SqlServer.Management.SMO.Database' - ArgumentList $Server, $CopyDBName**
执行上面突出显示的行时出现错误
PS SQLSERVER:> $CopyDB = New-Object -TypeName 'Microsoft.SqlServer.Management.SMO.Database' -ArgumentList $Server, $CopyDBName
New-Object:使用“2”参数调用“.ctor”的异常: "数据库 'Test_DB_1_0_DB' 的 SetParent 失败。"
在 line:1 char:11
$CopyDB = New-Object -TypeName 'Microsoft.SqlServer.Management.SMO.Database' -Ar ...
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
【问题讨论】:
【参考方案1】:试试这个脚本。它将处理复制数据库的所有方面,包括检查目标驱动器上的空间、检查目标计算机上是否存在所需的证书、检查 SQL 版本的兼容性。它将在 1 行中运行,并将应用所有必需的配置,例如设置兼容级别以匹配新版本、设置恢复级别、可选择复制用户和登录名,或恢复目标数据库的原始权限等。
查看维基
https://github.com/MikeyMing/powershell-sql/wiki/BackupAndRestore
请随时贡献。
谢谢
【讨论】:
【参考方案2】:尝试设置你的服务器的域
$Server = "Domain\Servername"
编辑:
首先,改变
$CopyDB = New-Object -TypeName 'Microsoft.SqlServer.Management.SMO.Database' - ArgumentList $Server, $CopyDBName
作为
$CopyDB = New-Object -TypeName 'Microsoft.SqlServer.Management.SMO.Database' -ArgumentList $Server, $CopyDBName
然后按照以下步骤调试问题
$Server = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.Server' -ArgumentList cwsql_listener
$Server
Instance Name Version ProductLevel UpdateLevel HostPlatform HostDistribution
------------- ------- ------------ ----------- ------------ ----------------
your-server-name 13.0.5101 SP2 n/a Windows n/a
$SourceDB = $Server.Databases[$SourceDBName]
$SourceDB
Name Status Size Space Avai Recovery Compat. Owner Collation
lable Model Level
---- ------ ---- ---------- -------- ------- ----- ---------
xxxxxxxxxxx Normal xx GB xx GB Full 100 xxxx\xxxxxx Turkish_CI_AS
$CopyDB = New-Object -TypeName 'Microsoft.SqlServer.Management.SMO.Database' -ArgumentList $Server, "test"
$CopyDB
名称状态大小空间 Avai Recovery Compat。所有者整理 标签模型级别 ---- ------ ---- ---------- -------- -------- ----- ------ --- 测试 xx MB xx KB 0
【讨论】:
Hello Dervis,设置域名后还是同样的错误。 HI Dervis,我很抱歉我无法关注你,因为我对此很陌生。正如你所说,我确实改变了。我收到了没有详细信息的空表,如下 CWSQL 侦听器。 PS SQLSERVER:\> $Server = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.Server' -ArgumentList cwsql_listener $Server Instance Name ------------- 导入模块 SQLPS -DisableNameChecking $Server = "NORTHAMERICA\Servername" $SQLInstanceName = "TEST01" $SourceDBName = "mrl_mpr_2_4_db" $Server = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo .Server' -ArgumentList cwsql_listener $Server $Server = New-Object -TypeName 'Microsoft.SqlServer.Management.Smo.Server' -ArgumentList $SQLInstanceName $SourceDB = $Server.Databases["mrl_mpr_2_4_db"] $SourceDB $CopyDB = New-对象 -TypeName 'Microsoft.SqlServer.Management.SMO.Database'-ArgumentList $Server,"TEST_DB" $CopyDB.Create()以上是关于创建现有数据库的副本并使用 Powershell 脚本对其进行重命名的主要内容,如果未能解决你的问题,请参考以下文章
创建 SQL 表作为现有表的副本(ODBC 和 C#)[关闭]
Powershell:创建 Az 副本到 blob 容器日志文件或详细