Oracle数据库自动备份、删除脚本(含Linux、Windows)

MySQL自动备份脚本移步->MySQL数据库自动备份、删除脚本(含Linux、Windows)

Oracle数据库自动备份删除脚本

脚本说明:

1.sh脚本为Linux环境下自动备份、删除脚本;
2.bat脚本为Windows环境下自动备份、删除脚本;
3.执行脚本前,请先详细阅读脚本中的注释,进行修改后,再使用。

功能介绍

1.脚本执行逻辑为:先对数据库进行备份,备份完成之后再保留最近的x个备份文件;
2.脚本需要结合定时任务使用,在做定时任务前,建议先手动执行一次,确保能够正常备份。

脚本文件

oracle_backup.sh

# !/bin/bash

# 数据库参数配置部分
# ==================== 按需修改以下内容 ===========================
# 默认备份路径,不建议进行修改
backupDir="/apps/oracle/admin/orcl/dpdump"
# backupDir="/data/oraclebak"

# 备份路径的逻辑文件名
DIRECTORY_NAME="DATA_PUMP_DIR"
# DIRECTORY_NAME="MYDIR"

# 数据库名称
backupSchemas="V5USER"

# 若需要自定义备份路径,需要创建对应文件夹,并在数据库中执行以下命令创建逻辑目录,并修改DIRECTORY_NAME的值为逻辑目录的名称:MYDIR
# mkdir -p /data/oraclebak && chown oracle:oinstall /data/oraclebak
# CREATE DIRECTORY MYDIR AS '/data/oraclebak';
# SELECT	* FROM dba_directories WHERE DIRECTORY_NAME = 'MYDIR';
# GRANT READ,WRITE ON DIRECTORY MYDIR TO V5USER;

# 导出用户名
dbUser="V5USER"
# 密码
dbPasswd="Abc123456"

# 保留最近几个备份文件
reservedNum=3

# 备份文件后缀时间
time="$(date +%Y%m%d%H%M%S)" 
# ==================== 按需修改以上内容 ===========================


# 数据库备份部分
echo "数据库${backupSchemas}开始备份..."

su - oracle -c "expdp ${dbUser}/${dbPasswd} schemas=${backupSchemas} DIRECTORY=${DIRECTORY_NAME} dumpfile=${backupSchemas}_${time}.dmp logfile=${backupSchemas}_${time}.log"

if ((${$?} != 0));then
	echo "数据库${backupSchemas}备份完成。。。"
	echo "备份默认位置为:${backupDir}"
else
	echo "数据库${backupSchemas}备份异常,请检测"
	exit
fi

# 备份文件删除部分
dmpFileNum=$(ls -l  ${backupDir}/${backupSchemas}*.dmp |grep ^- |wc -l)
Num=${dmpFileNum}
if((${Num} > reservedNum));then
	echo "数据库备份文件删除中..."
	while(( dmpFileNum > reservedNum))
		do
			OldFile=$(ls -rt  ${backupDir}/${backupSchemas}*.* | head -2)
			echo  "Delete File:" $OldFile
			rm -f $OldFile
			let "dmpFileNum--"
		done
	echo "数据库备份文件删除完成..."
else
	echo "当前备份文件数:${Num}小于需保留文件数:${reservedNum},不执行删除操作!"
fi

