状況設定:我々は、直接SQLサーバへのアクセスだけにはできませんが必要なホストされたアプリケーションを持っているSQLデータベースには、PowerShellを使用して復元する可変
を。回避策は、ホストがSFTP経由で毎週バックアップを提供することです。スクリプトは、WinSCPのスクリプトを実行するために走った
CMDバッチは、(保存されたとのWinSCPディレクトリで実行されていました)
WinSCP.com /script=sftpscript.txt
WinSCPのスクリプトが実行された:
を私はWinSCPのを使用してバックアップをダウンロードするスクリプトを持っています
open sftp://<<Serveraddress and login>><<REMOTE SFTP DIRECTORY>>
synchronize local -delete "<<LOCAL DIRECTORY" "<<REMOTE SFTP DIRECTORY>>"
exit
ダウンロードしたバックアップのファイル名の末尾にタイムスタンプがあります。 BACKUP_20170526_222744.BAK
私は更新ファイル名を自動的に照会し、そのファイル名を変数として使用してバックアップを復元する必要があります。私は、ファイル名をプルする方法を考え出し、ここPowerShellの変数として設定している:
set-location -path '<<LOCAL BACKUP DIRECTORY>>'
$bak = ls | where-object {$_.Name -Like '*.BAK'} | select-object -expandproperty name
TSQLでのデータベースを復元するために、私は現在が、手動でバックアップファイル名を入力すると、次のスクリプトを使用しています:
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
を
PowershellとTSQLの両方のスクリプトは、現在意図したとおりに動作します。 Powershellは$ bak変数をバックアップの正しいファイル名に設定します SQLスクリプトはバックアップを復元しますが、手動でバックアップのファイル名を入力した場合に限ります。
私の問題は、Powershell Variable $ bakをTSQLスクリプトで使用するようになっています。
PowershellとTSQLはどちらもエントリーレベルです。ここで
はコマンド式は以下のショーン・メルトンの回答に基づいて、これを完了するために使用されます。このコマンドは、WinSCPのコマンドの後に使用されている
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
ディレクトリ。
あなたの会社がリストアを管理するdbaを考慮していない理由をもっと興味がある。あなたのシステムは単純な回復をしていますか?完全バックアップおよび/または差分バックアップを使用する場合は、前回の完全バックアップの時点から順次バックアップの順序を考慮する必要があります。 –
single_userは何をしていますか?ドキュメントは新鮮な顔の変化を得ており、はるかに簡単に学ぶことができます。誰かがあなたにスクリプトをくれたとしても、あなたはこの変更を担当します。したがって、dba –
に問い合わせてください。TSQLスクリプトでシェル環境変数を使用できるようです。 https://docs.microsoft.com/en-us/sql/relational-databases/scripting/sqlcmd-use-with-scripting-variablesのCセクションを参照してください。 – lit