Oracle数据库的备份
一、非归档模式下的冷备份和恢复
1、检查数据库是否为归档模式
命令:Archive log list
2、冷备份
数据库处于非归档模式只能做冷备份(脱机备份)
冷备份:指数据库关闭状态下所做的物理拷贝,做备份石将数据库关闭。中小型数据库运用广泛。
备份所必须的文件包括数据文件和控制文件
冷备份(脱机备份)步骤:
1、使用oracle的数据字典或命令找到所有需要备份的文件,具体方法如下
(1)使用v﹩controlfile找到所有的控制文件
(2)使用v﹩logfile 找到所有的重做日志文件
(3)使用dba_data_files找到所有的数据库文件,以及与表空间的对应关系
(4)使用v﹩tempfile和v﹩tablespace找到所有的临时文件,以及临时表空间的对应关系
(5)使用show parameter pfile 找到正文参数文件或二进制参数文件
2、正常关闭数据库(shutdown|immediate|transactional|normal)
3、将所有的文件复制到备份硬盘或磁带上
4、重新启动数据库(startup)
2、冷恢复(脱机恢复)
数据库运行在非归档模式下只能进行冷恢复
(1)关闭数据库
(2)将所有的备份数据文件和备份控制文件复制到数据库中原来位置
(3)也可以将所有的备份重做日志文件、参数文件和口令文件复制到数据库中原来位置(该操作不是必须的)
(4)重新启动数据库(startup)
二、数据库归档模式下的备份方式
oracle数据库默认为非归档模式
alter system archive log current 手动归档
alter system archive log start 设置自动归档
Show parameter log_archive_max_processes 查看启动多少个归档后台进程
Alter system set log_archive_max_processes=4;
1、数据库归档模式设置
(1)以sysdba身份登录数据库
(2)使用archive log list 命令查看数据库与归档相关信息
(3)正常关闭数据库,如使用shutdown immediate命令
(4)以加载方式启动数据库(startup mount)
(5)用alter database 命令将数据库设置为归档模式(alter database archivelog)
(6)打开数据库(alter database open)
(7)再用archive log list命令验证当前数据库与归档相关信息
(8)做数据库的全备份(备份所有的控制文件和数据文件),因为之前在非归档模式下的数据库备份已经不能使用了,这个新备份是归档模式下备份的起点。
2、联机备份
联机备份:数据库必须运行在归档模式,一般只需备份数据文件
联机备份步骤:
(1)使用数据字典dba_data_files找到需要备份的数据文件以及与之对应的表空间
(2)使用数据字典v﹩backup确认数据文件的备份状态
(3)用alter tablespace “表空间名” begin backup;命令将要备份的表空间设置为备份状态
(4)使用操作系统复制命令将该表空间所对应的所有数据文件复制到备份磁盘上
(5)用alter tablespace “表空间名” end backup;命令将已经备份成功表空间重新设置结束备份状态
(6)将当前的重做日志文件的信息写到归档日志文件中去
(7)再使用数据字典v$backup确认数据文件的备份状态
(8)使用操作系统命令或工具验证操作系统文件是否已生成
3、导出/导入(Export/Import)
利用Export将数据从数据库中提取出来,利用Import将提取出来的数据送回到Oracle数据库中。
1、 简单导出数据(Export)和导入数据(Import)
Oracle支持三种方式类型的输出:
(1)、表方式(T方式),将指定表的数据导出。
(2)、用户方式(U方式),将指定用户的所有对象及数据导出。
(3)、全库方式(Full方式),瘵数据库中的所有对象导出。
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。
2、 增量导出/导入
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
增量导出包括三种类型:
(1)、“完全”增量导出(Complete)
即备份三个数据库,比如:
exp system/manager inctype=complete file=040731.dmp
(2)、“增量型”增量导出
备份上一次备份后改变的数据,比如:
exp system/manager inctype=incremental file=040731.dmp
(3)、“累积型”增量导出
累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
比如数据库的被封任务可以做如下安排:
星期一:完全备份(A)
星期二:增量导出(B)
星期三:增量导出(C)
星期四:增量导出(D)
星期五:累计导出(E)
星期六:增量导出(F)
星期日:增量导出(G)
如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:
第一步:用命令CREATE DATABASE重新生成数据库结构;
第二步:创建一个足够大的附加回滚。
第三步:完全增量导入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累计增量导入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量导入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F
4、rman备份
–show parameter db_name;
–sqlplus以sysdba身份连接orcl
conn /@orcl as sysdba;–重启监听:lsnrctl stop/lsnrctl start
–1、开启归档模式(sqlplus工具,sys用户)
–查看闪回恢复区的信息。 show parameter db_recover
–增大闪回恢复区
alter system set db_recovery_file_dest_size=3G;
–修改归档日志的存放路径
alter system set log_archive_dest_1=‘location=/data/oracleArchive’;
–查看当前日志操作模式
SELECT log_mode from v d a t a b a s e ; − − 启 用 归 档 日 志 前 要 先 停 止 数 据 库 s h u t d o w n i m m e d i a t e ; − − 数 据 库 以 m o u n t 方 式 启 动 s t a r t u p m o u n t ; − − 启 用 数 据 库 归 档 a l t e r d a t a b a s e a r c h i v e l o g ; − − 打 开 数 据 库 a l t e r d a t a b a s e o p e n ; − − 查 看 归 档 日 志 信 息 a r c h i v e l o g l i s t ; − − 2 、 开 启 补 充 日 志 − − 查 看 当 前 数 据 库 中 补 充 日 志 状 态 s e l e c t S U P P L E M E N T A L L O G D A T A M I N m i n , S U P P L E M E N T A L L O G D A T A P K p k , S U P P L E M E N T A L L O G D A T A U I u i , S U P P L E M E N T A L L O G D A T A F K f k , S U P P L E M E N T A L L O G D A T A A L L ” a l l ” f r o m v database; –启用归档日志前要先停止数据库 shutdown immediate; –数据库以mount方式启动 startup mount; –启用数据库归档 alter database archivelog; –打开数据库 alter database open; –查看归档日志信息 archive log list; –2、开启补充日志 –查看当前数据库中补充日志状态 select SUPPLEMENTAL_LOG_DATA_MIN min, SUPPLEMENTAL_LOG_DATA_PK pk, SUPPLEMENTAL_LOG_DATA_UI ui, SUPPLEMENTAL_LOG_DATA_FK fk, SUPPLEMENTAL_LOG_DATA_ALL “all” from v database;−−启用归档日志前要先停止数据库shutdownimmediate;−−数据库以mount方式启动startupmount;−−启用数据库归档alterdatabasearchivelog;−−打开数据库alterdatabaseopen;−−查看归档日志信息archiveloglist;−−2、开启补充日志−−查看当前数据库中补充日志状态selectSUPPLEMENTALLOGDATAMINmin,SUPPLEMENTALLOGDATAPKpk,SUPPLEMENTALLOGDATAUIui,SUPPLEMENTALLOGDATAFKfk,SUPPLEMENTALLOGDATAALL“all“fromvdatabase;
–最小补充日志是最基本的一种数据库级补充日志,
–启用最小补充日志
alter database add supplemental log data ;
–关闭最小补充日志
–alter database drop supplemental log data ;
–主键补充日志
alter database add supplemental log data (primary key) columns ;
–唯一索引补充日志
alter database add supplemental log data (unique) columns ;
–外键补充日志
alter database add supplemental log data (foreign key) columns ;
–全体字段补充日志
alter database add supplemental log data (all) columns;
–3、数据库备份,方式为全库方式
–文件结构:
/data/oracleArchive
/data/rmanbak/rman_ts
/data/rmanbak/log
/data/oracleBackup
/data/oracleBackup/backup1
/data/oracleBackup/backup2
–a.开启归档模式
–b.创建恢复目录的表空间rman_ts(sys用户):
create tablespace rman_ts datafile ‘/data/rmanbak/rman_ts.dbf’ size 20G;
–c.创建rman用户并授权
create user rman identified by root default tablespace rman_ts temporary tablespace temp;
grant connect, recovery_catalog_owner, resource to rman;
–d.创建恢复目录
rman catalog rman/root target orcl
create catalog tablespace rman_ts
–e.注册目标数据库
register database;
–f.使用rman进行完全数据库备份:
–自动备份需要写脚本且定时执行,参见文件oracle_rman_backup.sh:
–g.使用rman进行恢复
–归档日志: run{
allocate channel dev1 type disk;
restore archivelog all;
release channel dev1;
}
–恢复数据库,需要将数据库mount或将数据文件offline
–rman target sys/root@orcl
–rman> shutdown immediate
–rman> startup mount
–RMAN> restore database; –恢复到某一备份
–RMAN> recover database; –从某一备份根据重做日志恢复到指定时间点
–RMAN> alter database open; run{
allocate channel dev1 type disk;
set until time “to_date(‘2018-09-21 14:45:50’,‘yyyy-mm-dd hh24:mi:ss’)”;–可以设置恢复到某一时间点
restore database;
recover database;
release channel dev1;
}
–select * from equ as of timestamp to_timestamp(‘2018-09-21 14:45:50’,‘yyyy-mm-dd hh24:mi:ss’);
–flashback table equ to timestamp(to_date(‘2018-09-26 14:45:50’,‘yyyy-mm-dd hh24:mi:ss’)); –根据闪回表恢复指定表的数据到指定时间点
oracle_rman_backup.sh
#在node1每晚进行全量备份,同时删除过期备份和归档日志文件
#!/bin/bash
ORACLE_SID=ORCL
ORACLE_HOME=/data/oracle/product/11.2.0/db_1
ORACLE_BASE=/data/oracle
export ORACLE_SID
export ORACLE_HOME
export ORACLE_BASE
backtime=date +%Y%m%d
echo b a c k t i m e backtime backtimeORACLE_HOME/bin/rman target sys/root@orcl log=/data/rmanbak/log/node1_backupall_KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 734: …ckup complete!”#̲当有多个节点进行备份时相互co…backtime.log oracle@OracleNode2:/oracle/rmanbak/log/exit
#RAC rman backup scripts
#每晚1点开始备份
##crontab -e
##0 1 * * * /data/rmanbak/oracle_rman_backup.sh >> /data/rmanbak/log/oracle_rman_backup.log