5、Oracle备份(oracle备份脚本配置)
1.1 Oracle数据库备份
1.1.1 链接Oracle介质管理库
请在数据库节点上操作。 [oracle@db01/usr/openv/netbackup/bin]$ ./oracle_link Thu Jul 9 14:35:44 CST 2015 All Oracle instances should be shutdown before running this script.
Please log into the Unix system as the Oracle owner for running this script
Do you want to continue? (y/n) [n] y
LIBOBK path: /usr/openv/netbackup/bin ORACLE_HOME: /oracle/product/11.2.0/db11g Oracle version: 11.2.0.4.0 Platform type: x86_64 Linking LIBOBK: ln -s /usr/openv/netbackup/bin/libobk.so64 /oracle/product/11.2.0/db11g/lib/libobk.so Done
Please check the trace file located in /tmp/make_trace.36923 to make sure the linking process was successful. [oracle@db01/usr/openv/netbackup/bin]$
|
1.1.2 数据库信息确认
节点1
SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination +FLASH_DG Oldest online log sequence 28963 Next log sequence to archive 28966 Current log sequence 28966 SQL>
节点2 SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination +FLASH_DG Oldest online log sequence 28963 Next log sequence to archive 28966 Current log sequence 28966 SQL>
|
有以上信息可知,数据库归档文件放置在ASM共享存储上,故,后续归档文件备份策略仅需要在1个节点上配置。
1.1.3 确定备份策略名称
数据文件备份策略名称 |
oracle_db01_full |
归档文件备份策略名称 |
oracle_db01_arch |
控制文件备份策略名称 |
控制文件跟随数据文件和归档文件备份,不单独备份。 |
1.1.4 备份脚本配置
创建脚本目录,并拷贝模板脚本到目录下
[oracle@db01/usr/openv]$ mkdir scripts [oracle@db01/usr/openv/netbackup/ext/db_ext/oracle/samples/rman]$ cp hot_database_backup.sh /usr/openv/scripts/ [oracle@db01/usr/openv/scripts]$ cp hot_database_backup.sh arch.sh |
数据文件备份脚本:hot_database_backup.sh
归档文件备份脚本:arch.sh
获取oracle环境变量
[oracle@db01/home/oracle]$ env |grep -i sid ORACLE_SID= test1 [oracle@db01/home/oracle]$ env |grep -i oracle_home ORACLE_HOME=/oracle/product/11.2.0/db11g [oracle@db01/home/oracle]$ |
1.1.5 修改hot_database_backup.sh脚本
修改如下位置:
ORACLE_HOME=
ORACLE_SID=
ORACLE_USER=
SEND CHANNEL ch00 'NB_ORA_POLICY=
SEND CHANNEL ch01 'NB_ORA_POLICY=
[oracle@test1 /usr/openv/scripts]$ cat hot_database_backup.sh #!/bin/sh # $Header: hot_database_backup.sh,v 1.3 2010/08/04 17:56:02 $ # #bcpyrght #*************************************************************************** #* $VRTScprght: Copyright 2014 Symantec Corporation, All Rights Reserved SY39-6648-5573-26-15-5 $ * #*************************************************************************** #ecpyrght # # --------------------------------------------------------------------------- # hot_database_backup.sh # --------------------------------------------------------------------------- # This script uses Recovery Manager to take a hot (inconsistent) database # backup. A hot backup is inconsistent because portions of the database are # being modified and written to the disk while the backup is progressing. # You must run your database in ARCHIVELOG mode to make hot backups. It is # assumed that this script will be executed by user root. In order for RMAN # to work properly we switch user (su -) to the oracle dba account before # execution. If this script runs under a user account that has Oracle dba # privilege, it will be executed using this user's account. # ---------------------------------------------------------------------------
# --------------------------------------------------------------------------- # Determine the user which is executing this script. # ---------------------------------------------------------------------------
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
# --------------------------------------------------------------------------- # Put output in <this file name>.out. Change as desired. # Note: output directory requires write permission. # ---------------------------------------------------------------------------
RMAN_LOG_FILE=${0}.out
# --------------------------------------------------------------------------- # You may want to delete the output file so that backup information does # not accumulate. If not, delete the following lines. # ---------------------------------------------------------------------------
if [ -f "$RMAN_LOG_FILE" ] then rm -f "$RMAN_LOG_FILE" fi
# ----------------------------------------------------------------- # Initialize the log file. # -----------------------------------------------------------------
echo >> $RMAN_LOG_FILE chmod 666 $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # Log the start of this script. # ---------------------------------------------------------------------------
echo Script $0 >> $RMAN_LOG_FILE echo ==== started on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # Replace /db/oracle/product/ora102, below, with the Oracle home path. # ---------------------------------------------------------------------------
ORACLE_HOME=/oracle/product/11.2.0/db11g export ORACLE_HOME
# --------------------------------------------------------------------------- # Replace ora102, below, with the Oracle SID of the target database. # ---------------------------------------------------------------------------
ORACLE_SID=test1 export ORACLE_SID
# --------------------------------------------------------------------------- # Replace ora102, below, with the Oracle DBA user id (account). # ---------------------------------------------------------------------------
ORACLE_USER=oracle
# --------------------------------------------------------------------------- # Set the target connect string. # Replace "sys/manager", below, with the target connect string. # ---------------------------------------------------------------------------
TARGET_CONNECT_STR=sys/manager
# --------------------------------------------------------------------------- # Set the Oracle Recovery Manager name. # ---------------------------------------------------------------------------
RMAN=$ORACLE_HOME/bin/rman
# --------------------------------------------------------------------------- # Print out the value of the variables set by this script. # ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE echo "RMAN: $RMAN" >> $RMAN_LOG_FILE echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # Print out the value of the variables set by bphdb. # ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE echo "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE echo "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE echo "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE echo "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE echo "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # NOTE: This script assumes that the database is properly opened. If desired, # this would be the place to verify that. # ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE # --------------------------------------------------------------------------- # If this script is executed from a NetBackup schedule, NetBackup # sets an NB_ORA environment variable based on the schedule type. # The NB_ORA variable is then used to dynamically set BACKUP_TYPE # For example, when: # schedule type is BACKUP_TYPE is # ---------------- -------------- # Automatic Full INCREMENTAL LEVEL=0 # Automatic Differential Incremental INCREMENTAL LEVEL=1 # Automatic Cumulative Incremental INCREMENTAL LEVEL=1 CUMULATIVE # # For user initiated backups, BACKUP_TYPE defaults to incremental # level 0 (full). To change the default for a user initiated # backup to incremental or incremental cumulative, uncomment # one of the following two lines. # BACKUP_TYPE="INCREMENTAL LEVEL=1" # BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE" # # Note that we use incremental level 0 to specify full backups. # That is because, although they are identical in content, only # the incremental level 0 backup can have incremental backups of # level > 0 applied to it. # ---------------------------------------------------------------------------
if [ "$NB_ORA_FULL" = "1" ] then echo "Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0"
elif [ "$NB_ORA_INCR" = "1" ] then echo "Differential incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1"
elif [ "$NB_ORA_CINC" = "1" ] then echo "Cumulative incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE"
elif [ "$BACKUP_TYPE" = "" ] then echo "Default - Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0" fi
# --------------------------------------------------------------------------- # Call Recovery Manager to initiate the backup. This example does not use a # Recovery Catalog. If you choose to use one, replace the option 'nocatalog' # from the rman command line below with the # 'catalog <userid>/<passwd>@<net service name>' statement. # # Note: Any environment variables needed at run time by RMAN # must be set and exported within the switch user (su) command. # --------------------------------------------------------------------------- # Backs up the whole database. This backup is part of the incremental # strategy (this means it can have incremental backups of levels > 0 # applied to it). # # We do not need to explicitly request the control file to be included # in this backup, as it is automatically included each time file 1 of # the system tablespace is backed up (the inference: as it is a whole # database backup, file 1 of the system tablespace will be backed up, # hence the controlfile will also be included automatically). # # Typically, a level 0 backup would be done at least once a week. # # The scenario assumes: # o you are backing your database up to two tape drives # o you want each backup set to include a maximum of 5 files # o you wish to include offline datafiles, and read-only tablespaces, # in the backup # o you want the backup to continue if any files are inaccessible. # o you are not using a Recovery Catalog # o you are explicitly backing up the control file. Since you are # specifying nocatalog, the controlfile backup that occurs # automatically as the result of backing up the system file is # not sufficient; it will not contain records for the backup that # is currently in progress. # o you want to archive the current log, back up all the # archive logs using two channels, putting a maximum of 20 logs # in a backup set, and deleting them once the backup is complete. # # Note that the format string is constructed to guarantee uniqueness and # to enhance NetBackup for Oracle backup and restore performance. # # # NOTE WHEN USING NET SERVICE NAME: When connecting to a database # using a net service name, you must use a send command or a parms operand to # specify environment variables. In other words, when accessing a database # through a listener, the environment variables set at the system level are not # visible when RMAN is running. For more information on the environment # variables, please refer to the NetBackup for Oracle Admin. Guide. # # ---------------------------------------------------------------------------
CMD_STR=" ORACLE_HOME=$ORACLE_HOME export ORACLE_HOME ORACLE_SID=$ORACLE_SID export ORACLE_SID $RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF RUN { ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE'; SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_db01_full'; SEND CHANNEL ch01 'NB_ORA_POLICY=oracle_db01_full'; BACKUP $BACKUP_TYPE SKIP INACCESSIBLE TAG hot_db_bk_level0 FILESPERSET 5 # recommended format FORMAT 'bk_%s_%p_%t' DATABASE; sql 'alter system archive log current'; RELEASE CHANNEL ch00; RELEASE CHANNEL ch01; # backup all archive logs #ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; #ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE'; #SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_db01_arch'; #SEND CHANNEL ch01 'NB_ORA_POLICY=oracle_db01_arch'; #BACKUP # filesperset 20 # FORMAT 'al_%s_%p_%t' # ARCHIVELOG ALL DELETE INPUT; #RELEASE CHANNEL ch00; #RELEASE CHANNEL ch01; # # Note: During the process of backing up the database, RMAN also backs up the # control file. This version of the control file does not contain the # information about the current backup because "nocatalog" has been specified. # To include the information about the current backup, the control file should # be backed up as the last step of the RMAN section. This step would not be # necessary if we were using a recovery catalog or auto control file backups. # ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_db01_full'; BACKUP # recommended format FORMAT 'cntrl_%s_%p_%t' CURRENT CONTROLFILE; RELEASE CHANNEL ch00; } EOF " # Initiate the command string
if [ "$CUSER" = "root" ] then su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? else /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? fi
# --------------------------------------------------------------------------- # Log the completion of this script. # ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ] then LOGMSG="ended successfully" else LOGMSG="ended in error" fi
echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE
exit $RSTAT [oracle@test1 /usr/openv/scripts]$ |
1.1.6 修改arch.sh脚本
修改如下位置(添加“#”为注释):
ORACLE_HOME=
ORACLE_SID=
ORACLE_USER=
#ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
#ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
#SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_jpxs-db01_full';
#SEND CHANNEL ch01 'NB_ORA_POLICY=oracle_jpxs-db01_full';
#BACKUP
# $BACKUP_TYPE
# SKIP INACCESSIBLE
# TAG hot_db_bk_level0
# FILESPERSET 5
# # recommended format
# FORMAT 'bk_%s_%p_%t'
# DATABASE;
# sql 'alter system archive log current';
SEND CHANNEL ch00 'NB_ORA_POLICY=
SEND CHANNEL ch01 'NB_ORA_POLICY=
ARCHIVELOG ALL DELETE INPUT SKIP INACCESSIBLE;
SEND CHANNEL ch00 'NB_ORA_POLICY=
[oracle@test1 /usr/openv/scripts]$ cat arch.sh #!/bin/sh # $Header: hot_database_backup.sh,v 1.3 2010/08/04 17:56:02 $ # #bcpyrght #*************************************************************************** #* $VRTScprght: Copyright 2014 Symantec Corporation, All Rights Reserved SY39-6648-5573-26-15-5 $ * #*************************************************************************** #ecpyrght # # --------------------------------------------------------------------------- # hot_database_backup.sh # --------------------------------------------------------------------------- # This script uses Recovery Manager to take a hot (inconsistent) database # backup. A hot backup is inconsistent because portions of the database are # being modified and written to the disk while the backup is progressing. # You must run your database in ARCHIVELOG mode to make hot backups. It is # assumed that this script will be executed by user root. In order for RMAN # to work properly we switch user (su -) to the oracle dba account before # execution. If this script runs under a user account that has Oracle dba # privilege, it will be executed using this user's account. # ---------------------------------------------------------------------------
# --------------------------------------------------------------------------- # Determine the user which is executing this script. # ---------------------------------------------------------------------------
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
# --------------------------------------------------------------------------- # Put output in <this file name>.out. Change as desired. # Note: output directory requires write permission. # ---------------------------------------------------------------------------
RMAN_LOG_FILE=${0}.out
# --------------------------------------------------------------------------- # You may want to delete the output file so that backup information does # not accumulate. If not, delete the following lines. # ---------------------------------------------------------------------------
if [ -f "$RMAN_LOG_FILE" ] then rm -f "$RMAN_LOG_FILE" fi
# ----------------------------------------------------------------- # Initialize the log file. # -----------------------------------------------------------------
echo >> $RMAN_LOG_FILE chmod 666 $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # Log the start of this script. # ---------------------------------------------------------------------------
echo Script $0 >> $RMAN_LOG_FILE echo ==== started on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # Replace /db/oracle/product/ora102, below, with the Oracle home path. # ---------------------------------------------------------------------------
ORACLE_HOME=/oracle/product/11.2.0/db11g export ORACLE_HOME
# --------------------------------------------------------------------------- # Replace ora102, below, with the Oracle SID of the target database. # ---------------------------------------------------------------------------
ORACLE_SID=test1 export ORACLE_SID
# --------------------------------------------------------------------------- # Replace ora102, below, with the Oracle DBA user id (account). # ---------------------------------------------------------------------------
ORACLE_USER=oracle
# --------------------------------------------------------------------------- # Set the target connect string. # Replace "sys/manager", below, with the target connect string. # ---------------------------------------------------------------------------
TARGET_CONNECT_STR=sys/manager
# --------------------------------------------------------------------------- # Set the Oracle Recovery Manager name. # ---------------------------------------------------------------------------
RMAN=$ORACLE_HOME/bin/rman
# --------------------------------------------------------------------------- # Print out the value of the variables set by this script. # ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE echo "RMAN: $RMAN" >> $RMAN_LOG_FILE echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # Print out the value of the variables set by bphdb. # ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE echo "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE echo "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE echo "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE echo "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE echo "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE
# --------------------------------------------------------------------------- # NOTE: This script assumes that the database is properly opened. If desired, # this would be the place to verify that. # ---------------------------------------------------------------------------
echo >> $RMAN_LOG_FILE # --------------------------------------------------------------------------- # If this script is executed from a NetBackup schedule, NetBackup # sets an NB_ORA environment variable based on the schedule type. # The NB_ORA variable is then used to dynamically set BACKUP_TYPE # For example, when: # schedule type is BACKUP_TYPE is # ---------------- -------------- # Automatic Full INCREMENTAL LEVEL=0 # Automatic Differential Incremental INCREMENTAL LEVEL=1 # Automatic Cumulative Incremental INCREMENTAL LEVEL=1 CUMULATIVE # # For user initiated backups, BACKUP_TYPE defaults to incremental # level 0 (full). To change the default for a user initiated # backup to incremental or incremental cumulative, uncomment # one of the following two lines. # BACKUP_TYPE="INCREMENTAL LEVEL=1" # BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE" # # Note that we use incremental level 0 to specify full backups. # That is because, although they are identical in content, only # the incremental level 0 backup can have incremental backups of # level > 0 applied to it. # ---------------------------------------------------------------------------
if [ "$NB_ORA_FULL" = "1" ] then echo "Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0"
elif [ "$NB_ORA_INCR" = "1" ] then echo "Differential incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1"
elif [ "$NB_ORA_CINC" = "1" ] then echo "Cumulative incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE"
elif [ "$BACKUP_TYPE" = "" ] then echo "Default - Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0" fi
# --------------------------------------------------------------------------- # Call Recovery Manager to initiate the backup. This example does not use a # Recovery Catalog. If you choose to use one, replace the option 'nocatalog' # from the rman command line below with the # 'catalog <userid>/<passwd>@<net service name>' statement. # # Note: Any environment variables needed at run time by RMAN # must be set and exported within the switch user (su) command. # --------------------------------------------------------------------------- # Backs up the whole database. This backup is part of the incremental # strategy (this means it can have incremental backups of levels > 0 # applied to it). # # We do not need to explicitly request the control file to be included # in this backup, as it is automatically included each time file 1 of # the system tablespace is backed up (the inference: as it is a whole # database backup, file 1 of the system tablespace will be backed up, # hence the controlfile will also be included automatically). # # Typically, a level 0 backup would be done at least once a week. # # The scenario assumes: # o you are backing your database up to two tape drives # o you want each backup set to include a maximum of 5 files # o you wish to include offline datafiles, and read-only tablespaces, # in the backup # o you want the backup to continue if any files are inaccessible. # o you are not using a Recovery Catalog # o you are explicitly backing up the control file. Since you are # specifying nocatalog, the controlfile backup that occurs # automatically as the result of backing up the system file is # not sufficient; it will not contain records for the backup that # is currently in progress. # o you want to archive the current log, back up all the # archive logs using two channels, putting a maximum of 20 logs # in a backup set, and deleting them once the backup is complete. # # Note that the format string is constructed to guarantee uniqueness and # to enhance NetBackup for Oracle backup and restore performance. # # # NOTE WHEN USING NET SERVICE NAME: When connecting to a database # using a net service name, you must use a send command or a parms operand to # specify environment variables. In other words, when accessing a database # through a listener, the environment variables set at the system level are not # visible when RMAN is running. For more information on the environment # variables, please refer to the NetBackup for Oracle Admin. Guide. # # ---------------------------------------------------------------------------
CMD_STR=" ORACLE_HOME=$ORACLE_HOME export ORACLE_HOME ORACLE_SID=$ORACLE_SID export ORACLE_SID $RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF RUN { #ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; #ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE'; #SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_db01_full'; #SEND CHANNEL ch01 'NB_ORA_POLICY=oracle_db01_full'; #BACKUP # $BACKUP_TYPE # SKIP INACCESSIBLE # TAG hot_db_bk_level0 # FILESPERSET 5 # # recommended format # FORMAT 'bk_%s_%p_%t' # DATABASE; # sql 'alter system archive log current'; #RELEASE CHANNEL ch00; #RELEASE CHANNEL ch01; # backup all archive logs ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE'; SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_db01_arch'; SEND CHANNEL ch01 'NB_ORA_POLICY=oracle_db01_arch'; BACKUP filesperset 20 FORMAT 'al_%s_%p_%t' ARCHIVELOG ALL DELETE INPUT SKIP INACCESSIBLE; RELEASE CHANNEL ch00; RELEASE CHANNEL ch01; # # Note: During the process of backing up the database, RMAN also backs up the # control file. This version of the control file does not contain the # information about the current backup because "nocatalog" has been specified. # To include the information about the current backup, the control file should # be backed up as the last step of the RMAN section. This step would not be # necessary if we were using a recovery catalog or auto control file backups. # ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; SEND CHANNEL ch00 'NB_ORA_POLICY=oracle_db01_arch'; BACKUP # recommended format FORMAT 'cntrl_%s_%p_%t' CURRENT CONTROLFILE; RELEASE CHANNEL ch00; } EOF " # Initiate the command string
if [ "$CUSER" = "root" ] then su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? else /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? fi
# --------------------------------------------------------------------------- # Log the completion of this script. # ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ] then LOGMSG="ended successfully" else LOGMSG="ended in error" fi
echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE
exit $RSTAT |
1.1.7 脚本权限和属主修改
[root@vspnod1 openv]# chmod –R 755 scripts/ [root@vspnod1 openv]# chown –R oracle:oinstall scripts/
|
1.1.8 数据文件备份策略配置
nbu-b:~ # bppllist oracle_db01_full -U ------------------------------------------------------------
Policy Name: oracle_db01_full
Policy Type: Oracle Active: yes Effective date: 2015-08-24 12:58:22 Block Incremental: no Mult. Data Streams: no Client Encrypt: no Checkpoint: no Policy Priority: 0 Max Jobs/Policy: Unlimited Disaster Recovery: 0 Collect BMR info: no Residence: stu_disk_nbu-b Volume Pool: NetBackup Server Group: *ANY* Keyword: (none specified) Data Classification: - Residence is Storage Lifecycle Policy: no Application Discovery: no Discovery Lifetime: 0 seconds ASC Application and attributes: (none defined)
Granular Restore Info: no Ignore Client Direct: no Enable Metadata Indexing: no Index server name: NULL Use Accelerator: no Client List Type: 0 Selection List Type: 0 Oracle Backup Data File Name Format: NULL Oracle Backup Archived Redo Log File Name Format: NULL Oracle Backup Control File Name Format: NULL Oracle Backup Fast Recovery Area File Name Format: NULL Oracle Backup Set ID: NULL Oracle Backup Data File Arguments: NULL Oracle Backup Archived Redo Log Arguments: NULL HW/OS/Client: Linux RedHat2.6.18 db01
Include: /usr/openv/scripts/hot_database_backup.sh
Schedule: full Type: Full Backup Frequency: every 1 day Excluded Dates---------- No specific exclude dates entered No exclude days of week entered PFI Recovery: 0 Maximum MPX: 1 Retention Level: 3 (1 month) Number Copies: 1 Fail on Error: 0 Residence: (specific storage unit not required) Volume Pool: (same as policy volume pool) Server Group: (same as specified for policy) Residence is Storage Lifecycle Policy: 0 Schedule indexing: 0 Daily Windows: 星期日 22:00:00 --> 星期一 05:00:00 星期一 22:00:00 --> 星期二 05:00:00 星期二 22:00:00 --> 星期三 05:00:00 星期三 22:00:00 --> 星期四 05:00:00 星期四 22:00:00 --> 星期五 05:00:00 星期五 22:00:00 --> 星期六 05:00:00 星期六 22:00:00 --> 星期日 05:00:00
Schedule: Default-Application-Backup Type: Application Backup Excluded Dates---------- No specific exclude dates entered No exclude days of week entered PFI Recovery: 0 Maximum MPX: 1 Retention Level: 3 (1 month) Number Copies: 1 Fail on Error: 0 Residence: (specific storage unit not required) Volume Pool: (same as policy volume pool) Server Group: (same as specified for policy) Residence is Storage Lifecycle Policy: 0 Schedule indexing: 0 Daily Windows: 星期日 00:00:00 --> 星期日 24:00:00 星期一 00:00:00 --> 星期一 24:00:00 星期二 00:00:00 --> 星期二 24:00:00 星期三 00:00:00 --> 星期三 24:00:00 星期四 00:00:00 --> 星期四 24:00:00 星期五 00:00:00 --> 星期五 24:00:00 星期六 00:00:00 --> 星期六 24:00:00
|
1.1.9 归档日志备份策略配置(略)
1.1.10 归档路径优化,避免备份报错
oracle集群优化 Archive destination ,防止出错:
[oracle@db04 ~]$sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sun May 5 14:24:15 2019 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination +ORA_DATA Oldest online log sequence 1 Next log sequence to archive 6 Current log sequence 6 rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Sun May 5 14:26:23 2019 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: NDMCDB (DBID=3222458319) RMAN> show all; using target database control file instead of recovery catalog .... CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/oracle/app/oracle/product/11.2.0/db_1/dbs/snapcf_DB2.f'; # default RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+ORA_DATA/snapcf_DB2.f';
1.1.11 数据文件、归档日志备份
nbu~:~ # bpdbjobs |grep oracle_db01_full |head 29778 Backup Done 0 oracle_db01_full Default-Application-Backup db01 2015-09-24 22:35:39 000:00:08 21024 25923 98.900002 29777 Backup Done 0 oracle_db01_full Default-Application-Backup db01 2015-09-24 22:35:16 000:00:07 288 265 99.300003 29776 Backup Done 0 oracle_db01_full Default-Application-Backup db01 2015-09-24 22:34:59 000:00:12 21024 16110 99.500000 29771 Backup Done 0 oracle_db01_full Default-Application-Backup db01 2015-09-24 22:18:10 000:16:39 30659104 31001 98.800003 29757 Backup Done 0 oracle_db01_full Default-Application-Backup db01 2015-09-24 22:00:12 000:17:51 13521696 12728 70.400002 29756 Backup Done 0 oracle_db01_full Default-Application-Backup db01 2015-09-24 22:00:11 000:35:08 48215840 22976 70.599998 29749 Backup Done 0 oracle_db01_full full db01 2015-09-24 22:00:00 000:35:57 |
nbu-:~ # bpdbjobs |grep oracle_db01_arch |head 30014 Backup Done 0 oracle_db01_arch Default-Application-Backup db01 2015-09-24 11:04:22 000:00:07 21024 37610 99.099998 30013 Backup Done 0 oracle_db01_arch Default-Application-Backup db01 2015-09-24 11:03:51 000:00:22 831776 68481 75.599998 30012 Backup Done 0 oracle_db01_arch Default-Application-Backup db01 2015-09-24 11:03:51 000:00:24 847904 55545 73.599998 30011 Backup Done 0 oracle_db01_arch full db01 2015-09-24 11:03:33 000:01:06 |
1. 进入rman
2. connect target /
3. crosscheck archivelog all;
4. delete expired archivelog all;
===========================
这2条命令做什么事情,原理是什么。下面说明一下:
在controlfile中记录着每一个archivelog的相关信息,当我们在OS下把这些物理文件delete掉或异常变动后,在controlfile中仍然记录着这些archivelog的信息,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要做手工的清除。
crosscheck archivelog all;的作用就是检查控制文件和实际物理文件的差别。
delete expired archivelog all;就是同步控制文件的信息和实际物理文件的信息。
如果单独执行crosscheck而没有执行delete那么备份还是失败的,原因是那些控制文件的信息和实际的信息还是不同。
crosscheck backupset
crosscheck backupset 是检查备份集和实际的文件
1 备份集有两种状态A(Available,RMAN认为该项存在于备份介质上)X(Expired,备份存在于控制文件或恢复目录中,但
是并没有物理存在于备份介质上)
2 crosscheck 的目的是检查RMAN 的目录以及物理文件,如果物理文件不存在于介质上,将标记为Expired。如果物理文件
存在,将维持Available。如果原先标记为Expired的备份集再次存在于备份介质上(如恢复了损坏的磁盘驱动器后),
crosscheck将把状态重新从Expired标记回Available。
3 crosscheck 输出分两部分。第一部分列出确定存在于备份介质上的所有备份集片,第二部分列出不存在于备份介质上的
备份集片,并将其标记为Expired。当设置备份保存策略后,一个备份过期,crosscheck之后标记为丢弃的备份状态依旧为
availabel,要删除丢弃备份delete obsolete
实例
Unix下 oracle数据库在迁移当中一个归档文件丢失了,rman备份归档日志时提示 某个归档日志找不到,
请问如何在不停止oracle数据库情况下 截断归档日志,重新开始新的归档!
crosscheck archivelog all
delete archivelog all;