Sql server 使用Powershell集变量恢复SQL数据库

Sql server 使用Powershell集变量恢复SQL数据库,sql-server,powershell,dbatools,Sql Server,Powershell,Dbatools,情况: 我们有一个托管应用程序,需要直接访问SQL server,但无法访问。解决办法是主机通过SFTP提供每周备份 我有一个使用WinSCP下载备份的脚本: 运行CMD批处理脚本以运行WinSCP脚本(保存并在WinSCP目录中运行) WinSCP脚本已运行: open sftp://<<Serveraddress and login>><<REMOTE SFTP DIRECTORY>> synchronize local -delete "

情况:

我们有一个托管应用程序,需要直接访问SQL server,但无法访问。解决办法是主机通过SFTP提供每周备份

我有一个使用WinSCP下载备份的脚本:

运行CMD批处理脚本以运行WinSCP脚本(保存并在WinSCP目录中运行)

WinSCP脚本已运行:

 open sftp://<<Serveraddress and login>><<REMOTE SFTP DIRECTORY>>
 synchronize local -delete "<<LOCAL DIRECTORY" "<<REMOTE SFTP DIRECTORY>>"
 exit
权限脚本

USE [DB]
GO
CREATE USER [Reader] FOR LOGIN [Reader]
GO
USE [DB]
GO
ALTER ROLE [db_datareader] ADD MEMBER [Reader]
GO

此命令在WinSCP命令将备份放入目录后使用。

您可以使用名为的基于社区的模块。您需要的命令是
Restore dbadabase
,可以找到完整的代码

如果每次只保留一个备份文件进行恢复,只需调用restore函数并将其指向目录即可。它将拾取备份,然后将其还原,因为它只是一个完整备份

例如,如果将备份文件拉到
C:\MSSQL\Backups
,您的SQL Server实例也可以访问该目录。您可以运行以下代码:

Import-Module dbatools
Restore-DbaDatabase -SqlServer SQLInstanceName -Path 'C:\MSSQL\Backups' -WithReplace `
-DestinationDataDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\' `
-DestinationLogDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\'

您可以查看命令的帮助以查看其他参数选项。我经常使用的是添加<代码> -OutPrdScript仅< /COD>,这将为您生成T-SQL脚本,如果您想以不同的进程/方法运行它。

进一步好奇为什么您的公司不考虑DBA来管理恢复。您的系统是否只有简单的恢复?如果它使用完全备份和/或差异备份,则必须说明从上次完全备份开始的顺序备份。您知道单用户的操作吗?医生们做了一次全新的整容,而且更容易学习。即使有人给了你一个脚本,你也要为这个改变负责。因此,向DBA询问TSQL脚本似乎可以使用shell环境变量。请参阅本还原的C部分,该部分不用于备份目的。此还原的SQL数据库正在用于Tableau。单一用户是指所有Tableau工作簿都可以访问的用户。这不是用于任何其他目的。这是完美的工作。这是我根据需要运行的命令:Restore dbadabase-SqlInstance localhost-path'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup'-WithReplace-UseDestinationDefaultDirectory
USE [master]
ALTER DATABASE [DB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE [DB] FROM  DISK = N'<<LOCAL DIRECTORY>>\<<BACKUP FILE>>' WITH  FILE = 1,  MOVE N'DB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DB.mdf',  MOVE N'DB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DB_log.ldf',  NOUNLOAD,  REPLACE,  STATS = 5
GO
ALTER DATABASE [DB] SET MULTI_USER
GO

USE [DB]
GO
CREATE USER [Reader] FOR LOGIN [Reader]
GO
USE [DB]
GO
ALTER ROLE [db_datareader] ADD MEMBER [Reader]
GO
Restore-DBADatabase -SqlInstance localhost -path 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup' -WithReplace -UseDestinationDefaultDirectories

invoke-sqlcmd -inputfile "Permission.sql" -serverinstance localhost
USE [DB]
GO
CREATE USER [Reader] FOR LOGIN [Reader]
GO
USE [DB]
GO
ALTER ROLE [db_datareader] ADD MEMBER [Reader]
GO
Import-Module dbatools
Restore-DbaDatabase -SqlServer SQLInstanceName -Path 'C:\MSSQL\Backups' -WithReplace `
-DestinationDataDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\' `
-DestinationLogDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\'