Heim  >  Artikel  >  Datenbank  >  Eine Lösung für die Remote-Vollsicherung von Datenbanken

Eine Lösung für die Remote-Vollsicherung von Datenbanken

黄舟
黄舟Original
2016-12-15 16:01:331106Durchsuche

Eine Lösung für die Remote-Volldatenbanksicherung

--exec BackUPDatabase_MaJiatao 'pubs','\XZ154ABC$','16:50:00.000',1,'XZ154MaJiatao','MaJiatao'/ ** *************************************************beschreiben : Vollständige Datenbanksicherung und inkrementelle Sicherung. Geschrieben von: Ma Jiatao. Geändert von Ma Jiatao: 12.02.2014: 1. Der Sicherungspfad wurde hinzugefügt, um lokale und Remote-Pfade auszuwählen. 2. Die Methode zum Speichern historischer Sicherungsdatensätze wurde geändert, sodass die nicht mehr erforderlich ist lokale Festplatte Textdatei auf der Datei, die als Speichermedium verwendet werden soll*********************************** ******* ***********/if object_id('BackUPDatabase_MaJiatao') is not nulldrop PRoc BackUPDatabase_MaJiatao

GO

alter proc BackUPDatabase_MaJiatao@database_name sysname,--Der Name der zu sichernden Datenbank@physical_backup_device_name sysname, --Backup-Dateispeicherverzeichnis @all_backup_datetime char(17)='20:00:00.000', --Vollständige Sicherungszeit @IntDistance int=1, --Vollständige Sicherungszeitspanne (Stunden) @UserName varchar(100), --Remote-Server-Anmeldename@PassWord varchar(100)=''--Remote-Server-Anmeldepasswort mit VERSCHLÜSSELUNG als

/*********************************declare @database_name sysname, – der Name der zu sichernden Datenbank @physical_backup_device_name sysname ,--backup Dateispeicherverzeichnis @all_backup_datetime char(17)select @database_name='test',@physical_backup_device_name='E: Backup file query server',@all_backup_datetime='16:00:00.000'

* **** ********************************/

--Erstellen Sie den Sicherungsverlauf, wenn existiert nicht (wählen Sie * aus dbo.sysobjects aus, wobei id = object_id(N'backup_recorder') und OBJECTPROPERTY(id, N'IsUserTable') = 1) exec('CREATE TABLE backup_recorder (backup_datetime datetime not null,backup_name varchar (500) PRIMARY KEY,backup_path varchar (500) NOT NULL ,is_all_backup char(1) not null default 0,file_is_exists char(1) not null default 0)')elsebeginif not exist(select * from syscolumns where name='file_is_exists' and ID= object_id (N'backup_recorder'))begindrop table backup_recorderexec('CREATE TABLE backup_recorder (backup_datetime datetime not null,backup_name varchar (500) PRIMARY KEY,backup_path varchar (500) NOT NULL ,is_all_backup char(1) not null default 0,file_is_exists char ( 1) nicht null Standard 0)')endend

declare @backup_set_full sysname,@backup_set sysname,--backup file name @backup_name sysname

declare @Return_Int intdeclare @CommandText nvarchar(4000) declare @DelFilePathName nvarchar(4000)

declare @physical_backup_device_name_now nvarchar(4000)

declare @physical_backup_device_namebackup nvarchar(4000)

if isnull(@database_name,'')=' ' oder rtrim(@database_name)='' – Der Datenbankname ist leer set @database_name=db_name() – Sichern Sie die aktuelle Datenbank

wenn isnull(@physical_backup_device_name,'')='' oder rtrim (@physical_backup_device_name)='' – Das Sicherungsverzeichnis ist leer. Verwenden Sie das Standardverzeichnis des Systems beginSELECT @physical_backup_device_name=ltrim(rtrim(reverse(filename))) FROM master.dbo.sysdatabases where name=@database_nameset @physical_backup_device_name=reverse( substring(@physical_backup_device_name ,charindex('',@physical_backup_device_name)+5,260))+'backup'end

--Bestimmen Sie, ob der Pfad ein Netzwerkpfad oder ein lokaler Pfad ist, wenn er übrig bleibt(@physical_backup_device_name,2) ='\' and ltrim( rtrim(@UserName))<>'' and ltrim(rtrim(@Password))<>''beginselect @CommandText='net use '+@physical_backup_device_name+' "'+@ Passwort+'" /user:' +@UserNameexec master..xp_cmdshell @CommandText,no_outputend

--Bestimmen Sie, ob das Verzeichnis vorhanden ist. Wählen Sie @CommandText='dir '+@physical_backup_device_name+'Full backup'exec @Return_Int=master ..xp_cmdshell @CommandText, no_outputif @ Return_Int<>0 – Das Verzeichnis existiert nicht, erstellen Sie beginselect @CommandText='Mkdir '+@physical_backup_device_name+'Full backup'exec @Return_Int=master..xp_cmdshell @CommandText, no_outputend

select @CommandText='dir '+@physical_backup_device_name+'Differential backup'exec @Return_Int=master..xp_cmdshell @CommandText, no_outputif @Return_Int<>0 --Das Verzeichnis existiert nicht, erstellen Sie beginselect @CommandText=' Mkdir '+@physical_backup_device_name+'Differential backup'exec @Return_Int =master..xp_cmdshell @CommandText, no_outputend

