Príkaz DBCC CloneDatabase je k dispozícii iba od SQL Server 2014 SP2; nie je k dispozícii v predchádzajúcich verziách. Ak to však chcete použiť vo verziách starších ako 2014, môžete použiť tento skript.
S 2014 SP2
Kedykoľvek dôjde k problémom s výkonom, potrebujete kópiu produkčnej databázy. Nie je však potrebné, aby kópia, ktorú vytvoríte, mala byť s údajmi, aby sa zistil problém s výkonom. Microsoft teda predstavil DBCC CLONEDATABASE v balíku Service Pack 2 pre SQL SERVER 2014. Tento príkaz DBCC pomôže používateľom vytvárať kópie produkčnej databázy iba so schémou a štatistikami. Upozorňujeme, že tento príkaz bude fungovať iba s používateľskými databázami a nemožno ho použiť so systémovými databázami.
Pred rokom 2014 SP2
Spustite nasledujúci skript na vašom počítači SQL server ktorá je staršia ako SQL 2014 SP2. Tento skript vytvorí postup dbcc_clonedatabase. Tento postup potom môžete vykonať zadaním názvu zdrojovej databázy a nového názvu databázy ako parametrov.
CREATE PROCEDURE dbcc_clonedatabase @olddbname VARCHAR(200) ,@newdbname VARCHAR(200) AS DECLARE @dd NVARCHAR(512) EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE' ,N'Software\Microsoft\MSSQLServer\MSSQLServer' ,N'DefaultData' ,@dd OUTPUT DECLARE @dl NVARCHAR(512) EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE' ,N'Software\Microsoft\MSSQLServer\MSSQLServer' ,N'DefaultLog' ,@dl OUTPUT DECLARE @db NVARCHAR(512) EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE' ,N'Software\Microsoft\MSSQLServer\MSSQLServer' ,N'BackupDirectory' ,@db OUTPUT DECLARE @md NVARCHAR(512) EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE' ,N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters' ,N'SqlArg0' ,@md OUTPUT SELECT @md = substring(@md, 3, 255) SELECT @md = substring(@md, 1, len(@md) - charindex('\', reverse(@md))) DECLARE @ml NVARCHAR(512) EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE' ,N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters' ,N'SqlArg2' ,@ml OUTPUT SELECT @ml = substring(@ml, 3, 255) SELECT @ml = substring(@ml, 1, len(@ml) - charindex('\', reverse(@ml))) DECLARE @a VARCHAR(1000) ,@b VARCHAR(1000) ,@c VARCHAR(1000) SET @a = isnull(@dd, @md) SET @b = isnull(@dl, @ml) SET @c = isnull(@db, @ml) DECLARE @name VARCHAR(50) SET @name = @olddbname DECLARE @fileName VARCHAR(1000) SET @fileName = @c + '\' + @name + '.BAK' --select @fileName BACKUP DATABASE @name TO DISK = @fileName DECLARE @tfilelist TABLE ( cLogicalName NVARCHAR(128) ,cPhysicalName NVARCHAR(260) ,cType CHAR(1) ,cFilegroupName VARCHAR(10) ,csize INT ,cMaxSize BIGINT ,cfield INT ,ccreatelsn BIT ,cdroplsn BIT ,cuniqueid UNIQUEIDENTIFIER ,creadonlylsn BIT ,creadwritelsn BIT ,cbackupsizeinbytes BIGINT ,csourceblocksize INT ,cfilegroupid INT ,cloggroupguid UNIQUEIDENTIFIER ,cdifferentialbaselsn BIT ,cdifferentialbaseguid UNIQUEIDENTIFIER ,cisreadonly BIT ,cispresent BIT ,ctdethumbprint VARCHAR(5) ); DECLARE @bs NVARCHAR(1000) SET @bs = 'restore filelistonly from disk=''' + @fileName + '''' SELECT @bs INSERT INTO @tfilelist EXEC sp_executesql @bs DECLARE @sql NVARCHAR(1000) SELECT * FROM @tfilelist DECLARE @name2 VARCHAR(1000) ,@m VARCHAR(300) ,@mp VARCHAR(1000) ,@l VARCHAR(1000) ,@lp VARCHAR(1000) SET @m = ( SELECT clogicalname FROM @tfilelist WHERE ctype = 'D' ) SET @mp = ( SELECT cPhysicalName FROM @tfilelist WHERE ctype = 'D' ) SET @l = ( SELECT clogicalname FROM @tfilelist WHERE ctype = 'L' ) SET @lp = ( SELECT cPhysicalName FROM @tfilelist WHERE ctype = 'L' ) SET @name2 = @newdbname SET @sql = 'RESTORE database [' + @name2 + '] from disk =''' + @fileName + ''' with '; SELECT @sql = @sql + ' move ''' + @m + ''' to ''' + replace(@mp, @name, @name2) + ''',' SELECT @sql = @sql + ' move ''' + @l + ''' to ''' + replace(@lp, @name, @name2) + ''', stats = 1' SELECT @sql EXEC sp_executesql @sql; SET @sql = 'Use [' + @name2 + ']' SELECT @sql EXEC sp_executesql @sql; EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?' EXEC sp_MSForEachTable „ZMENIŤ TABUĽKU? NOCHECK CONSTRAINT ALL 'EXEC sp_MSForEachTable' DELETE FROM? ' EXEC sp_MSForEachTable „ZMENIŤ TABUĽKU? SKONTROLUJTE VŠETKO „ZABRÁNIŤ“ EXEC sp_MSForEachTable „ZAPNÚŤ VŠETKO SPUŠŤ?“
Ak zistíte, že zdrojová databáza je poškodená, keď sa chystáte používať databázu dbcc clonedatabase, môžete použiť Nástroje na obnovu SQL ako DataNumen SQL Recovery opraviť.
Úvod autora:
Neil Varley je odborníkom na obnovu dát v odbore DataNumen, Inc., ktorá je svetovým lídrom v oblasti technológií obnovy dát, vrátane opraviť chybu e-mailu programu Outlook a vynikajúce softvérové produkty na obnovenie. Pre viac informácií navštívte www.datanumen. S
Nechaj odpoveď