首页 > 数据库 >BackUpLogView 系列 - 数据库备份脚本

BackUpLogView 系列 - 数据库备份脚本

时间:2023-07-02 21:22:48浏览次数:45  
标签:BackUpLogView cmdshell -- 备份 DECLARE SQL xp 数据库

一键备份 MS server 主机中所有数据库

USE master;
GO
CREATE OR ALTER PROCEDURE dbo.BackupAllDatabases
@BackupDirectory NVARCHAR(255)
AS
BEGIN
-- 获取当前日期和时间
DECLARE @CurrentDate VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112);
DECLARE @CurrentDateTime VARCHAR(14) = REPLACE(CONVERT(VARCHAR(14), GETDATE(), 120), ':', '');

-- 创建临时表来存储备份文件的详细信息
CREATE TABLE #BackupFiles
(
DatabaseName NVARCHAR(128),
BackupFilePath NVARCHAR(255)
);

-- 查询所有用户数据库
INSERT INTO #BackupFiles
SELECT name, @BackupDirectory + '\' + name + '_' + @CurrentDateTime + '.bak'
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
AND state = 0; -- 只备份处于在线状态的数据库

-- 执行备份
DECLARE @DatabaseName NVARCHAR(128);
DECLARE @BackupFilePath NVARCHAR(255);
DECLARE @SQL NVARCHAR(MAX);

DECLARE db_cursor CURSOR FOR
SELECT DatabaseName, BackupFilePath
FROM #BackupFiles;

OPEN db_cursor;

FETCH NEXT FROM db_cursor INTO @DatabaseName, @BackupFilePath;

WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'BACKUP DATABASE ' + QUOTENAME(@DatabaseName) + ' TO DISK = N''' + @BackupFilePath + '''';

EXEC sp_executesql @SQL;

FETCH NEXT FROM db_cursor INTO @DatabaseName, @BackupFilePath;
END;

CLOSE db_cursor;
DEALLOCATE db_cursor;

-- 删除超过30天的备份文件
DECLARE @DateThreshold VARCHAR(8) = CONVERT(VARCHAR(8), DATEADD(DAY, -30, GETDATE()), 112);
DECLARE @DeleteSQL NVARCHAR(MAX) = 'EXEC xp_cmdshell ''DEL "' + @BackupDirectory + '\*.bak" /F /Q /S''';

SET @DeleteSQL = REPLACE(@DeleteSQL, '*', @DateThreshold);

EXEC sp_executesql @DeleteSQL;

-- 删除临时表
DROP TABLE #BackupFiles;
END;


-- EXEC dbo.BackupAllDatabases 'C:\BackupDirectory';


以下备注:

【错误描述】:

SQL Server阻止了对组件‘xp_cmdshell’的过程‘sys.xp_cmdshell’的访问。因为此组件已作为此服务嚣安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用‘xp_cmdshell’。有关启用‘xp_cmdshell’的详细信息,请参阅sQL帮助文件。

【原因分析】:
xp_cmdshell可以让系统管理员以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出,是一个功能非常强大的扩展存贮过程。一般情况下,xp_cmdshell对管理员来说也是不必要的,xp_cmdshell的消除不会对Server造成任何影响。
【解决办法】:
通过查询分析器,选择Master数据库,然后执行以下SQL内容:
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go

 

Oracle 七天一个全量每天一个增量备份

$backupFolder = '/path/to/backup/'
$oneWeekAgo = (Get-Date).AddDays(-7)

# 获取一周前的日期
$oneWeekAgoDate = Get-Date $oneWeekAgo -Format 'yyyy-MM-dd'

# 执行 RMAN 备份命令
$RMANScript = @"
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
SQL 'CREATE TABLESPACE RMAN_TEMP';
SQL 'ALTER SESSION SET "_oracle_script"=true';
SQL 'SELECT name INTO :DBNAME FROM v$database';

# 每周一次的一周增量备份
IF TRUNC(SYSDATE, 'IW') = TRUNC(SYSDATE) THEN
BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '$backupFolder/:DBNAME_%d-%m-%Y_%H.bak';
END IF;

# 每天的增量备份
BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '$backupFolder/:DBNAME_%d-%m-%Y_%H.bak';

# 删除一周前的备份
DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;

SQL 'DROP TABLESPACE RMAN_TEMP INCLUDING CONTENTS AND DATAFILES';
RELEASE CHANNEL c1;
}
"@

# 执行 RMAN 备份命令
Start-Process -FilePath rman.exe -ArgumentList "-run", $RMANScript