select @physical_backup_device_name_now=@database_name+'_'+ltrim(rtrim(REPLACE(REPLACE(REPLACE(REPLACE(convert (char(23),getdate(),21) ,'-',''),':',''),'.',''),' ','')))+'.bak'

if object_id('tempdb. .#backup_recorder') is not nulldrop table #backup_recorderCREATE TABLE #backup_recorder (backup_datetime datetime not null,backup_name varchar (500) PRIMARY KEY,backup_path varchar (500) NOT NULL ,is_all_backup char (1) nicht null Standard 0,file_is_exists char(1 ) nicht null Standard 0)

--Überprüfen Sie, ob eine vollständige Sicherung vorhanden ist. Wählen Sie @CommandText='dir '+@physical_backup_device_name+'Full backup*.bak'exec @Return_Int=master..xp_cmdshell @CommandText, no_output

if @Return_Int< >0 --Keine vollständige Sicherungsdatei vorhanden, vollständige Sicherung durchführen beginselect @backup_set_full='Vollständige Sicherung'+@database_nameselect @physical_backup_device_namebackup=@physical_backup_device_name+'Vollständige Sicherung'+@physical_backup_device_name_now

--Vollständige Sicherung, Medien neu schreiben Header BACKUP DATABASE @database_name to DISK=@physical_backup_device_namebackup WITH FORMAT ,NAME = @backup_set_fullif @@error=0 – Sicherung erfolgreich, alle historischen Sicherungsdateien löschen, bevor die vollständige Sicherung des Tages beginnt – Sicherungsprotokoll einfügen in backup_recorder(backup_datetime) schreiben , backup_name,backup_path,is_all_backup,file_is_exists)values(getdate(),@physical_backup_device_name_now,@physical_backup_device_namebackup,'1','1')insert into #backup_recorder(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)select. backup_datetime,backup_name,backup _Pfad , is_all_backup,file_is_existsfrom backup_recorderwhere backup_name<>@physical_backup_device_name_now and is_all_backup='1' and file_is_exists='1'endendelsebegin--Es gibt eine vollständige Sicherung. Überprüfen Sie, ob die vollständige Sicherung nach der angegebenen Zeit des Vortages erfolgt. Wählen Sie @ all_backup_datetime=REPLACE(REPLACE( @all_backup_datetime,':',''),'.','')if right(left(right(@physical_backup_device_name_now,21),17),9) between REPLACE(REPLACE(@all_backup_datetime, ':','' ),'.','') und REPLACE(REPLACE(substring(convert(char(23),dateadd(hh,@IntDistance,@all_backup_datetime),21),12,12),': ',''), '.','')--Vollständige Sicherung durchführen beginselect @backup_set_full='Vollständige Sicherung'+@database_nameselect @physical_backup_device_namebackup=@physical_backup_device_name+'Vollständige Sicherung'+@physical_backup_device_name_now--Vollständige Sicherung, Medienheader neu schreiben BACKUP DATABASE @database_name to DISK =@physical_backup_device_namebackup WITH FORMAT ,NAME = @backup_set_fullif @@error=0 – Backup erfolgreich begonnen – Backup-Protokoll einfügen in backup_recorder schreiben (backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)values(getdate() ,@physical_backup_device_name_now,@physical_backup_device_namebackup ,'1','1') – Finden Sie historische Sicherungsdateien, die in #backup_recorder eingefügt werden (backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)select backup_datetime,backup_name,backup_path,is_all_backup,file_is_existsfrom backup_recorderwhere Sicherungsname<> ;@physical_backup_device_name_now und is_all_backup= '1' und file_is_exists='1'endendelse--Die aktuelle Sicherungszeit ist kürzer als die angegebene vollständige Sicherungszeit. Führen Sie eine differenzielle Sicherung durch. Beginnen Sie

wählen Sie @backup_set_full='Inkrementelle Sicherung'+ @database_nameselect @physical_backup_device_namebackup=@physical_backup_device_name+' Differenzielle Sicherung'+@physical_backup_device_name_now – Differenzielle Sicherung, Medium anhängen -Schreiben Sie das Backup-Protokoll in den Backup-Recorder (Backup_Datum/Zeit,Backup-Name,Backup-Pfad,is_all_Backup,Datei_existiert)values(getdate(),@physical_backup_device_name_now,@physical_backup_device_namebackup,'0','1') - Finden Sie historische Backup-Dateien, die in #backup_recorder(Backup-Datum/Uhrzeit) eingefügt werden ,backup_name,backup_path,is_all_backup,file_is_exists )select backup_datetime,backup_name,backup_path,is_all_backup,file_is_existsfrom backup_recorderwhere backup_name<>@physical_backup_device_name_now and is_all_backup='0' and. file_is_exists='1'endend

DE CLARE DelFilePathName CURSOR FORWARD_ONLY FOR Wählen Sie den Backup-Pfad aus # Backup-Recorder. Öffnen Sie DelFilePathName. FETCH NEXT FROM DelFilePathName in @DelFilePathName süß @Return_Int= Master.. #backup_recorder' ) ist keine Nulldrop-Tabelle #backup_recorder

if left(@physical_backup_device_name,2)='\' and ltrim(rtrim(@UserName))<>'' and ltrim(rtrim(@Password))< ;>''beginselect @CommandText= 'net share '+@physical_backup_device_name+' /delete'exec master..xp_cmdshell @CommandText,no_outputend

Das Obige ist eine Lösung für die Remote-Volldatenbanksicherung. Weitere verwandte Artikel Bitte achten Sie auf die chinesische PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn