16

自動化されたバックアップと復元の T-SQL スクリプトを作成しようとしています。バックアップの部分はやりましたが、復元に苦労しています。

SS Management Studioで次のステートメントを実行すると;

EXEC('RESTORE FILELISTONLY FROM DISK = ''C:\backup.bak''')

グリッドで結果セットを取得し、使用することもできます

INSERT INTO <temp_table> 
EXEC('RESTORE FILELISTONLY FROM DISK = ''C:\backup.bak''')

一時テーブルにデータを入力します。ただし、その結果セットから選択しようとすると、構文エラーが発生します。例えば

SELECT * FROM  
EXEC('RESTORE FILELISTONLY FROM DISK = ''C:\backup.bak''')

結果セットのメタデータは、SQL Server ディクショナリのどこかに保存する必要があります。自動復元を機能させるための他の応急処置の公式を見つけましたが、結果セットに到達できる場合は、より洗練されたソリューションを作成します。また、2008 年と 2005 年の結果セットが異なることに注意してください。

前もって感謝します...

4

3 に答える 3

46

Dead-end :SELECT INTOテーブルの列を定義する必要がないので便利ですが、サポートしていませんEXEC

解決策:INSERT INTOをサポートしてEXECいますが、テーブルを定義する必要があります。MSDN が提供する SQL 2008 定義を使用して、次のスクリプトを作成しました。

DECLARE @fileListTable TABLE (
    [LogicalName]           NVARCHAR(128),
    [PhysicalName]          NVARCHAR(260),
    [Type]                  CHAR(1),
    [FileGroupName]         NVARCHAR(128),
    [Size]                  NUMERIC(20,0),
    [MaxSize]               NUMERIC(20,0),
    [FileID]                BIGINT,
    [CreateLSN]             NUMERIC(25,0),
    [DropLSN]               NUMERIC(25,0),
    [UniqueID]              UNIQUEIDENTIFIER,
    [ReadOnlyLSN]           NUMERIC(25,0),
    [ReadWriteLSN]          NUMERIC(25,0),
    [BackupSizeInBytes]     BIGINT,
    [SourceBlockSize]       INT,
    [FileGroupID]           INT,
    [LogGroupGUID]          UNIQUEIDENTIFIER,
    [DifferentialBaseLSN]   NUMERIC(25,0),
    [DifferentialBaseGUID]  UNIQUEIDENTIFIER,
    [IsReadOnly]            BIT,
    [IsPresent]             BIT,
    [TDEThumbprint]         VARBINARY(32), -- remove this column if using SQL 2005
    [SnapshotURL]           NVARCHAR(360) -- remove this column if using less than SQL 2016 (13.x)
)
INSERT INTO @fileListTable EXEC('RESTORE FILELISTONLY FROM DISK = ''YourBackupFile.bak''')
SELECT * FROM @fileListTable
于 2010-10-25T20:55:34.380 に答える
9

EXECから選択することはできません。テーブル (またはテーブル変数) には、EXEC の結果セットのみを INSERT できます。

復元の自動化に関しては、完全に自動化された SQL Server の復元に関する回答で、ソリューションを構築するために必要なすべてのものが既に提供されています。不明なファイル リストを含むデータベースの自動復元を試みるかどうかは、別のトピックです。

于 2010-03-24T23:53:56.893 に答える