preface
Because the Express version is used and there is no SqlServer job function, all have the following idea of backing up the database.
Deletes the backup database files before the specified number of days
The following contents are saved as DeleteDB.vbs
be careful:
(1)sFolder, the folder where the backup bak files are saved
(2)iSaveFileDay is the database bak file that was deleted several days ago
(3)C:\SQLScript\Log.txt is the log file of the operation execution process. The file needs to be created in advance. The following script will not create the file
Dim objFSO, folder, files, sFolder, sFolderTarget ,iSaveFileDay Set objFSO = CreateObject("Scripting.FileSystemObject") sFolder = "C:\SQLBack\" iSaveFileDay=2 Set folder = objFSO.GetFolder(sFolder) Set files = folder.Files Const ForAppending = 8 Set objFile = objFSO.OpenTextFile("C:\SQLScript\Log.txt", ForAppending) objFile.Write "================================================================" &VBCRLF objFile.Write "Database backup file scheduled purge Report" &VBCRLF objFile.Write "Time: " &FormatDateTime(Now(),1) &"" &FormatDateTime(Now(),3) &VBCRLF objFile.Write "================================================================" &VBCRLF For Each itemFiles In files a=sFolder &itemFiles.Name b = objFSO.GetExtensionName(a) If uCase(b)="BAK" Then If DateDiff("d",itemFiles.DateCreated,Now()) >= iSaveFileDay Then objFSO.DeleteFile a objFile.WriteLine "Backup file deleted: " &a End If End If Next objFile.WriteLine "================================================================" &VBCRLF objFile.Close Set objFile = Nothing Set objFSO = Nothing Set folder = Nothing Set files = Nothing
Delete the log data of how many days before the specified table name in all databases
The following contents are saved as DeleteRequestRecord.sql
In the sql statement, you need to fill in the table name and field name. The following statement execution example: delete from requestrecord where starttime < '2021-11-03 00:00:00'
DECLARE @IDENT INT=0--database Id,Initialize 0 DECLARE @Sql VARCHAR(MAX)=''--To be executed sql sentence DECLARE @SqlDeleteLog VARCHAR(MAX)=''--Delete statement DECLARE @DBNAME VARCHAR(200)=''--Database name DECLARE @LogTableName VARCHAR(2000)='RequestRecord'--Table name of the log table DECLARE @LogTimeName VARCHAR(2000)='StartTime'--Date field of the deleted record in the log table DECLARE @NowTime DATETIME=GETDATE();--current time DECLARE @DeleteTime DATETIME=DATEADD(DAY,-10,@NowTime);--The date to delete, that is, the current time minus 10 days DECLARE @DeleteTimeStr VARCHAR(100)=CONVERT(varchar(100),@DeleteTime,23)+' 00:00:00';--format: yyyy-MM-dd 00:00:00 --Create temporary table CREATE TABLE #Table_LogTableName ( TableName VARCHAR(2000) ) CREATE TABLE #t_exclude ( name varchar(200) ) INSERT INTO #t_exclude SELECT 'master' UNION SELECT 'model' UNION SELECT 'msdb' UNION SELECT 'tempdb' SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE NAME NOT IN (SELECT [name] FROM #t_exclude) WHILE (@IDENT>0) BEGIN --The name of the current database SELECT @DBNAME = NAME FROM SYS.DATABASES WHERE database_id = @IDENT PRINT('=================================== '+@DBNAME+' ===================================== Start execution'); --Empty the temporary table first DELETE FROM #Table_LogTableName; --Insert the log table of the current database into the temporary table SET @Sql='INSERT INTO #Table_LogTableName SELECT [name] from '+@DBNAME+'..SysObjects WHERE XType=''U'' AND [name]='''+@LogTableName+''' '; PRINT(@SQL); EXEC(@SQL); --Whether there is a log table in the temporary table and do different operations IF(EXISTS(SELECT * FROM #Table_LogTableName WHERE TableName=@LogTableName)) BEGIN PRINT 'existence'; SET @SqlDeleteLog=' DELETE FROM '+@DBNAME+'.dbo.'+@LogTableName+' WHERE '+@LogTimeName+'<'''+@DeleteTimeStr+''' '; PRINT(@SqlDeleteLog); EXEC(@SqlDeleteLog); END ELSE BEGIN PRINT 'non-existent'; END PRINT('=================================== '+@DBNAME+' ===================================== end of execution'); PRINT(''); PRINT(''); PRINT(''); PRINT(''); SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE NAME NOT IN (SELECT [name] FROM #t_exclude) AND database_id>@IDENT END DROP TABLE #Table_LogTableName; DROP TABLE #t_exclude;
Back up all databases
Save the following as BackupDB.sql
Back up all databases to the C: \ sqlpack folder
declare @dateString varchar(10) select @dateString=CONVERT(varchar(100),GETDATE(),112) declare @IDENT int declare @sql varchar(1000) declare @DBNAME varchar(200) create table #t_exclude ( name varchar(200) ) insert into #t_exclude select 'master' union select 'model' union select 'msdb' union select 'tempdb' select @IDENT=MIN(database_id) from sys.databases where database_id>0 and [name] not in (select [name] from #t_exclude) while(@IDENT>0) begin select @DBNAME=[name] from sys.databases where database_id=@IDENT set @sql='BACKUP DATABASE '+@DBNAME+' TO DISK = ''C:\SQLBack\'+@DBNAME+'_db_' + @dateString +'.BAK'' WITH INIT' --print (@sql); exec (@sql); select @IDENT=MIN(database_id) from sys.databases where database_id>0 and [name] not in (select [name] from #t_exclude) and database_id>@IDENT end drop table #t_exclude
Write operation to cmd
Save the following as BackupDB.sql
cd C:\Program Files\Microsoft SQL Server\150\Tools\Binn\ sqlcmd -S iShej8ol9r0jqwE\SQLEXPRESS2019 -E -i"C:\SQLScript\DeleteRequestRecord.sql" sqlcmd -S iShej8ol9r0jqwE\SQLEXPRESS2019 -E -i"C:\SQLScript\BackupDB.sql" C:\SQLScript\DeleteDB.vbs
Add windows scheduled task
1. Run taskschd.msc to open the task scheduler
2. Select = > create task
3. General
(1) Enter a name
(2) Security option, select "run regardless of whether the user logs in". Note: if this option is not checked, this task will not be executed without logging in to the server.
After selection, there will be a prompt box for you to enter the login password of the current computer at the time of last saving
4. Trigger, select: daily, start at: 03:15
5. Operation, startup program: C:\SQLScript\Schedule.cmd
This is the path where the cmd file is saved, subject to the actual situation
6. Click OK and you will be prompted to enter the login password of the current login user.
Note 1: you cannot save without entering a password
Note 2: after the login password of the login user is modified later, the planning task cannot be executed