sql >> データベース >  >> Database Tools >> SSMS

SQL Server 2012で複数のデータベースを復元するための最良のスクリプト?

    コレットの台本といくつかの適応が私のために働いた。

    まず、次のSQLコマンドを実行してxp_cmdshellを有効にします。

    -- To allow advanced options to be changed.  
    EXEC sp_configure 'show advanced options', 1;  
    GO  
    -- To update the currently configured value for advanced options.  
    RECONFIGURE;  
    GO  
    -- To enable the feature.  
    EXEC sp_configure 'xp_cmdshell', 1;  
    GO  
    -- To update the currently configured value for this feature.  
    RECONFIGURE;  
    GO 
    

    次に、以下のスクリプトを更新して、バックアップファイルからデータベースを復元します。 C:\Backup\を置き換えます .BAKファイルを含むローカルディレクトリに置き換え、C:\Microsoft SQL Server\SQLINSTANCE\MSSQL\DATA\を置き換えます SQLServerデータディレクトリを使用します。このスクリプトは、.BAKファイル名がデータベース名と一致することも前提としています。一致しない場合、スクリプトは論理ファイル名が一致しないというエラーをスローする可能性があります。

    DECLARE @FilesCmdshell TABLE (
        outputCmd NVARCHAR (255)
    )   
    DECLARE @FilesCmdshellCursor CURSOR 
    DECLARE @FilesCmdshellOutputCmd AS NVARCHAR(255)
    
    INSERT INTO @FilesCmdshell (outputCmd) EXEC master.sys.xp_cmdshell 'dir /B  C:\Backup\*.bak'    
    SET @FilesCmdshellCursor = CURSOR FOR SELECT outputCmd FROM @FilesCmdshell
    
    OPEN @FilesCmdshellCursor
    FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
    WHILE @@FETCH_STATUS = 0
    BEGIN   
        DECLARE @sqlRestore NVARCHAR(MAX) = 'RESTORE DATABASE [' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '] FROM  DISK = N''C:\Backup\' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '.bak'' WITH  FILE = 1,  MOVE N''' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + ''' TO N''C:\Microsoft SQL Server\SQLINSTANCE\MSSQL\DATA\' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '.mdf'',  MOVE N''' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '_log'' TO N''C:\Microsoft SQL Server\SQLINSTANCE\MSSQL\DATA\' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '_log.ldf'', NOUNLOAD,  STATS = 10'
        EXEC(@sqlRestore)
    
        FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
    END
    


    1. SQLクエリ:3つの数値の最大2を見つけて、別の列に格納します

    2. エラーMySQLは言った:ドキュメントは接続できません:無効な設定。 [Ubuntu]

    3. PHPログインの問題

    4. 認識されないステートメントタイプ。 (位置0のWITHの近く)