由于工作需要,最近要对几台Linux系统下的Oracle数据库进行Rman备份,就在操作的同时,整理了一下,方便今后作为资料进行查阅。
总结:Linux服务器下对Oracle数据库进行Rman步骤大致分为以下七个步骤:
一:确定备份存储的文位置,创建文件夹 mkdir /backup
二:建立备份脚本存储位置,创建文件夹 mkdir /u01/script/
三:创建备份脚本和脚本日志。授予oracle用户执行权限。
四:为了防止修改数据库参数导致数据库无法启动,创建spfile参数文件备份pfile; create pfile='/u01/initpfile.ora' from spfile;
五:修改数据库模式为归档模式。alter database archivelog;
六:修改数据库归档日志格式。alter system set log_archive_format='%t_%s_%r.arch' scope=spfile;
七:根据备份策略确定备份脚本执行时间,频率
举例说明:对某某服务器Rman备份
步骤一、二没有先后顺序:
1、[root@localhost ~]# su - oracle
2、[oracle@localhost ~]$ cd /u01 --------切换至u01目录下
3、[oracle@localhost u01]$ mkdir script --------在u01目录下新建script文件夹
4、[oracle@localhost u01]$ ll --------查看文件夹是否创建成功 总用量 8 drwxr-xr-x. 4 oracle oinstall 4096 8月 16 19:13 app drwxr-xr-x 2 oracle oinstall 4096 12月 31 14:34 script ---------成功
5、[oracle@localhost u01]$ chown oracle:oinstall script/ -------更改该文件夹的所有者(oracle)--此步骤特定情况不用重复指定
6、[oracle@localhost u01]$ chown -R oracle:oinstall /u01/ -------更改u01文件夹的所有者(oracle)--此步骤特定情况不用重复指定
7、[oracle@localhost u01]$ mkdir /backup ---------确定备份存储的文件位置
8、[oracle@localhost u01]$ chown oracle:oinstall /backup/ -------更改backup文件夹的所有者(oracle)--此步骤特定情况不用重复指定
9、[oracle@localhost u01]$ cd /
10、[oracle@localhost /]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/bin/
11、[oracle@localhost bin]$ chmod 6751 oracle --------修改Oracle可执行文件权限 ----一般情况不用要结合具体情况
步骤三(创建备份脚本和脚本日志,授予oracle用户执行权限):
1、将事先编辑好的文件,文件名为:backup_db_level_0.sh上传至u01/script目录下;
2、[oracle@localhost script] vi backup_db_level_0.sh
3、[oracle@localhost script] vi set_environment
步骤四(为了防止修改数据库参数导致数据库无法启动,创建spfile参数文件备份pfile):
1、SQL> shutdown immediate; --------关闭数据库
2、SQL> create pfile='/u01/initpfile.ora' from spfile;
步骤五(修改数据库模式为归档模式):
1、SQL> select open_mode,name,log_mode from v$database; -------查看数据库是归档还是非归档模式
OPEN_MODE NAME LOG_MODE -------------------- --------- ------------ READ WRITE ORCL NOARCHIVELOG
2、SQL> alter database archivelog; --------修改为归档模式
步骤六(修改数据库归档日志格式):
1、SQL> alter system set log_archive_format='%t_%s_%r.arch' scope=spfile;
2、SQL> startup --------启动数据库
步骤七(对数据库制定每周六晚上0点进行备份计划):
1、[oracle@localhost script]$ crontab -e -------对定时备份文件进行“编辑”
no crontab for oracle - using an empty one crontab: installing new crontab
2、[oracle@localhost script]$ crontab -l -------对定时备份文件进行“查看”
SHELL=/bin/bash PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/sbin:/bin:/usr/sbin:/usr/bin 0 0 * * 6 /u01/script/backup_db_level_0.sh
3、[oracle@localhost script]$ cat backup_db_level_0.sh -----一次显示整个文件
[oracle@E5CP22ZH01 script]$ cat backup_db_level_0.sh . /u01/app/tmp/script/set_environment cd /u01/app/tmp/script
rman TARGET / > Backup_DB_Level_0.log.`date +%Y%m%d-%H%M` << EOF CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/tmp/backup/';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/tmp/backup/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/tmp/backup/snapcf_db.f';
SHOW ALL;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
run {
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
BACKUP AS BACKUPSET ARCHIVELOG ALL
FORMAT="/u01/app/tmp/backup/db_arch_log_%I_%U";
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
ALLOCATE CHANNEL FOR MAINTENANCE TYPE DISK;
RELEASE CHANNEL;
run {
ALLOCATE CHANNEL c1 TYPE DISK;
ALLOCATE CHANNEL c2 TYPE DISK;
BACKUP AS BACKUPSET INCREMENTAL LEVEL 0 DATABASE
FORMAT="/u01/app/tmp/backup/db_db_level_0_%I_%U"
INCLUDE CURRENT CONTROLFILE
FILESPERSET=2;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
crosscheck backup;
crosscheck archivelog all;
report obsolete;
delete noprompt obsolete;
delete noprompt expired backup;
release channel;
EXIT EOF
--------说明---- crontab 文件中每个条目中各个域的意义和格式:
第一列 分钟: 1——59
第二列 小时: 1——23(0表示子夜)
第三列 日 : 1——31
第四列 月 : 1——12
第五列 星期: 星期0——6(0表示星期天,1表示星期一、以此类推)
第六列 要运行的命令