1.注意:
内容由Windows环境复制过去,在Linux执行时候会报错,如“mysql_back.sh:行37: 未预期的符号 `$‘\r’’ 附近有语法错误”,可在Linux上,使用命令:dos2unix mysql_back.sh修改脚本编码。

2.切记:
脚本中,backupDir变量一定要先使用“SELECT * FROM dba_directories;”命令进行查询后,得到的“DATA_PUMP_DIR”逻辑目录名的值。创建逻辑目录及授权可参考脚本中以下部分:

# 若需要自定义备份路径,需要创建对应文件夹,并在数据库中执行以下命令创建逻辑目录,并修改DIRECTORY_NAME的值为逻辑目录的名称:MYDIR
mkdir -p /data/oraclebak && chown oracle:oinstall /data/oraclebak
CREATE DIRECTORY MYDIR AS '/data/oraclebak';
SELECT	* FROM dba_directories WHERE DIRECTORY_NAME = 'MYDIR';
GRANT READ,WRITE ON DIRECTORY MYDIR TO V5USER;

3.优化点:
添加是否压缩备份部分内容内容,定量或定时清理历史备份信息

oracle_backup.bat

@echo off
setlocal enabledelayedexpansion
chcp 65001

rem Oracle安装目录
set ORACLE_PATH=D:\app\Administrator\product\11.2.0\dbhome_1\BIN

rem 设置数据库连接信息
set ORACLE_USERNAME=V82SP1_1
set ORACLE_PASSWORD=Abc123456

rem 设置逻辑目录,默认为:DATA_PUMP_DIR,执行数据库备份命令后,默认备份在该目录下
set BACK_OPTION=DATA_PUMP_DIR
rem 该路径需使用下述SQL查询
set BACK_DIRECTORY="D:\app\ZhangXY\admin\orcl\dpdump\"
rem 查询命令:SELECT	* FROM	dba_directories;
rem 若需要创建逻辑备份目录,可使用命令:CREATE DIRECTORY mydir AS '/data/oraclebak';进行创建,其中mydir为逻辑目录名,/data/oraclebak为逻辑备份目录实际存储路径
rem 注意:创建逻辑备份目录后,需要对用户进行授权,备份时才能正常写入。授权命令:GRANT READ,WRITE ON DIRECTORY MYDIR TO V82SP1_1;

rem 设置备份名
set DATE=%date:~3,4%%date:~8,2%%date:~11,2%
set HOUR="%time:~0,2%"
rem 处理1~9点时间显示一位问题
if "%time:~0,1%"==" " set HOUR=0%time:~1,1%
set MINUTE=%time:~3,2%
set SECOND=%time:~6,2%

set DATE_TIME=%DATE%-%HOUR%%MINUTE%%SECOND%
set BACK_NAME=%ORACLE_USERNAME%_%DATE_TIME%

rem 开始备份
%ORACLE_PATH%\expdp.exe %ORACLE_USERNAME%/%ORACLE_PASSWORD%  directory="%BACK_OPTION%" dumpfile="%BACK_NAME%.dmp" logfile="%BACK_NAME%.log"

rem 若不需要压缩备份,下边部分的代码可注释(需保留最后一行)..................................................................

rem 数据备份目录(不要放置其他内容,仅用于存放数据库压缩文件)
set BACKUP_DIR="E:\OracleBak\"
rem 如果备份目录不存在,将自动创建
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

rem 压缩软件安装目录
set ZIP_PATH="D:\Program Files\7-Zip"

rem 开始压缩文件
%ZIP_PATH%\7z.exe a -tzip %BACKUP_DIR%%BACK_NAME%.zip %BACK_DIRECTORY%%BACK_NAME%.dmp %BACK_DIRECTORY%%BACK_NAME%.log

rem 压缩后,删除原始dmp文件和log文件
del /f /s /q /a %BACK_DIRECTORY%%BACK_NAME%.dmp
del /f /s /q /a %BACK_DIRECTORY%%BACK_NAME%.log

rem 压缩并删除原有文件
rem %RAR_CMD% a  -ep -df "%BACK_FULL_NAME%back.rar" "%BACK_FULL_NAME%.dmp" "%BACK_FULL_NAME%.log" 

rem 删除30天之前的备份数据------> 注意:30这个数字代表留下备份数据的天数,可依据现场情况调整
rem forfiles /p %BACKUP_DIR% /m *.rar -d -30 /c "cmd /c del /f @path"

rem 设置保存文件数量
set SAVE_NUM=5

:: 进入目标目录
cd /d "%BACKUP_DIR%"
 
:: 设置计数器
set /a "COUNTER=0"
 
:: 循环遍历文件,按照修改日期排序
for /f "delims=" %%i in ('dir /b /a-d /o-d /t:w') do (
    set /a "COUNTER+=1"
    if !COUNTER! gtr %SAVE_NUM% (
        del "%%i"
    )
)
endlocal

1.切记:
脚本中,BACK_DIRECTORY变量一定要先使用“SELECT * FROM dba_directories;”命令进行查询后,得到的“DATA_PUMP_DIR”逻辑目录名的值。(创建命令参考脚本说明)
在这里插入图片描述
2.优化点:
目前bat脚本中,默认使用7z进行压缩备份。基于此情况,可优化的点有:
a.设置变量,使用户能够选择是否需要压缩备份;
b.添加其他的压缩软件,使用户在备份的时候,有更多选择

定时备份

Linux:crontab
Windows:定时任务
回答: 在Linux系统中手动备份Oracle数据库,可以按照以下步骤进行操作。首先,登录到数据库的编辑模式,使用以下命令登录到SQL*Plus: "sqlplus / as sysdba"。然后,修改当前用户的权限,使用以下命令授予sysdba权限和imp_full_database权限给用户: "grant sysdba to 用户名; grant imp_full_database to 用户名;"。\[1\] 接下来,设置环境变量。因为crontab定时调用时,不会使用oracle用户的环境变量,所以需要将环境变量导入。可以在备份脚本中添加以下代码来设置环境变量: ``` export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ``` 其中,ORACLE_HOME需要根据实际安装路径进行修改。\[2\] 然后,创建一个备份脚本。在脚本中,可以使用当前日期作为导出文件的文件名,并将导出的文件和日志文件打包成一个zip包,并删除这两个文件。以下是一个备份脚本的示例: ``` #!/bin/bash export ORACLE_SID=数据库实例名 export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export BACKUP_DIR=/backup export DATE=$(date +%Y%m%d) export DUMP_FILE=$BACKUP_DIR/$DATE.dmp export LOG_FILE=$BACKUP_DIR/$DATE.log export ZIP_FILE=$BACKUP_DIR/$DATE.zip expdp 用户名/密码@数据库实例名 directory=DATA_PUMP_DIR dumpfile=$DUMP_FILE logfile=$LOG_FILE zip $ZIP_FILE $DUMP_FILE $LOG_FILE rm $DUMP_FILE $LOG_FILE ``` 其中,需要根据实际情况修改ORACLE_SID、ORACLE_HOME、BACKUP_DIR、用户名、密码和数据库实例名等参数。\[2\] 最后,可以将备份脚本设置为定时任务,以实现自动备份。可以使用crontab命令来设置定时任务,例如每天凌晨3点执行备份脚本: ``` crontab -e ``` 然后,在打开的编辑器中添加以下行: ``` 0 3 * * * /path/to/backup_script.sh ``` 保存并退出编辑器即可。这样,每天凌晨3点,备份脚本就会自动执行。\[2\] #### 引用[.reference_title] - *1* [Linux备份oracle数据库](https://blog.csdn.net/li951383937/article/details/52475982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [怎样在Linux系统中备份Oracle数据库](https://blog.csdn.net/weixin_39658318/article/details/116388866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [linux环境下如何对oracle数据库进行整库备份](https://blog.csdn.net/weixin_42134097/article/details/116318942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值