目录
1.概述
RMAN(Recovery Manager)恢复管理器:
Oracle专用的备份恢复工具,
用于备份(backup),恢复(recover),还原(restore)的工具.
第三方备份软件:
赛门铁克
NBU
TSM
底层都是调用RMAN的脚本进行备份
为什么需要进行备份?
备份与恢复的主要目的就是当数据库的数据丢失时,进行恢复数据.
备份类型:
跨机房备份
跨地区备份
异机备份
数据库的故障类型:
1)介质故障
硬件损坏
2)用户错误
应用程序逻辑错误或者手动错误导致数据库的数据更改错误.
3)应用程序错误
软件故障损坏数据块
备份的方式:
物理备份
rman
任意时间点,故障点,scn,日志序列号的恢复
两种模式
archivelog模式:归档模式
支持脱机备份(冷备)和联机备份(热备)
noarchivelog模式:非归档模式
只支持脱机备份(冷备)
逻辑备份
导入导出工具:exp-imp
数据泵工具:expdp-impdp
无法进行任意时间点恢复
2.重要概念
spfile参数文件:
参数文件的一种,spfile和pfile,
包含一系列参数以及参数对应值的操作系统文件,
在数据库实例启动时候加载的,
决定了数据库的物理 结构、内存、数据库的限制及系统大量的默认值、数据库的各种物理属性、指定数据库控制文件名和路径等信息,
是进行数据库设计和性能调优的重要文件.
pfile初始化参数文件:
Oracle9i之前,一致采用pfile方式储存初始化参数
默认名称:init+实例名.ora
文件路径:$ORACLE_HOME/product/12.1.0/dbhome_1/dbs
文本文件,可编辑
查看目录位置:
方式一:
SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='pfile';
方拾二:
SQL>Show parameter pfile;
spfile服务器参数文件:
Oracle9i开始引入spfile
默认名称:spfile+实例名.ora
文件路径:$ORACLE_HOME/product/12.1.0/dbhome_1/dbs
二进制文本,不能直接编辑,只能通过SQL命令在线修改
查看目录位置:
方式一:
SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';
方拾二:
SQL>Show parameter spfile;
使用pfile/spfile启动数据库
startup启动次序spfile优先于pfile
查找文件的顺序是;spfileSID.ora > spfile.ora > initSID.ora > init.ora
指定pfile或者spfile启动数据库
startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';
startup spfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora';
控制文件
数据库的一个二进制文件;
主要记录当前数据库结构信息,同时包含数据文件及日志文件信息以及相关的状态,归档信息;
一个控制文件只能属于一个数据库;
控制文件丢失,数据库无法操作;
控制文件中包含的内容
数据库的名字、ID、创建的时间戳
表空间的名字
联机日志文件、数据文件的位置、个数、名字
联机日志的Sequence号码
检查点的信息
撤销段的开始或结束
归档信息
备份信息
使用相关视图来查看
select * from V$CONTROLFILE --列出实例中所有控制文件的名字及状态信息
select * from V$PARAMETER where name='control_file' --列出所有参数的位置及状态信息
select * from V$CONTROLFILE_RECORD_SECTION --列出控制文件中记录的部分信息
SHOW PARAMETER CONTROL_FILES --列出控制文件的名字、状态、位置等
控制文件多路复用
概念:
为了提高数据库的安全性,至少要为数据库建立两个控制文件,分别存放在不同的磁盘中,
这样可以避免某个磁盘故障无法启动数据库的危险.
修改:
alter system set control_files='$ORACLE_HOME/oradata/orcl/control01.ctl','$ORACLE_HOME/oradata/orcl/control02.ctl' scope=spfile;
添加新的控制文件时
先关闭数据库
复制已有的控制文件到新的控制文件目录下
修改复制过来的控制文件名称
所有的控制文件丢失或者损坏时,创建控制文件
备份数据文件和重做日志文件
select * from v$logfile;
select * from v$datafile;
cp备份
将数据库启动到nomount状态
手动创建控制文件
SQL>create controlfile
reuse database "orcl"
logfile
group 1 '/usr/oracle/app/oradata/orcl/redo01.log',
group 2 '/usr/oracle/app/oradata/orcl/redo02.log',
group 3 '/usr/oracle/app/oradata/orcl/redo03.log'
datafile
'/usr/oracle/app/oradata/orcl/system01.dbf',
'/usr/oracle/app/oradata/orcl/sysaux01.dbf',
'/usr/oracle/app/oradata/orcl/undotbs01.dbf',
'/usr/oracle/app/oradata/orcl/users01.dbf',
'/usr/oracle/app/oradata/orcl/CTRR_DATA.dbf'
maxlogfiles 50
maxlogmembers 4
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;
日志文件
记录数据库的更新(增,删,改)记录
归档日志文件
redo日志文件
在线redo
Oracle以SQL脚本的形式实时记录数据库的数据更新
归档redo
满足条件时,Oracle将在线重做日志以文件形式保存到磁盘(持久化)
使用相关视图来查看
V$LOG
V$LOGFILE
备份集
逻辑概念,一次备份所有备份片的集合
默认情况下一个备份集由一个备份片组成
备份集可包含多个备份片
通过设置备份片大小控制备份集中备份片的个数
备份片
一个一个的备份文件
设置备份片大小
RMAN>configure channel device type disk maxpiecesize 200m;
联机备份/热备:
数据库open状态下进行备份,不影响数据库使用
备份方式
归档模式下使用rman备份方式
脱机备份/冷备:
数据库shutdown状态下进行备份
备份方式
cp方式
数据文件(v&datafile)
控制文件(v$controlfile)
参数文件(show parameter spfile)
redo日志文件(v$logfile)
临时文件(v$tempfile)
冷备RMAN方式
一致性备份
当数据库处于一致性状态的时候备份就是一致性备份
数据库一致性状态就是关闭状态
shutdown immediate #干净关闭数据库,属于一致性状态
shutdown normal/transactional/abort #不是一致性状态
脱机备份(冷备份)属于一致性备份
非一致性备份
当数据库处于非一致性状态的备份就是非一致性备份
数据库非一致性状态
实例失败
shutdown abort
数据库打开的时候
联机备份(热备份)属于非一致性备份
归档文件
//TODO
3.开启/关闭归档
查看当前是否开启归档
方式一:
SQL>archive log list;
方式二:
select log_mode from v$database;
查看归档进程状态:
select * from v$archive_processes;
设置归档相关参数
查看参数值
show parameter 参数名
如:show parameter log_archive_format;
归档文件位置(log_archive_dest)
alter system set log_archive_dest='目录' scope=spfile;
归档文件名的格式(log_archive_format)
alter system set log_archive_format='%t_%s_%r.arch' scope=spfile;
%t:线程号
%s:日志序列号
%r:resetlogs id
%d:database id
开启归档模式
sqlplus / as sysdba #登录数据库
shutdown immediate #干净的关闭数据库
startup mount #启动到mount状态
alter database archivlog; #打开归档
alter databse open; #打开数据库
关闭归档模式
sqlplus / as sysdba #登录数据库
shutdown immediate #干净的关闭数据库
startup mount #启动到mount状态
alter database noarchivlog; #关闭归档
alter databse open; #打开数据库
注意:
非归档模式下备份数据库时,需要
关闭数据库
SQL>shutdown immediate;
启动到mount状态
SQL>startup mount;
进行备份
4.使用RMAN
连接到RMAN
rman target / #系统权限
rman target / as sysdba #系统权限
rman target username/password@ip:port/sid #普通用户权限
rman target username/password@ip:port/sid as sysdba #系统权限
rman target / nocatalog #不使用恢复目录
rman target / catalog rco/rco@ip:port/sid #使用恢复目录
RMAN配置
RMAN>show all; #查看所有配置
RMAN>show retention policy; #查看保留策略
RMAN>show default device type; #查看设备类型
SQL>select * from v$rman_configuration; #查看修改过的rman参数
RMAN>configure default device type to 'SBT_TAPE'; #修改默认的设备类型为磁带
RMAN>configure default device type clear; #清除设备类型配置
#配置冗余策略
RMAN>configure retention policy to pedundancy 2;
RMAN>configure retention policy clear; #清除冗余配置
#配置默认的备份类型(备份集|映像副本)
RMAN>configure device type disk backup type to copy; #映像副本
RMAN>configure deivice type disk backup type to compressed backupset; #压缩备份集
RMAN>configure device type disk backup type clear; #清除备份类型设置
#配置通道channel
默认情况下,RMAN为所有操作分配一个磁盘通道
RMAN>configure channel device type disk format '/u01/backup/db_%U';
RMAN>configure channel device type disk format '+dg1';
#配置并行
RMAN>configure device type disk backup type tocompressed backupset parallelism 2;
#配置优化
RMAN>configure backup optimization on;
#配置控制文件自动备份位置
RMAN>configure controlfile autobackup format for device type disk to '/u01/backup/ctl_%F';
#配置备份集最大大小
RMAN>configure maxsetsize to 500m;
#配置备份片最大大小
RMAN>configure channel device type disk maxpiecesize 500m;
#配置双工备份集,一次备份两个备份集
RMAN>configure datafile backup copies for device type disk to 2;
#备份整个数据库时排除部分表空间
RMAN>configure exclude for tablespace system;
#配置压缩
RMAN支持的备份集的预压缩处理和二进制压缩
预压缩块处理
通过合并每个数据块中的空闲时间并将空闲空间设置为二进制0来实现更好的备份压缩
optimize for load true
支持的压缩级别
默认压缩算法
高级压缩选型
#启用压缩
RMAN>configure device type disk backup type to compressed backupset;
#配置压缩级别
RMAN>configure compression algorithm 'BASIC|HIGH|MEDIUM|LOW'
#配置备份集加密
1.口令加密模式
查看加密算法
SQL>select * from v$rman_encryption_algorithms;
默认是AES128
AES192,AES256
对称加密算法
RMAN加密是CPU密集型操作,可能会对备份的性能有要求
设置加密
RMAN>set encryption on identified by 'oracle' only;
设置解密
RMAN>set decryption on identified by 'oracle';
2.透明加密模式(wallet钱包)
查看秘钥存放位置
SQL>select * from v$encryption_wallet
创建wallet目录
设置秘钥
SQL>alter system set encryption key identified by 'oracle';
关闭钱包
SQL>alter syste set wallet close identified by 'oracle';
打开钱包
SQL>alter syste set wallet open identified by 'oracle';
配置rman备份允许加密
RMAN>configure encryption for database on;
3.混合模式
配置混合模式
RMAN>set encryption on identified by 'oracle';
打开RMAN加密
RMAN>configure encryption for database on;
打开钱包
SQL>alter syste set wallet open identified by 'oracle';
执行备份表空间
删除备份表空间
进行恢复
两种解密方式
设置解密
RMAN>set decryption on identified by 'oracle';
打开钱包
SQL>alter syste set wallet open identified by 'oracle';
%U:默认的文件命令模式,生成的文件名具有唯一性
%a:Oracle数据库的activation ID即RESETLOG_ID。
%c:备份片段的复制数(从1开始编号,最大不超过256)。
%d:Oracle数据库名称。
%e:归档序号。
%F:基于"DBID+时间"确定的唯一名称,格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库
的DBID,YYYYMMDD为日期,QQ是一个1~256的序列。
%h:归档日志线程号。
%I:Oracle数据库的DBID。
%M:当前时间中的月,格式为MM。
%N:表空间名称。
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8。比如数据库名JSSBOOK,则生成的名
称则是JSSBOOKx。
%p:备份集中备份片段的编号,从1开始。
%s:备份集号。
%t:备份集时间戳。
%T:当前时间的年月日格式(YYYYMMDD)。
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名
称。
%Y:当前时间中的年,格式为YYYY。
%U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是
最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示:
生成备份片段时,%U=%u_%p_%c;
生成数据文件镜像复制时,%U=data-D-%d_id-%I_TS-%N_FNO-%f_%u;
生成归档文件镜像复制时,%U=arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u;
生成控制文件镜像复制时,%U=cf-D_%d-id-%I_%u。
注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名。
备份
RMAN>backup database; #备份数据文件
RMAN>backup database plus archivelog; #备份数据文件+归档文件
RMAN>backup spfile; #备份参数文件
RMAN>backup current controlfile; #备份控制文件
RMAN>backup device type disk database; #备份时指定设备类型
RMAN>backup database noexclude; #备份数据库,不使用配置排除表空间的设置
#spfile和controlfile的自动备份
#开启自动备份
RMAN>configure controlfile auto backup on;
#关闭自动备份
RMAN>configure controlfile autobackup off;
#设置自动备份位置
RMAN>configure controlfile autobackup format for device type disk to '/u01/backup/ctl_%F';
#备份归档日志
RMAN>backup archivelog all;
RMAN>backup archivelog all delete all input; #备份归档文件并删除归档
SQL>alter system switch logfile; #归档当前日志文件
#备份映像副本
RMAN>backup as copy database;
RMAN>backup as copy datafile 4; #备份某个数据文件的映像副本
RMAN>backup as copy datafile 4 fromat '/u01/backup/user01.copy'; #指定备份目录
查看备份:
RMAN>list backup; #查看备份文件列表
RMAN>list backupset; #查看备份集列表
RMAN>list copy; #查看映像副本
RMAN>list backup of datafile 1; #列出包含1号数据文件的备份集
RMAN>list backup of tablespace users; #列出包含users表空间的备份集
RMAN>list copy of datafile 1; #列出包含1号数据文件的映像副本
RMAN>list backupset 8; #列出8号备份集
RMAN>list backupset tag 'TAG20180419T213849';
RMAN>list archivelog all; #列出所有的归档日志
RMAN>list backup by file;
RMAN>list backupset summary; #查看备份集状态,检查之后查看
RMAN>list backup of database;
report命令
RMAN>report schema; #查看构成数据库组成的文件
RMAN>report need backup; #报告需要备份的文件
RMAN>report unrecoverable; #列出不能恢复的文件
RMAN>report need backup days 3; #列出三天未备份的文件
RMAN>report obsolete; #报告过期的备份
检查备份集
crosscheck backupset; #检查备份集是否可用
删除备份
RMAN>delete backupset/backup; #删除所有备份集
RMAN>delete expired backupset; #删除过期的备份集,检查之后有效
RMAN>delete expired; #不删除任何文件,只更新储存库
RMAN>delete obsolete; #删除过期的备份
RMAN>delete noprompt backupset; #不提示直接删除,一般用于脚本中
RMAN>delete archivelog all; #删除归档日志
注册备份集和归档日志
注册备份集
注册单个备份片
catalog backuppiece '备份片文件'
注册整个目录
catalog start with '备份集目录'
注册归档日志
注册单个归档日志文件
alter database register physical logfile '归档日志文件';
注册整个目录
catalog start with '归档日志文件目录';
验证数据库
方式一:validate
RMAN>validate database; #验证整个数据库
RMAN>validate tablespace users; #验证某个表空间
RMAN>validate datafile 1; #验证某个数据文件
RMAN>validate archivelog all; #验证归档日志
RMAN>validate datafile 1 block 10; #验证数据文件的单个数据块
RMAN>validate backupset 28; #验证备份集
方式二:backup validate ... #不产生任何备份
RMAN>backup validate database;
RMAN>backup validate check logical database;
RMAN>backup validate archivelog all;
RMAN>backup validate database archivelog all;
方式三:restore ... validate
RMAN>restore database validate; #验证数据库是否能够进行恢复
方式四:使用Oracle自带命令
dbv file=数据文件; #验证数据文件是否损坏
关于校验和损坏块
db_lock_checksum=typical
用于控制数据库中数据文件和redo文件中块的检验和写入
数据库在正常操作期间为每一个块计算校验和,将其写入磁盘之前储存在块的头部.
当数据库从磁盘中读取块的时候,会重新计算校验和,与之前存储的校验和进行比较,如果不匹配就代表已经损坏.
物理和逻辑块损坏
物理块损坏
数据库根本无法识别该块
逻辑块损坏
块的内容在逻辑上不一致
例如:
行片损坏
索引条目损坏
默认情况下
RMAN不检查逻辑块
需要检查逻辑块时:
RMAN>validate check logical database;
数据库恢复
恢复的前提
1.归档模式下
2.存在RMAN备份
恢复到故障点
情形说明
数据文件:丢失
控制文件:不考虑
redo日志文件:不考虑
参数文件:不考虑
临时文件::不考虑,rman不备份临时文件
进行一次备份,模拟发生故障(删除数据文件),进行恢复
rm 删除数据文件
关闭数据库
SQL>shutdown abort;
启动数据库
spfile->mount(寻找控制文件,controlfile)-->open(寻找数据文件)
查看数据库状态
SQL>select status from v$instance;
恢复
置于mount状态
SQL>startup mount;
恢复文件restore
RMAN>restore database;(删除了所有文件)
RMAN>restore datafile 1;(删除了指定号文件)
RMAN>restore datafile '指定文件路径'
介质恢复recover,应用归档日志,redo日志
RMAN>recover databse;
RMAN>recover datafile 1;
打开数据库
SQL>alter database open;
补充说明:
恢复数据库到指定目录
RMAN>run{
set newname for datafile 1 to '指定恢复路径';
set newname for datafile 2 to '指定恢复路径';
set newname for datafile 3 to '指定恢复路径';
set newname for datafile 4 to '指定恢复路径';
restore database;
switch datafile all;
recover database;
sql 'alter database open';
}
恢复到指定时间
情形说明
进行一次备份
创建表,添加数据
删除表或删除数据
恢复到删除之前的状态
SQL>shutdown immediate;
SQL>startup mount;
RMAN>run{
set until time "to_date('2019-04-26 13:00:00','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
}
DataRecoveryAdvisor恢复数据库
恢复指导,是一款oracle数据库工具,自动故障诊断,提供适当的恢复建议,修复.
1.备份数据库
RMAN>backup database;
2.删除文件
rm 数据文件
3.关闭数据库
SQL>shutdown abort;
4.启动数据库到mount状态
SQL>startup mount;
5.查看错误信息
RMAN>list failure; #需要触发,alter database open;打开数据库触发
6.恢复建议
RMAN>advise failure;
有手动恢复和自动恢复
7.查看自动恢复脚本内容
RMAN>repaire failure review;
8.执行自动恢复
RMAN>repaire failure;
增量备份
为什么需要增量备份?
1.缩短备份的时间
2.
类型
1.差异增量备份
定义:
自上一次同级别的差异备份或者上一次更高级别的备份完成之后,
数据库发生改变的数据块.
backup database:整库备份,不能作为增量策略的一部分
backup incremental level 0 database;整库备份,可以作为增量备份的基础
归档模式:数据库open的状态下可以备份数据库
非归档模式:数据库启动到mount状态下才可以备份数据库
操作:
1.打开块跟踪
SQL>alter databse enable block change tracking using file '/u01/ctf';
2.整备
RMAN>backup incremental level 0 database format 'u01/backup/l0_%U';
3.差异增备
RMAN>backup incremental level 1 database format 'u01/backup/l1_%U';
2.累积增量备份
定义:
上一次更高级别备份完成之后,数据库发生改变的数据块.
操作:
1.打开块跟踪
SQL>alter databse enable block change tracking using file '/u01/ctf';
2.整备
RMAN>backup incremental level 0 database format 'u01/backup/l0_%U';
3.累积增量备份
RMAN>backup incremental level 1 cumulative database format 'u01/backup/l1_%U';
3.增量更新备份(oracle特有)
定义:
将差异性增量直接备份到copy文件中
操作:
run{
recover copy of database with tag 'incr_update';
backup incremental level 1 for recover of copy with tag 'incr_update' database;
}
执行三次
第一次:
没有相应的备份集来应用到文件映像上,产生映像文件
第二次:
执行失败,产生一个增量备份集
第三次:
应用上次备份集到copy文件
使用块跟踪(Block Change Tracking)加速增量备份
主要用在RMAN的增量备份,记录自上一次备份以来数据的变化,
标识更改的块进行备份,CTWR(change tracking wirter)进程
只读取改变的内容,不需要对整个数据库进行扫描,从而提高rman的备份性能,
加快备份,缩短备份时间.
查询块跟踪
select * from v$block_change_tracking;
开启块跟踪
SQL>alter database enable block change tracking using file '指定文件'; //开启并指定文件记录信息
配置了参数db_create_file_dest时不需要指定文件
SQL>alter database enable block change tracking;
关闭块跟踪
SQL>alter database disable block change tracking;
其他:
修改显示的时间格式:
export NLS_DATE_FORMATE='yyyy-mm-dd hh24:mi:ss';
SQL>alter database force logging;
5 使用Catalog恢复目录管理备份信息
catalog恢复目录就是一个Oracle数据库,
用来存储Oracle数据库的备份信息,一个或者多个
控制文件储存备份信息:
缺点:
存放的周期不宜太长,使用control_file_record_keep_time参数来控制
使用catalog恢复目录管理备份信息的前提:
dbid必须不一样
查看dbid:
select dbid from v$database;
在mount状态下修改dbid
Linux>nid target=sys/Oracle123;
SQL>alter database open resetlogs;
使用Catalog恢复目录
创建恢复目录使用的用户:
SQL>create user rco identify by rco quota unlimited on users;
SQL>grant connection,resource,recovery_catalog_owner to rco;
创建恢复目录
在源库rman连接恢复目录
rman target / catalog rco/rco@ip:port/sid
RMAN>create catalog; #在恢复目录库的rco用户下创建了一系列表
在恢复目录中注册数据库
RMAN>register databse;
手工同步
RMAN>resync catalog;
6 数据块
手工制造坏块
准备工作
创建用户test
创建表test
插入测试数据
了解知识
select dbms_rowid.rowid_object(rowid), --对象ID
dbms_rowid.rowid_relative_fno(rowid),--所在的数据文件ID
dbms_rowid.rowid_block_number(rowid),--块ID
dbms_rowid.rowid_row_number(rowid)--行号
from test.test
刷新缓存到磁盘
SQL>alter system flush buffer_Cache;
提取块
dd if=users01.dbf of=test.dbf bs=8192 count=1 skip=132 conv=notrunc
写入块
dd if=/dev/zero of=users01.dbf bs=8192 count=1 seek=132 conv=notrunc
块屏蔽与块恢复
快恢复
作用:
可以使用块恢复来恢复一个或者多个损坏文件块
优点:
1.降低MTTR平均故障恢复时间,只需要恢复损坏的块
2.恢复期间,数据文件可以是联机状态
3.如果没有快恢复,单个块损坏,需要恢复整个数据文件,并且恢复期间保持离线
前提条件:
必须得有RMAN备份
恢复操作
手动恢复
RMAN>recover datafile 4 block 132;
使用恢复指导
RMAN>list failure; #查看是否需要恢复
RMAN>advise failure; #恢复指导
RMAN>repair failure preview; #查看恢复语句
RMAN>repair failure; #执行恢复
块屏蔽
没有备份的话,可以屏蔽坏块,其他块不影响
exec dbms_repair.skip_corrupt_blocks('用户名','表名'); #启用坏块屏蔽
select skip_corrupt from dba_tables where table_name='表名' #查看是否启用坏块屏蔽
7. 使用dbms_backup_restore包
使用场景:
只有备份集(控制文件和数据文件)
控制文件丢失,数据文件丢失
spfile参数文件正常
操作:
启动到nomount状态
SQL>startup nomount;
恢复控制文件
declare
deviceType varchar2(256);
done boolean;
begin
deviceType:=dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
dbms_backup_restore.restoresetDataFile;
dbms_backup_restore.restoreControlFileto('控制文件目录');
dbms_backup_restore.restoreBackupPiece('控制备份集目录',done=>done);
dbms_backup_restore.deviceDeallocate;
end;
/
恢复数据文件
declare
deviceType varchar2(256);
done boolean;
begin
deviceType:=dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
dbms_backup_restore.restoresetDataFile;
dbms_backup_restore.restoreDataFileto(dfnumber=>1,toname=>'数据文件目录');
dbms_backup_restore.restoreDataFileto(dfnumber=>2,toname=>'数据文件目录');
dbms_backup_restore.restoreDataFileto(dfnumber=>3,toname=>'数据文件目录');
dbms_backup_restore.restoreDataFileto(dfnumber=>4,toname=>'数据文件目录');
dbms_backup_restore.restoreBackupPiece('数据备份集目录',done=>done);
dbms_backup_restore.deviceDeallocate;
end;
/
局限性:
必须了解备份片的信息(是否包含控制文件信息,以及位置)
恢复数据库时需要指明文件号,新的文件名,数据文件备份集在哪个路径
8 使用RMAN进行表级别恢复(12c)
在Oracle数据库中,对于用户DDL(drop,truncate)等误操作,引起的数据丢失,
基于数据库时间点不完全恢复,基于表空间时间点恢复TSPITR进行数据恢复.
delete,
Oracle 12c RMAN新特性,基于表的时间点恢复.更加方便
将一个或多个表恢复到指定的时间点,而不影响其他的对象.
恢复原理:
1.建立一个辅助的实例
2.在辅助实例上做全库的恢复
3.通过datadump工具导出,导入指定表
操作:
RMAN>recover table test.test #指定恢复表
util time "to_date('','yyyy-MM-DD hh24:mi:ss')" #指定恢复时间
auxiliary destination '/u01/tsbak' #临时表空间目录
remap table fx.fxtbs:fx.fstbs_new #指定恢复的表的名称
datapump destination '/tmp' #导出目录
dumpfile 'exp.dat' #导出文件
notableimport; #不进行导入
9 rman duplicate复制|克隆技术
rman dulplicate的实现方法:
1.基于备份集的复制
2.基于活动数据库的复制
通过网络将实时数据库复制到辅助实例来创建.
通过网络直接copy到辅助实例,它可以减少数据落地空间,对于TB级,功能作用非常大.
操作步骤
创建副本数据的密码文件
orapwd file=orapwtestdb password=Oracle123 entries=10 format=12
手动创建需要的目录
创建副本数据库初始化文件
touch inittestdb.ora
audit_file_dest=
compatible=
control_files=
db_lock_size=8192
db_name='prod'
log_archive_dest=''
log_archive_format=''
remote_login_passwordfile='EXCLUSIVE'
memory_target=2g
db_file_name_convert=('','')
log_file_name_convert=('','')
启动副本数据库
startup nomount;
配置副本数据库上的静态监听
状态为UNKNOWN
测试静态监听
从源库上测试
sqlplus sys/Oracle123@ip:port/sid as sysdba
用rman dumlicate连接目标数据库(源库)和副本数据库
rman target sys/Oracle123@ip:port/sid auxiliary sys/Oracle123@ip:port/sid
RMAN>duplicate target database to prod from active database nofilenamecheck;