oracle备份之备份测试脚本的方法(冷备、热备、rman)

1、数据库环境

数据库DBID及打开模式

SQL> select dbid,open_mode from v$database;
DBID OPEN_MODE
---------- ----------
4106451204 READ WRITE

数据文件:

SQL> select file#,status,enabled,name from v$datafile;

FILE# STATUS ENABLED NAME
---------- ------- ---------- --------------------------------------------------------------------------------
1 SYSTEM READ WRITE /u01/app/oracle/oradata/ocmdb/dfile/system01.dbf
2 ONLINE READ WRITE /u01/app/oracle/oradata/ocmdb/undotbs01.dbf
3 ONLINE READ WRITE /u01/app/oracle/oradata/ocmdb/dfile/sysaux01.dbf
4 ONLINE READ WRITE /u01/app/oracle/oradata/ocmdb/dfile/tbs_1.dbf
5 ONLINE READ WRITE /u01/app/oracle/oradata/ocmdb/dfile/tbs3.dbf
6 ONLINE READ WRITE /u01/app/oracle/oradata/ocmdb/dfile/tbs_big01.dbf
7 ONLINE READ WRITE /u01/app/oracle/oradata/ocmdb/dfile/rman.dbf

控制文件:

SQL> select status,name from v$controlfile;

STATUS NAME
------- --------------------------------------------------------------------------------
/u01/app/oracle/ocmdb/cfile/ora_control1
/u01/app/oracle/ocmdb/cfile/ora_control2
/u01/app/oracle/ocmdb/cfile/control3

联机日志:

SQL> select group#,status,type,member from v$logfile;

GROUP# STATUS TYPE MEMBER
---------- ------- ------- --------------------------------------------------------------------------------
1 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo01.log
1 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo11.log
3 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo03.log
2 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo02.log
5 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo05.log
5 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo55.log
4 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo04.log
4 ONLINE /u01/app/oracle/oradata/ocmdb/lfile/redo44.log

2、数据库备份脚本

冷备份脚本

#rem script:coldbak.sh
#rem creater:chon
#rem date:2011
#rem desc:offline full backup database

