Heim >Datenbank >MySQL-Tutorial >Eine Lösung für die Remote-Vollsicherung von Datenbanken
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)!