DBCC CloneDatabase-kommandoen er kun tilgjengelig fra SQL Server 2014 SP2; den er ikke tilgjengelig i tidligere versjoner. Men hvis du ønsker å bruke dette på versjoner eldre enn 2014, kan du bruke dette skriptet.
Med 2014 SP2
Når det er et ytelsesproblem, trenger du en kopi av produksjonsdatabasen. Det er imidlertid ikke nødvendig at kopien du oppretter skal være med data for å undersøke ytelsesproblemet. Så Microsoft introduserte DBCC CLONEDATABASE i oppdateringspakken 2 for SQL SERVER 2014. Denne DBCC-kommandoen vil hjelpe brukere med å lage kopier av produksjonsdatabasen med kun skjema og statistikk. Vær oppmerksom på at denne kommandoen bare vil fungere med brukerdatabaser og ikke kan brukes med systemdatabaser.
Før 2014 SP2
Kjør skriptet nedenfor på din SQL server som er eldre enn SQL 2014 SP2. Dette skriptet vil lage en prosedyre dbcc_clonedatabase. Du kan deretter utføre denne prosedyren ved å sende kildedatabasenavnet og det nye databasenavnet som parametere.
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 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'DELETE FROM ?' EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' EXEC sp_MSForEachTable 'AKTIVERE TRIGGER ALL ON ?'
Vær oppmerksom på at hvis du finner ut at kildedatabasen er ødelagt når du skal bruke dbcc klonedatabase, så kan du bruke SQL-gjenopprettingsverktøy slik som DataNumen SQL Recovery å fikse det.
Forfatterintroduksjon:
Neil Varley er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparer Outlook e-postfeil og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med
Legg igjen en kommentar