#--connect database
sqlplus / as sysdba <<EOF
#--shutdown database
shutdown immediate;
#--Copy Data file
!cp /u01/app/oracle/oradata/ocmdb/dfile/*.dbf /backup
!cp /u01/app/oracle/oradata/ocmdb/undotbs01.dbf /backup
#--Copy Control file
!cp /u01/app/oracle/ocmdb/cfile/* /backup
#--Copy Log file
!cp /u01/app/oracle/oradata/ocmdb/lfile/*.log /backup
#--Copy archive log
!cp -R /u01/app/oracle/rmanbak/OCMDB/archivelog/* /backup
#--startup database
startup;

说明:
1、以上脚本在数据库关闭状态下备份数据库所有的数据文件,联机日志,控制文件,归档日志(在一个目录下),如果成功备份,所有文件是一致的。
2、没有备份参数文件,参数文件可以另外备份,没有必要每次都备份,只需要在改变设置后备份一次。
3、如果以上命令没有成功依次执行,那么备份将是无效的,如连接数据库不成功,那么肯定关闭数据库也不成功,那么备份则无效
4、冷备份建议下人工干预下执行。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

OS热备份
查看表空间和数据文件对应关系

SQL> select file_id,tablespace_name,file_name from dba_data_files;

FILE_ID TABLESPACE_NAME FILE_NAME
---------- ------------------------------ --------------------------------------------------------------------------------
7 RMAN_TS /u01/app/oracle/oradata/ocmdb/dfile/rman.dbf
6 BIG_TBS /u01/app/oracle/oradata/ocmdb/dfile/tbs_big01.dbf
5 TBS3 /u01/app/oracle/oradata/ocmdb/dfile/tbs3.dbf
4 TBS_1 /u01/app/oracle/oradata/ocmdb/dfile/tbs_1.dbf
3 SYSAUX /u01/app/oracle/oradata/ocmdb/dfile/sysaux01.dbf
2 UNDOTBS /u01/app/oracle/oradata/ocmdb/undotbs01.dbf
1 SYSTEM /u01/app/oracle/oradata/ocmdb/dfile/system01.dbf

数据库OS热全备份脚本

#rem script:hotbak.sh
#rem creater:chon
#rem date:2011
#rem desc:backup all database datafile in archive

#--connect database
sqlplus / as sysdba <<EOF

#--archive
alter system archive log current;

#--start hotbak
alter tablespace system begin backup;
!cp /u01/app/oracle/oradata/ocmdb/dfile/system01.dbf /backup
alter tablespace system end backup;

alter tablespace UNDOTBS begin backup;
!cp /u01/app/oracle/oradata/ocmdb/undotbs01.dbf /backup
alter tablespace UNDOTBS end backup;

alter tablespace SYSAUX begin backup;
!cp /u01/app/oracle/oradata/ocmdb/dfile/sysaux01.dbf /backup
alter tablespace SYSAUX end backup;

alter tablespace TBS_1 begin backup;
!cp /u01/app/oracle/oradata/ocmdb/dfile/tbs_1.dbf /backup
alter tablespace TBS_1 end backup;

alter tablespace TBS3 begin backup;
!cp /u01/app/oracle/oradata/ocmdb/dfile/tbs3.dbf /backup
alter tablespace TBS3 end backup;

alter tablespace BIG_TBS begin backup;
!cp /u01/app/oracle/oradata/ocmdb/dfile/tbs_big01.dbf /backup
alter tablespace BIG_TBS end backup;

alter tablespace RMAN_TS begin backup;
!cp /u01/app/oracle/oradata/ocmdb/dfile/rman.dbf /backup
alter tablespace RMAN_TS end backup;
#--end

#--bak control file
#--binary
alter database backup controlfile to '/backup/controlbinbak.000';
#--ascii
alter database backup controlfile to trace;

alter system archive log current;

说明:
1、热备份必须在数据库归档方式下才可以运行
2、以上脚本可以在数据库运行状态下备份数据库所有的数据文件(除了临时数据文件),没有必要备份联机日志。
3、归档日志至少需要一次完整备份之后的所有日志。
4、如果以上命令没有成功依次执行,那么备份也是无效的,如连接数据库不成功,那么备份则无效

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

RMAN备份脚本
--本地

创建文件夹

mkdir /home/oracle/backup
mkdir /home/oracle/backup/script
mkdir /home/oracle/backup/log
mkdir /home/oracle/backup/export

--备份目的地

mkdir /home/oracle/rman_backup

创建备份表空间

create tablespace rman_tbs datafile '/oradata/luke/rman_tbs01.dbf' size 1024M;

创建备份用户

create user rman identified by rman default tablespace rman_tbs temporary tablespace temp;
grant connect,resource ,recovery_catalog_owner to rman;

rman catalog rman/rman
create catalog tablespace rman_tbs;
connect target sys/lukewhx@luke
register database;
report schema;

configure retention policy to redundancy 2;
configure retention policy to recovery window of 7 days;

--倒出RMAN用户数据脚本exp_rman.par (即备份catalog库)
userid=rman/rman
file=/home/oracle/backup/export/rman.dmp
log=/home/oracle/backup/log/rman.log

-- 倒出RMAN数据SHELL脚本exp_rman.sh
#!/bin/bash
cd $HOME
. .bash_profile
cd $HOME/backup/script
exp parfile=exp_rman.par

-- 零级备份RMAN脚本level0_backup.rcv
connect catalog rman/rman
connect target sys/unumall@unu2
run {

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
allocate channel d1 type disk;
allocate channel d2 type disk;
backup incremental level 0 database format '/home/oracle/rman_backup/level0_%d_%s_%p_%u.bak'
tag='level 0' include current controlfile;
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/rman_backup/log_%d_%s_%p_%u.bak' delete all input;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;

--零级备份SHELL脚本的level0_backup.sh
#!/bin/bash
cd $HOME
. .bash_profile
cd $HOME/backup/script
rman cmdfile=level0_backup.rcv msglog=$HOME/backup/log/level0_backup.log
. /home/oracle/backup/script/exp_rman.sh

--一级差异增量备份RMAN脚本 level1_backup.rcv
connect catalog rman/rman
connect target sys/luke@luke
run {
allocate channel d1 type disk;
backup incremental level 1 format '/home/oracle/rman_backup/level1_%d_%s_%p_%u.bak' tag = 'level 1' database;
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/rman_backup/log_%d_%s_%p_%u.bak' delete all input;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;

--一级差异增量备份SHELL脚本level1_backup.sh

#!/bin/bash
cd $HOME
. .bash_profile
cd /home/oracle/backup/script
rman cmdfile=level1_backup.rcv msglog=$HOME/backup/log/level1.log
. /home/oracle/backup/script/exp_rman.sh

--二级差异增量备份RMAN脚本 level2_backup.rcv
connect catalog rman/rman
connect target sys/luke@luke
run {
allocate channel d1 type disk;
backup incremental level 2 format '/home/oracle/rman_backup/level2_%d_%s_%p_%u.bak' tag = 'level 2' database;
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/rman_backup/log_%d_%s_%p_%u.bak' delete all input;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;

--二级差异增量备份SHELL脚本level2_backup.sh

#!/bin/bash
cd $HOME
. .bash_profile
cd /home/oracle/backup/script
rman cmdfile=level2_backup.rcv msglog=$HOME/backup/log/level2.log
. /home/oracle/backup/script/exp_rman.sh

提高 RMAN增量备份性能

alter database enable block change tracking using file
'/u01/app/oracle/admin/devdb/bdump/luke.log';

desc v$block_change_tracking;

linux下定时执行备份脚本

crontab -e -u oracle
SHELL=/bin/bash --以下脚本在bash下执行
MAILTO=oracle --执行日志以邮件形式邮给oracle用户,可以/var/spool/mail/oracle下查收
10 1 * * 0 /home/oracle/backup/script/level0_backup.sh
10 1 * * 1 /home/oracle/backup/script/level2_backup.sh
10 1 * * 2 /home/oracle/backup/script/level2_backup.sh
10 1 * * 3 /home/oracle/backup/script/level1_backup.sh
10 1 * * 4 /home/oracle/backup/script/level2_backup.sh
10 1 * * 5 /home/oracle/backup/script/level2_backup.sh
10 1 * * 6 /home/oracle/backup/script/level2_backup.sh

一周差异备份策略:
备份目标库和catalog库
周日0级全备,周一周二为2级,周三为1级,周四周五周六为2级。
每天凌晨1点10分开始备份

零级备份

backup incremental level 0 database;

一级差异增量 差异增量是默认增量备份方式

backup incremental level 1 database;

一级累计增量

backup incremental level 1 cumulative database;

总结

到此这篇关于oracle备份之备份测试脚本的方法(冷备、热备、rman)的文章就介绍到这了,更多相关oracle备份测试脚本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python读写及备份oracle数据库操作示例

    本文实例讲述了Python读写及备份oracle数据库操作.分享给大家供大家参考,具体如下: 最近项目中需要用到Python调用oracle实现读写操作,踩过很多坑,历尽艰辛终于实现了.性能怎样先不说,有方法后面再调优嘛.现在把代码和注意点记录一下. 1. 所需Python工具库 cx_Oracle,pandas,可以使用通过控制台使用pip进行安装(电脑中已经安装) 2. 实现查询操作 #工具库导入 import pandas as pd import cx_Oracle # 注:设置环境编码

  • Windows系统下Oracle数据库每天自动备份

    linux和unix下面使用shell可以很方便实现,如果windows环境下可以结合计划任务实现 1.创建备份目录d:\backup, 创建批处理命令Bak.bat,编写备份脚本 exp user/passwd@orcl DIRECT=Y BUFFER=100000 FILE=D:\backup\scdd%date:~0,10% OWNER=('scdd') LOG=D:\backup\data.log forfiles /p "D:\backup" /s /m *.dmp /d -

  • Oracle自动备份及自动备份步骤

    数据是应用的核心部分,程序坏了换台机器重新发布就可以,但数据一旦丢失,造成的损失将不可挽回,程序发布到生产后,数据的备份便显得尤为重要,由于不一定所有的服务均有资金完成高级的备份如RAC和DG,在我们只有一台数据库服务器的,暂时采取最简单的备份策略,export出dmp进行保存. 一.备份脚本 1.初始化变量,记录开始日志 #变量 sysname=填写自己的系统名称 syspath=/home/oracle/databak/$sysname v_date=$(date '+%Y%m%d%H%M%

  • PL/SQL远程备份和恢复Oracle数据库

    在客户端远程备份的文件保存在数据库所在主机上,不会直接拷贝到客户端. ------------------------------------------ 首先无论你的Oracle服务器是Linux还是windows操作系统,Oracle的备份和恢复操作都是使用DBMS_DUMP来实现导入(备份)和导出(恢复).首先你要安装好PL/SQL,用PL/SQL来执行我下面提供的JOB就可以实现了.  一.Oracle的导出(备份) 1.用PLSQL连接Oracle数据库服务器,使用你需要导出的用户连接

  • Linux 自动备份oracle数据库详解

    Linux 自动备份oracle数据: 曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然说oracle可以有方法还原,但并不是彻底的. 所以,在工作中,不管是开发还是维护,备份数据库是非常有必要. 简单实用的晚间自动备份数据库小案例 步骤一.创建备份脚本,暂且命名为orabak.sh #路径名,指定备份的路径 FILEPATH = /oracle/orabak #根据指定日期格式,定义备份数据库文件名 FILENAME = `date + %

  • mysql数据库和oracle数据库之间互相导入备份

    把从Oracle数据库导出的数据导入到MySql数据库中 1. 使用默认的结束符号导入到MySql数据库中: LOAD DATA LOCAL INFILE 'd:/oracle.txt' IGNORE INTO TABLE alarmLog 此时Fields的结束符默认的就是'/t'制表符,而不是"/t"字符串. 2. 当设定Fields结束符导入到MySql数据库中: LOAD DATA LOCAL INFILE 'd:/oraclea.txt' IGNORE INTO TABLE

  • Oracle数据库自动备份脚本分享(超实用)

    前言 众所周知数据是应用的核心部分,程序坏了换台机器重新发布就可以,但数据一旦丢失,造成的损失将不可挽回,程序发布到生产后,数据的备份便显得尤为重要,由于不一定所有的服务均有资金完成高级的备份如RAC和DG,在我们只有一台数据库服务器的,暂时采取最简单的备份策略,export出dmp进行保存. 一.备份脚本 1.初始化变量,记录开始日志 #变量 sysname=填写自己的系统名称 syspath=/home/oracle/databak/$sysname v_date=$(date '+%Y%m

  • oracle备份之备份测试脚本的方法(冷备、热备、rman)

    1.数据库环境 数据库DBID及打开模式 SQL> select dbid,open_mode from v$database; DBID OPEN_MODE ---------- ---------- 4106451204 READ WRITE 数据文件: SQL> select file#,status,enabled,name from v$datafile; FILE# STATUS ENABLED NAME ---------- ------- ---------- --------

  • linux 服务器自动备份脚本的方法(mysql、附件备份)

    一.创建backup.sh脚本文件 #!/bin/sh SOURCE_FOLDER=/data DB_FOLDER=/data/db BACKUP_FOLDER=/data/backup TM=`date +%Y%m%d%H%M%S` echo start to dump mysql database and backup files at $TM # delete old sql backup files cd $DB_FOLDER rm -rf $DB_FOLDER/*.sql #dump

  • Oracle 批处理自动备份bat脚本语句的步骤详解

    开门见山 1.备份的语句能执行 2.创建一个检单bat脚本能执行 3.把备份的语句放到bat 脚本里面 示例 @echo off echo 正在备份 Oracle 数据库,请稍等-- set expname=%date:~0,4%%date:~5,2%%date:~8,2% expdp 用户名/密码@orcl schemas=导出的用户 directory=备份的文件夹 dumpfile=%expname%.dmp logfile=%expname%.log 步骤 1.备份语句 确保导出的语句能

  • MySQL备份时排除指定数据库的方法

    使用mysqldump命令备份时候,--all-databases 可以备份所有的数据库. 使用ignore-table 还可以排除制定的表.但是,mysqldump没有参数可以排除数据库的. 要备份的数据库少的时候,可以通过mysqldump -uroot -p123456 --databases db1 db2 db3 > mysqldump.sql 这样来备份. 但是假如数据库有数十个的话,这样写起来很累人,也很low.解决办法还是有的,看下面: [下面演示用的mysql用户名的root,

  • Linux下Oracle设置定时任务备份数据库的教程

    1.查看数据库的字符集 数据库的字符集必须和Linux下设置的环境变量一致,不然会有乱码. 以下两个sql语句都可以查到: select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'; select * from v$nls_parameters where parameter='NLS_CHARACTERSET'; 查询结果为:NLS_CHARACTERSET AL32UTF8 2. 用oracle用

  • 有关Oracle数据库的备份情况

    正在看的ORACLE教程是:有关Oracle数据库的备份情况. 一.意义:当我们使用一个数据库时,总希望数据库的内容是可靠的.正确的,但由于计算机系统的故障(硬件故障.网络故障.进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失.因此当发生上述故障后,希望能重新建立一个完整的数据库,该处理称为数据库恢复.恢复子系统是数据库管理系统的一个重要组成部分.恢复处理随所发生的故障类型所影响的结构而变化.二.备份的方法ORACLE数据库有三种标

  • Oracle数据库的备份及恢复策略研究

    正在看的ORACLE教程是:Oracle数据库的备份及恢复策略研究. 摘 要 恢复丢失的数据库文件在很大程度上取决于所采用的备份策略.本文从恢复的灵活性出发,对Oracle8数据库的备份及恢复策略进行了探讨,并给出了Windows 2000环境下使备份过程自动化的脚本文件的项目开发实例. 关键词 Oracle 数据库 备份 恢复 引言 随着信息系统在各种商务活动中重要性的不断增强,维护系统数据的可用性已成为当前一个十分重要的课题.为了有效地保持健康的信息系统,必须采取一定的措施防止在由介质.操作

  • Oracle数据库逻辑备份的SH文件

    正在看的ORACLE教程是:Oracle数据库逻辑备份的SH文件.完全备份的SH文件:exp_comp.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" 累计备份的SH文件:exp_cumu.sh rq=` date +"%m%d" ` su - oracle -

  • 两个备份数据库的shell脚本

    备份数据库的shell脚本一 复制代码 代码如下: #!/bin/bash#指定运行的脚本shell#运行脚本要给用户执行权限bakdir=/backupmonth=`date +%m`day=`date +%d`year=`date +%Y`hour=`date +%k`min=`date +%M`dirname=$year-$month-$day-$hour-$minmkdir $bakdir/$dirnamemkdir $bakdir/$dirname/confmkdir $bakdir/

  • Oracle数据库表备份导入导出dmp的方式及踩坑记录

    目录 一.备份导出前的注意事项 二.导出的两种方式 2.1.使用exp导出 2.2.使用数据泵expdp导出 三.在备份时遇到的坑 附:Oracle导出指定用户下dmp文件 总结 一.备份导出前的注意事项 1.导出导出的时候需要注意数据库的字符集是否一致,使用工具导入的话也需要确认工具的字符集 --查询服务端的编码命令 SELECT * FROM Nls_Database_Parameters where parameter = 'NLS_CHARACTERSET'; --查询客户端软件的编码命

随机推荐