# 获取符合条件的备份文件
$filesToDelete = Get-ChildItem -Path $backupFolder | Where-Object { $_.Name -like "*_$oneWeekAgoDate_*" }

# 循环删除符合条件的备份文件
foreach ($file in $filesToDelete) {
Remove-Item -Path $file.FullName -Force
}

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:BackUpLogView,cmdshell,--,备份,DECLARE,SQL,xp,数据库
From: https://www.cnblogs.com/dentist/p/17521431.html

相关文章

  • 【6.0】数据库知识点小结数据库升华
    【6.0】数据库知识点小结数据库升华【一】pymysql模块的进阶知识【1】对数据库数据的增删改查因为在增删改查中,只有查的权限是最简单的,因此查无需过多的权限但是增删改都涉及到数据库数据的变动,需要额外的确认才行(即提交事务)主动提交事务#-*-coding:Utf-8-*-#@Fi......
  • 关于数据库启动失败
      今天在启动mysql连接DBearver的时候,发现MySQL的服务无法启动,一直报上图1中的错误,以管理员身份运行命令提示符的时候,出现上图2中的错误。 解决方案:1.找到Mysql安装路径,将data文件中的内容全部删除2.将my.ini文件中的路径改为:(\改成\\)#mysql-5.7.26-winx64的路径datad......
  • 【4.0】数据库知识点小结数据库辉煌
    【4.0】数据库知识点小结数据库辉煌【一】准备数据创建库createdatabaseday03;#QueryOK,1rowaffected(0.00sec)创建表createtableemp( idintnotnulluniqueauto_increment,namevarchar(20)notnull,sexenum("male","female")notnulld......
  • Scrapy保存数据到多个数据库
    Scrapy保存数据到多个数据库目标网站:中国福利彩票网双色球往期数据阳光开奖(cwl.gov.cn) http://www.cwl.gov.cn/ygkj/wqkjgg/代码classMongoPipeline:defopen_spider(self,spider):self.client=pymongo.MongoClient()self.ssq=self.client.bjsxt.ssq......
  • COIS-3380数据库设计
    COIS-3380DatabaseAssignmentSoccerLeagueostapplicationsthatcreateaproduct,likeadocument,allowyoutocreateandworkwiththeitemandnameitlaterwhenyousaveorexit.Databasesmustbenamedandplacedinthedesiredfolderwhentheyare......
  • 使用LINQ to SQL将数据从一个数据库复制到另一个数据库
    作者:光脚丫思考 有关于数据库访问技术,通常所用到的研习数据库或许更多的要算是Northwind了。呵呵!至少,我自己是经常折腾这样的一个示例数据库。虽然如此,对这个数据库的了解,自我感觉还是相当的肤浅的。或者,只是自己认为没有必要把这个数据库吃的那么透彻。^_^我想恐怕正是因为有了这......
  • 使用LINQ to SQL将数据从一个数据库复制到另一个数据库
    作者:光脚丫思考时间:8/30/20105:04:58PM 有关于数据库访问技术,通常所用到的研习数据库或许更多的要算是Northwind了。呵呵!至少,我自己是经常折腾这样的一个示例数据库。虽然如此,对这个数据库的了解,自我感觉还是相当的肤浅的。或者,只是自己认为没有必要把这个数据库吃的那么透彻。^......
  • PostgreSQL 数据库与模式(二)
    删除数据库如果确定一个库不需要了,可以使用DROPDATABASE语句删除一个数据库(工作中谨慎删库):DROPDATABASE[IFEXISTS]name;如果使用了IFEXISTS,删除一个不存在的数据库时不会产生错误信息。删除数据库会同时删除该数据库中所有的对象,以及文件系统中的数据目录。只有数据库......
  • 使用MySQL Shell备份和还原MySQL
    MySQLShell是MySQL的高级客户端和代码编辑器。除了提供的SQL功能之外,与MySQL类似,MySQLShell还为JavaScript和Python提供脚本功能,并包含用于使用MySQL的API。XDevAPI使用户能够处理关系型和文档数据,强烈建议MySQLServer8.0和5.7与MySQLShell8.0一起使用。MySQLShell包含用......
  • 提升项目数据查询速度:从pgsql数据库性能到SQL优化的实战经验分享
    最近在项目中遇到这样一个问题,在进行数据查询的时候,特别的慢。项目的基本情况首先描述下项目的使用情况,数据库使用的是postgresql关系型数据库,主要数据存储字段data使用的类型是JSONB。data字段存储数据,这个数据是包含了不少的图元,特别是在性能测试中,加入了特别多的图元信息,最......