rman target / CONFIGURE RETENTION POLICY TO REDUNDANCY 2; CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 15 DAYS;--要么windows要么redundancy,一般选择windows合理 CONFIGURE RMAN OUTPUT TO KEEP FOR 15 DAYS;
注意两个节点都需要挂接NFS
挂接备份路径 mount -t nfs -o rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,proto=tcp 192.168.0.111:/data /bak mkdir /bak/rman 确认oracle用户可写 touch /bak/rman/1.txt
修改/etc/fstab保证重启自动挂接:
192.168.0.111:/data /bak nfs rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,proto=tcp,_netdev 0 0
自动挂接测试:
umount /bak mount -a df -hT确认可以看到如下截图挂接成功,并且oracle用户可写。 cd /bak touch 1.txt
SQL> alter database enable block change tracking using file '+DATA'; SQL> select status,filename from v$block_change_tracking; STATUS ---------- FILENAME -------------------------------------------------------------------------------- ENABLED +DATA/JYC/CHANGETRACKING/ctf.340.1138815317
注意在两个节点的相同路径都存放相同脚本。
[oracle@rac1 bak]$ pwd /home/oracle/bak [oracle@rac1 bak]$ ll total 12 -rwxr-xr-x 1 oracle oinstall 745 Jun 6 17:57 jycdb_full_jycdb.sh -rwxr-xr-x 1 oracle oinstall 701 Jun 6 18:00 jycdb_incr_jycdb.sh -rwxr-xr-x 1 oracle oinstall 532 Jun 6 17:33 expdp_job.sh [oracle@rac1 bak]$ more jycdb_incr_jycdb.sh #!/bin/bash echo -e '******Start********_'$(date '+%Y-%m-%d %H:%M:%S') source /home/oracle/.bash_profile rman target / log=/bak/rman/jycdb_incr_`date +%Y%m%d-%H%M%S`.log <<EOF run{ allocate channel c1 type disk; allocate channel c2 type disk; backup as compressed backupset incremental level 1 tag 'jycdb_incr_level_1' format '/bak/rman/jycdb_incr_%d_%T_%s' database include current controlfile; backup as compressed backupset archivelog all format '/bak/rman/jycdb_arch_1_%s_%p_%t_%d' delete input; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete; crosscheck archivelog all; delete noprompt expired archivelog all; release channel c1; release channel c2; } exit; EOF [oracle@rac1 bak]$ cat jycdb_full_jycdb.sh #!/bin/bash echo -e '******Start********_'$(date '+%Y-%m-%d %H:%M:%S') source /home/oracle/.bash_profile find /bak/rman/ -mtime +15 -name "jycdb_*" -exec rm -f {} \; rman target / log=/bak/rman/full_jycdb_`date +%Y%m%d-%H%M%S`.log <<EOF run{ allocate channel c1 type disk; allocate channel c2 type disk; backup as compressed backupset incremental level 0 tag 'jycdb_incr_level_0' format '/bak/rman/jycdb_full_%d_%T_%s' database include current controlfile; backup as compressed backupset archivelog all format '/bak/rman/jycdb_arch_0_%s_%p_%t_%d' delete input; crosscheck backup; delete noprompt expired backup; delete noprompt obsolete; crosscheck archivelog all; delete noprompt expired archivelog all; release channel c1; release channel c2; } exit; EOF 测试: nohup ./jycdb_full_jycdb.sh > ./1.log & tail -f 1.log
col opname format a32 col target_desc format a32 col perwork format a12 set lines 160 set wrap off select sid,OPNAME,TARGET_DESC,sofar,TOTALWORK,TIME_REMAINING,ELAPSED_SECONDS from v$session_longops where sofar!=totalwork; 新开窗口观察备份增长 watch -n 1 du -sm rman 新开窗口观察网络流量 sar -n DEV 1 新开窗口观察CPU、IO压力 sar 1 100000 iostat -dm 1
[oracle@rac1 bak]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 6 19:39:24 2023 Version 19.18.0.0.0 Copyright (c) 1982, 2022, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.18.0.0.0 SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 JYCDB READ WRITE NO SQL> set linesize 500; SQL> col NEXT_RUN_DATE format a50 SQL> col OBJECT_NAME format a30 SQL> select obj#, object_name, next_run_date from sys.scheduler$_job ssj, dba_objects dob where ssj.obj# = dob.object_id and object_name like 'JYCDB_BAK%'; no rows selected SQL> select obj#, object_name, next_run_date from sys.scheduler$_job ssj, dba_objects dob where ssj.obj# = dob.object_id; OBJ# OBJECT_NAME NEXT_RUN_DATE ---------- ------------------------------ -------------------------------------------------- 19685 PURGE_LOG 07-JUN-23 03.00.00.654753 AM PST8PDT 19688 FILE_WATCHER 19694 PMO_DEFERRED_GIDX_MAINT_JOB 07-JUN-23 02.00.00.065217 AM PST8PDT 19695 CLEANUP_NON_EXIST_OBJ 06-JUN-23 10.58.25.141697 PM +08:00 19696 CLEANUP_ONLINE_IND_BUILD 06-JUN-23 05.14.27.319985 AM -07:00 19697 CLEANUP_TAB_IOT_PMO 06-JUN-23 05.14.37.287152 AM -07:00 19698 CLEANUP_TRANSIENT_TYPE 06-JUN-23 10.58.25.096625 PM +08:00 19699 CLEANUP_TRANSIENT_PKG 06-JUN-23 05.14.57.000000 AM -07:00 19700 CLEANUP_ONLINE_PMO 06-JUN-23 05.15.07.887309 AM -07:00 19701 FILE_SIZE_UPD 16-MAR-24 10.58.06.209593 AM +08:00 19817 ORA$AUTOTASK_CLEAN 07-JUN-23 03.00.00.607016 AM PST8PDT OBJ# OBJECT_NAME NEXT_RUN_DATE ---------- ------------------------------ -------------------------------------------------- 19820 HM_CREATE_OFFLINE_DICTIONARY 19821 DRA_REEVALUATE_OPEN_FAILURES 20151 ORA$PREPLUGIN_BACKUP_JOB 20642 BSLN_MAINTAIN_STATS_JOB 11-JUN-23 12.00.00.417570 AM -07:00 20708 FGR$AUTOPURGE_JOB 20709 RSE$CLEAN_RECOVERABLE_SCRIPT 07-JUN-23 12.00.00.300713 AM PRC 20710 SM$CLEAN_AUTO_SPLIT_MERGE 07-JUN-23 12.00.00.312885 AM PRC 20863 LOAD_OPATCH_INVENTORY 22395 XMLDB_NFS_CLEANUP_JOB 76100 MGMT_CONFIG_JOB 07-JUN-23 01.01.01.068116 AM +08:00 76101 MGMT_STATS_CONFIG_JOB 01-JUL-23 01.01.01.364332 AM +08:00 OBJ# OBJECT_NAME NEXT_RUN_DATE ---------- ------------------------------ -------------------------------------------------- 91874 LOAD_OPATCH_INVENTORY_2 91873 LOAD_OPATCH_INVENTORY_1 24 rows selected. SQL> select job_name, job_type, enabled, state from user_scheduler_jobs where job_name like 'JYCDB_BAK%'; no rows selected SQL> 在BYDAY参数指定周日(BYDAY=SUN),执行时间指定 1 点(BYHOUR=18): begin dbms_scheduler.create_job ( job_name => 'JYCDB_BAK_LEVEL_0', job_type => 'EXECUTABLE', job_action => '/home/oracle/bak/jycdb_full_jycdb.sh', repeat_interval => 'FREQ=WEEKLY; BYDAY=SUN; BYHOUR=18;BYMINUTE=0;BYSECOND=0', enabled => true, comments => 'JYCDB Backup JOB LEVEL_0' ); end; / 增量备份任务,指定每周从周一到周六,每天18点执行; 在BYDAY参数指定周一至周六(BYDAY=MON,TUE,WED,THU,FRI,SAT): begin dbms_scheduler.create_job ( job_name => 'JYCDB_BAK_LEVEL_1', job_type => 'EXECUTABLE', job_action => '/home/oracle/bak/jycdb_incr_jycdb.sh', repeat_interval => 'FREQ=WEEKLY; BYDAY=MON,TUE,WED,THU,FRI,SAT; BYHOUR=18;BYMINUTE=0;BYSECOND=0', enabled => true, comments => 'JYCDB Backup JOB LEVEL_1' ); end; / 设置属性参考: exec dbms_scheduler.set_attribute(name => 'JYCDB_BAK_LEVEL_0',attribute => 'REPEAT_INTERVAL',value => 'FREQ=WEEKLY; BYDAY=SUN; BYHOUR=18;BYMINUTE=0;BYSECOND=0'); exec dbms_scheduler.set_attribute(name => 'JYCDB_BAK_LEVEL_1',attribute => 'REPEAT_INTERVAL',value => 'FREQ=WEEKLY; BYDAY=MON,TUE,WED,THU,FRI,SAT; BYHOUR=18;BYMINUTE=0;BYSECOND=0'); exec dbms_scheduler.set_attribute(name => 'JYCDB_BAK_LEVEL_0',attribute => 'INSTANCE_ID',value => 1); SQL> select job_name, job_type, enabled, state from user_scheduler_jobs where job_name like 'JYCDB_BAK%'; JOB_NAME JOB_TYPE ENABL STATE -------------------------------------------------------------------------------------------------------------------------------- ---------------- ----- -------------------- JYCDB_BAK_LEVEL_0 EXECUTABLE TRUE SCHEDULED JYCDB_BAK_LEVEL_1 EXECUTABLE TRUE SCHEDULED SQL> select obj#, object_name, next_run_date from sys.scheduler$_job ssj, dba_objects dob where ssj.obj# = dob.object_id and object_name like 'JYCDB_BAK%'; OBJ# OBJECT_NAME NEXT_RUN_DATE ---------- ------------------------------ -------------------------------------------------- 94313 JYCDB_BAK_LEVEL_0 11-JUN-23 06.40.46.570439 PM PRC 94314 JYCDB_BAK_LEVEL_1 07-JUN-23 06.40.59.627431 PM PRC SQL> select log_id, log_date, status from user_scheduler_job_run_details where job_name like 'JYCDB_BAK%'; no rows selected SQL>
至少观察一周,确保备份结果符合预期,不影响业务性能。
测试可能用到的命令:
exec DBMS_SCHEDULER.drop_JOB(job_name=>'JYCDB_BAK_LEVEL_1'); exec DBMS_SCHEDULER.run_JOB(job_name=>'JYCDB_BAK_LEVEL_1'); 查看执行结果: set line 180 set wrap off col JOB_NAME for a30 col STATUS for a10 col ACTUAL_START_DATE for a20 col RUN_DURATION for a16 select JOB_NAME,INSTANCE_ID,STATUS,ERROR#,ACTUAL_START_DATE,RUN_DURATION,ADDITIONAL_INFO from dba_scheduler_job_run_details where job_name like 'JYCDB_BAK%' order by ACTUAL_START_DATE desc;
BEGIN DBMS_SCHEDULER.run_JOB(job_name=>'JYCDB_BAK_LEVEL_1'); END; * ERROR at line 1: ORA-27369: job of type EXECUTABLE failed with exit code: 255 execve: Exec format error ORA-06512: at "SYS.DBMS_ISCHED", line 242 ORA-06512: at "SYS.DBMS_SCHEDULER", line 566 ORA-06512: at line 1 处理办法:脚本头增加 #!/bin/bash
select JOB_NAME,STATUS,ERROR#,ACTUAL_START_DATE,RUN_DURATION,ADDITIONAL_INFO,ERRORS from dba_scheduler_job_run_details where job_name like 'JYCDB_BAK%'; JOB_NAME ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ STATUS ERROR# ACTUAL_START_DATE ------------------------------ ---------- --------------------------------------------------------------------------- RUN_DURATION --------------------------------------------------------------------------- ADDITIONAL_INFO ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ERRORS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ JYCDB_BAK_LEVEL_1 FAILED 2 07-JUN-23 06.40.59.840001 PM PRC +000 00:00:00 JOB_NAME ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ STATUS ERROR# ACTUAL_START_DATE ------------------------------ ---------- --------------------------------------------------------------------------- RUN_DURATION --------------------------------------------------------------------------- ADDITIONAL_INFO ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ERRORS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ORA-27369: job of type EXECUTABLE failed with exit code: No such file or directory
检查两个节点的alert日志,发现节点1正常,而节点2的alert日志有报错如下:
Errors in file /oracle/app/oracle/diag/rdbms/jyc/jyc2/trace/jyc2_j000_20581.trc: ORA-12012: error on auto execute of job "SYS"."JYCDB_BAK_LEVEL_1" ORA-27369: job of type EXECUTABLE failed with exit code: No such file or directory 2023-06-07T22:00:00.081080+08:00 Setting Resource Manager CDB plan DEFAULT_MAINTENANCE_PLAN via parameter 2023-06-07T22:00:00.152945+08:00 JYCDB(3):Setting Resource Manager plan SCHEDULER[0x4D51]:DEFAULT_MAINTENANCE_PLAN via scheduler window JYCDB(3):Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter 2023-06-08T00:01:13.263519+08:00 TABLE SYS.WRP$_REPORTS_TIME_BANDS: ADDED INTERVAL PARTITION SYS_P1434 (4906) VALUES LESS THAN (TO_DATE(' 2023-06-08 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 2023-06-08T01:00:33.778381+08:00 TABLE SYS.WRP$_REPORTS: ADDED INTERVAL PARTITION SYS_P1435 (4907) VALUES LESS THAN (TO_DATE(' 2023-06-09 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_DETAILS: ADDED INTERVAL PARTITION SYS_P1436 (4907) VALUES LESS THAN (TO_DATE(' 2023-06-09 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 2023-06-08T02:00:00.104176+08:00 Closing Resource Manager plan via scheduler window Clearing Resource Manager CDB plan via parameter 2023-06-08T02:00:00.136410+08:00 JYCDB(3):Closing scheduler window JYCDB(3):Closing Resource Manager plan via scheduler window JYCDB(3):Clearing Resource Manager plan via parameter 2023-06-08T06:30:33.287999+08:00 Thread 2 advanced to log sequence 572 (LGWR switch), current SCN: 65077905 Current log# 9 seq# 572 mem# 0: +DATA/JYC/ONLINELOG/group_9.292.1131713213 2023-06-08T06:30:35.597431+08:00 ARC1 (PID:13798): Archived Log entry 2155 added for T-2.S-571 ID 0x179d9e75 LAD:1 [oracle@rac2 trace]$ [oracle@rac2 trace]$ more /oracle/app/oracle/diag/rdbms/jyc/jyc2/trace/jyc2_j000_20581.trc Trace file /oracle/app/oracle/diag/rdbms/jyc/jyc2/trace/jyc2_j000_20581.trc Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.18.0.0.0 Build label: RDBMS_19.18.0.0.0DBRU_LINUX.X64_230111 ORACLE_HOME: /oracle/app/oracle/product/19c/dbhome_1 System name: Linux Node name: rac2 Release: 5.4.17-2102.201.3.el7uek.x86_64 Version: #2 SMP Fri Apr 23 09:05:55 PDT 2021 Machine: x86_64 Instance name: jyc2 Redo thread mounted by this instance: 2 Oracle process number: 236 Unix process pid: 20581, image: oracle@rac2 (J000) *** 2023-06-07T18:40:59.932362+08:00 (CDB$ROOT(1)) *** SESSION ID:(3390.19105) 2023-06-07T18:40:59.932413+08:00 *** CLIENT ID:() 2023-06-07T18:40:59.932419+08:00 *** SERVICE NAME:(SYS$USERS) 2023-06-07T18:40:59.932424+08:00 *** MODULE NAME:(DBMS_SCHEDULER) 2023-06-07T18:40:59.932428+08:00 *** ACTION NAME:(JYCDB_BAK_LEVEL_1) 2023-06-07T18:40:59.932433+08:00 *** CLIENT DRIVER:(SERVER) 2023-06-07T18:40:59.932437+08:00 *** CONTAINER ID:(1) 2023-06-07T18:40:59.932442+08:00 ORA-12012: error on auto execute of job "SYS"."JYCDB_BAK_LEVEL_1" <error barrier> at 0x7ffd173fbd90 placed jslv.c@1927 ORA-27369: job of type EXECUTABLE failed with exit code: No such file or directory [oracle@rac2 trace]$ pwd /oracle/app/oracle/diag/rdbms/jyc/jyc2/trace
上述错误是因为任务在rac2上运行了,而rac2上忘记放置相应的备份脚本以及未挂接nfs目录导致。
[root@rac2 ~]# cd / [root@rac2 /]# umount /bak umount.nfs: /bak: device is busy [root@rac2 /]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 126G 0 126G 0% /dev tmpfs 126G 2.1G 124G 2% /dev/shm tmpfs 126G 450M 126G 1% /run tmpfs 126G 0 126G 0% /sys/fs/cgroup /dev/mapper/ol-root 495G 104G 392G 21% / /dev/sr0 4.6G 4.6G 0 100% /media/cdrom /dev/vda1 1014M 204M 811M 21% /boot tmpfs 26G 0 26G 0% /run/user/54322 tmpfs 26G 0 26G 0% /run/user/54321 tmpfs 26G 0 26G 0% /run/user/0 192.168.0.111:/data 3.0T 251G 2.8T 9% /bak [root@rac2 /]# ps -ef|grep rman root 22777 3561 0 11:02 pts/2 00:00:00 grep --color=auto rman [root@rac2 /]# umount -f /bak umount.nfs: /bak: device is busy [root@rac2 /]# fuser -m -v /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak oracle 30869 ..c.. bash [root@rac2 /]# ps -ef|grep 30869 root 5496 3561 0 11:03 pts/2 00:00:00 grep --color=auto 30869 oracle 30869 30816 0 09:13 pts/0 00:00:00 -bash [root@rac2 /]# [root@rac2 /]# kill -9 30869 [root@rac2 /]# ps -ef|grep 30869 root 9914 3561 0 11:03 pts/2 00:00:00 grep --color=auto 30869 [root@rac2 /]# fuser -m -v /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak [root@rac2 /]# umount /bak [root@rac2 /]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 126G 0 126G 0% /dev tmpfs 126G 2.1G 124G 2% /dev/shm tmpfs 126G 449M 126G 1% /run tmpfs 126G 0 126G 0% /sys/fs/cgroup /dev/mapper/ol-root 495G 104G 392G 21% / /dev/sr0 4.6G 4.6G 0 100% /media/cdrom /dev/vda1 1014M 204M 811M 21% /boot tmpfs 26G 0 26G 0% /run/user/54322 tmpfs 26G 0 26G 0% /run/user/0 [root@rac2 /]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Mar 6 21:54:51 2023 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/ol-root / xfs defaults 0 0 UUID=ab5d1dfb-39c6-4b21-bdb5-7ccc185e587e /boot xfs defaults 0 0 /dev/mapper/ol-swap swap swap defaults 0 0 /dev/sr0 /media/cdrom iso9660 ro 0 0 /home/swap/swap_file swap swap defaults 0 0 192.168.0.111:/data /bak nfs rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,proto=tcp,_netdev 0 0 [root@rac2 /]# [root@rac2 /]# mount -a [root@rac2 /]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 126G 0 126G 0% /dev tmpfs tmpfs 126G 2.1G 124G 2% /dev/shm tmpfs tmpfs 126G 449M 126G 1% /run tmpfs tmpfs 126G 0 126G 0% /sys/fs/cgroup /dev/mapper/ol-root xfs 495G 104G 392G 21% / /dev/sr0 iso9660 4.6G 4.6G 0 100% /media/cdrom /dev/vda1 xfs 1014M 204M 811M 21% /boot tmpfs tmpfs 26G 0 26G 0% /run/user/54322 tmpfs tmpfs 26G 0 26G 0% /run/user/0 192.168.0.111:/data nfs 3.0T 251G 2.8T 9% /bak [root@rac2 /]# su - oracle Last login: Thu Jun 8 11:00:39 CST 2023 on pts/2 [oracle@rac2 ~]$ cd /bak [oracle@rac2 bak]$ touch 1.txt [oracle@rac2 bak]$ rm 1.txt [oracle@rac2 bak]$ 或者不用kill命令,直接fuser -cvk /bak,不显示详细进程则去掉参数v,fuser -ck /bak即可。 [root@rac1 ~]# fuser -m -v /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak root 25535 ..c.. bash root 32522 ..c.. bash [root@rac1 ~]# fuser -cv /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak root 25535 ..c.. bash root 32522 ..c.. bash [root@rac1 ~]# fuser -mv /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak root 25535 ..c.. bash root 32522 ..c.. bash [root@rac1 ~]# ps -ef|grep 25535 root 17759 14821 0 11:13 pts/3 00:00:00 grep --color=auto 25535 root 19557 25535 0 09:16 pts/0 00:00:00 su - oracle root 25535 22293 0 09:02 pts/0 00:00:00 -bash [root@rac1 ~]# ps -ef|grep 32522 root 19858 14821 0 11:13 pts/3 00:00:00 grep --color=auto 32522 root 32522 22293 0 10:01 pts/2 00:00:00 -bash [root@rac1 ~]# [root@rac1 ~]# [root@rac1 ~]# [root@rac1 ~]# fuser -cvk /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak root 25535 ..c.. bash root 32522 ..c.. bash [root@rac1 ~]# fuser -mv /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak [root@rac1 ~]# fuser -cv /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak [root@rac1 ~]# [root@rac1 ~]# fuser -ck /bak [root@rac1 ~]# fuser -mv /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak [root@rac1 ~]# fuser -cv /bak USER PID ACCESS COMMAND /bak: root kernel mount /bak
如上操作记录,处理办法为fuser -m -v /bak找出占用的进程,kill -9掉。
如下图,备份的主机用户和属主ID不存在实际的oracle用户和属主,无权限读取。
处理办法:
在数据库服务器任意节点,对于已存在的文件,在oracle用户下执行su - oracle
chmod -R 777 /bak/rman,为解决新备份文件的权限问题,则在备份脚本末尾增加赋权命令即可:chmod -R 777 /bak/rman
使用操作系统crontab定时任务,以及合并全量备份和增量备份脚本,整合为一个备份脚本,自动判断进行全量备份还是增量备份操作,代码如下:
bash#!/bin/bash
# ----------------------------------------------------------------
# Copyright © 2024 OpenSource Ltd. All rights reserved.
# FileName : rman_backup_full_and_incr.sh
# Author : dba
# Mail : [email protected]
# Version : v1.0.0
# CreateTime : 2024-07-12 09:16:12
# COPYRIGHT : Copyright ©2024 - 开源服务
# Description: Welcome Use The Script.
# ----------------------------------------------------------------
source /home/oracle/.bash_profile
week_num=$(date +%w)
dt_time=$(date +%Y%m%d)
#week_num=$1
#dt_time=$2
ds_time=$(date +%F_%T)
host_ip="172.17.44.117"
port="1521"
rman_dir="/tj_data_backup/backup/新电商-进销存/172.17.44.117_backup/172.17.44.117/1521"
#rman_dir="/acdata/backup/rman_backup"
#find ${rman_dir} -type f -mtime +14 -exec rm -rf {} \;
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
# 1.全量数据备份
func_full_backup_data(){
# Full Data Backup
if [ ! -d ${rman_dir} ];then
mkdir -p ${rman_dir}
else
cd ${rman_dir}
rman target / log=/acdata/backup/rman_backup/full_bosnds3_`date +%Y%m%d-%H%M%S`.log <<sqleof
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup as compressed backupset incremental level 0 tag 'bosnds3_incr_level_0' format '${rman_dir}/bosnds3_full_%d_%T_%s' database include current controlfile;
backup as compressed backupset archivelog all format '${rman_dir}/bosnds3_arch_0_%d_%s_%p_%t' delete input;
release channel c1;
release channel c2;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit
sqleof
fi
}
#func_full_backup_data
# 2.增量数据备份
func_incr_backup_data(){
if [ ! -d ${rman_dir} ];then
mkdir -p ${rman_dir}
else
cd ${rman_dir}
rman target / log=/acdata/backup/rman_backup/bosnds3_incr_`date +%Y%m%d-%H%M%S`.log <<sqleof
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup as compressed backupset incremental level 1 tag 'bosnds3_incr_level_1' format '${rman_dir}/bosnds3_incr_%d_%T_%s' database include current controlfile;
backup as compressed backupset archivelog all format '${rman_dir}/bosnds3_arch_1_%d_%s_%p_%t' delete input;
release channel c1;
release channel c2;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit
sqleof
fi
}
#func_incr_backup_data
# echo "######$week_num $dt_time######"
main(){
echo "######$week_num $dt_time######"
echo "******Start Backup Time:`date +%F_%T`********"
#compress Full_or_incr backup data and delete not tar.gz files
if [ ${week_num} -eq 0 ];then
func_full_backup_data
echo "$week_num"
cd ${rman_dir}
find ./ -type f -not -name '*.tar.gz' -mtime 0|xargs tar cvfz ${host_ip}_${port}_Oracle_bosnds3_Full_${dt_time}.tar.gz
find ./ -type f -not -name '*.tar.gz' -mtime 0|xargs rm -rf
else
func_incr_backup_data
echo "$week_num"
cd ${rman_dir}
find ./ -type f -not -name '*.tar.gz' -mtime 0|xargs tar cvfz ${host_ip}_${port}_Oracle_bosnds3_incr${week_num}_${dt_time}.tar.gz
find ./ -type f -not -name '*.tar.gz' -mtime 0|xargs rm -rf
fi
ls -thrl ${rman_dir}
echo "******Finished Backup Time:`date +%F_%T`********"
}
main�
js[oracle@wtj1ndsworc02 scripts]$ crontab -l
# Backup orcl full and incr data
30 01 * * * /home/oracle/scripts/rman_backup_full_and_incr.sh >> /home/oracle/scripts/rman_backup_full_and_incr.log 2>&1
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_SCHEDULER.html#GUID-A24DEB5D-2EAF-4C0B-8715-30DC947B3F87 https://www.huoban.com/news/post/2505.html https://www.modb.pro/db/619858 https://www.cnblogs.com/passby1/p/13690250.html https://blog.csdn.net/meichuangkeji/article/details/108006505 https://dbamarco.wordpress.com/2023/11/
本文作者:Kevin@灼华
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!