2016-06-30 10 views
1

データベースをコピーして名前を変更するSQLスクリプトを作成しようとしています。私は独立した機能として2つの部分に分割しているので、リストアは私に苦労しています。たとえば、これは私が今持っているものとほぼ同じです。プログラムでSQL Serverデータベースを複製します

BACKUP DATABASE [@dbName] 
TO DISK = 'path' WITH COPY_ONLY; 

RESTORE DATABASE [@newDbName] 
FROM DISK = 'path'; 

これを自動的にコピーするにはどうすればよいですか?だから、コメントと回答は、ここで私を得るために有用であった

+1

読むの共同設立者だ(https://msdn.microsoft [関連MSDNのページでは、この例で。] .com/en-us/library/ms186858.aspx#copying_db_using_bnr)また、[このリンクも参照してください。](https://msdn.microsoft.com/en-us/library/ms189109.aspx#TsqlProcedure ) –

+0

@ZoharPeledええ、それ以前に見つかったのですが、 '_Data'と' _log'セクションの名前を必ずしも持っているとは限りません。これらをbakファイルから取得する方法はありますか? – Hovestar

+0

私が知っているわけではありません。 –

答えて

0

が、これは私がに落ち着いものです:

BACKUP DATABASE [OldDBName] TO DISK = 'path' WITH COPY_ONLY; 
if (objectProperty(object_id('tmp_restore'), 'IsProcedure') is not null) 
    drop procedure dbo.tmp_restore 
GO 
CREATE PROCEDURE dbo.tmp_restore 
    @backup_path NVARCHAR(MAX) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    RESTORE FILELISTONLY FROM DISK = @backup_path; 
END 
GO 
CREATE TABLE #TEMP(
    LogicalName VARCHAR(64),   PhysicalName VARCHAR(130), 
    [Type] VARCHAR(1),     FileGroupName VARCHAR(64), 
    Size DECIMAL(20, 0),    MaxSize DECIMAL(25,0), 
    FileID bigint,      CreateLSN DECIMAL(25,0), 
    DropLSN DECIMAL(25,0),    UniqueID UNIQUEIDENTIFIER, 
    ReadOnlyLSN DECIMAL(25,0),   ReadWriteLSN DECIMAL(25,0), 
    BackupSizeInBytes DECIMAL(25,0), SourceBlockSize INT, 
    filegroupid INT,     loggroupguid UNIQUEIDENTIFIER, 
    differentialbaseLSN DECIMAL(25,0), differentialbaseGUID UNIQUEIDENTIFIER, 
    isreadonly BIT,  ispresent BIT, TDEThumbpr DECIMAL) 

Insert into #TEMP exec dbo.resware_tmp_restore @backup_path = 'path'; 
GO 
DECLARE @NameData VARCHAR(64) 
DECLARE @NameLog VARCHAR(64) 
Set @NameData = (Select LogicalName from #TEMP t where t.Type like 'D') 
Set @NameLog = (Select LogicalName from #TEMP t where t.Type like 'L') 
RESTORE DATABASE [newDBName] FROM DISK = 'path' 
    WITH RECOVERY, 
    MOVE @NameData TO 'path_Data.mdf', 
    MOVE @NameLog TO 'path_Log.ldf' 
GO 
DROP TABLE #TEMP 

明らかに古い/ NewDBNameとパスが適切な値で充填する必要があり、しかし、これはうまくいくはずです。

+0

あなたが問題を解決したことを嬉しく思う。問題が解決されたことを他の人が知るように、あなた自身の答えを受け入れてください。 –

1
RESTORE FILELISTONLY 
FROM 'path' 
+0

元の名前と衝突しないように名前を割り当てる方法はありますか? – Hovestar

0

SQL Serverデータベースを複製するもう1つの方法は、SQL Serverコンテナを使用することです。

Windockは、SQL Server 2008以降のすべてのエディションのコンテナをサポートしています。イメージにmdf、ndf、ldfファイルをコピーし、それを使用して同じで隔離されたインスタンスを配信できます。

Windocksはまた、大規模なデータベース環境のサポートと同様に、完全なデータベースクローニングの統合サポートをリリースしました。

無料のコミュニティ版はWindocks

開示で提供されています:私はWinDocks

関連する問題