用户管理备份(物理备份)操作系统命令执行的备份
服务器管理备份(RMAN)RMAN能备份数据文件、控制文件、归档重做日志文件、SPFILE、备份集片
RMAN不能备份口令、联机重做日志、PFILE、OracleNet配置文件、临时文件
冷备份(脱机、一致性备份)数据库处于关机状态,用操作系统复制相关文件进行备份
非归档模式,RMAN处于mount模式执行的备份
热备份(联机、非一致性备份)数据库处于联机状态,开启归档模式,备份数据库相关文件
关键文件构成system表空间、当前undo_tablespace、控制文件任一副本 --> 实例立即停止(崩溃)
全部备份所有数据文件、控制文件
局部备份部份表空间、数据文件,大部分情况下仅归档模式才能进行
完整备份所有使用的文件块
增量备份自上一次完整备份以来更改的块,累积增量备份、差异增量备份
完全恢复恢复到数据库或数据文件崩溃前,不丢失任何数据
部分恢复恢复到数据库某一时间点,丢失数据
restore将数据文件从备份位置复制到数据库指定位置(数据文件原位置或重新指定位置)
recover用联机重做日志文件和归档重做日志文件恢复到实例崩溃时或指定时间点
备份和恢复服务级别协议:
MTBF平均无故障时间
MTTR平均恢复时间
数据丢失程度
故障类型
语句、用户进程失败,实例崩溃自动回滚
网络故障
用户错误闪回、不完全恢复
介质失败备份和恢复
⑴、备份非归档模式仅能执行冷备份,自上次备份以来的数据全部丢失
shutdown immediate |transactional | normal
!cp datafile、controlfile
或shutdown abort
!cp datafile、controlfile、重做日志文件(必选)
⑵、恢复到原位置
shutdown abort
!cp datafile、controlfile
starup
⑶、恢复新位置
shutdown abort
!cp datafile、controlfile
startup mount
alter database rename file ‘原位置’ to ‘新位置’
alter database open
1、备份恢复数据前提begin backup至end backup 之间的归档日志应完整
alter tablesapce|database user begin
!cp 数据文件
alter tablespace|database end begin
alter system switch logfile手工切换日志组,不一定立即开始归档
或alter system archive log current(推荐)归档当前日志文件(先切换)
1、完全恢复控制文件、重做日志文件未损坏,自上次备份以来的归档日志文件完整
①、数据库恢复
startup mount
!cp
recover database
alter database open
②、非关键数据文件
alter database tablespace|datafile xxx offline一般系统自动将故障表空间或数据文件offline
!cp
recover tablespace|datafile xxx
alter database tablespace|datafile xxx online
③、关键数据文件
startup mount
!cp
recover database
alter database open
2、归档日志不完整、或修复用户错误或业务需求--> 不完全恢复
startup mount
!cp 数据文件
recover database until time ....
alter database open resetlog
RMAN和sqlplus比较:
RMAN
until time某一时间点
until scncommit后的system change number
until sequence日志切换序列号和线路号
SQL plus
until time某一时间点
until change=scn,commit后的system change number
until cancel提示输入受损的归档日志序列号时,输入cancel
1、控制文件备份数据库物理结构(增删改数据文件、日志文件)发生变化后,应当备份控制文件
alter database backup controlfile to 'xxxx'
2、控制文件恢复备份文件、归档日志、联机重做日志文件完整,数据库能完整恢复?
cp controlfile.bak /u01...--> 使用以前备份的控制文件(备份到trce的用另外办法)
startup nomount
create pfile from spfile
vi pfile--> 如果控制文件放在新位置,需在参数文件中调整
create spfile from pfile
startup mount
recover database using backup controlfile
提示联机重做日志文件位置,一个一个地猜
alter database open resetlog
select * from v$log
current当前正在使用,实例恢复需要此组
active实例恢复需要此组;可能归档,也可能未归档
inactive实例恢复不需要此组;可能归档,也可能未归档;损坏不会丢失数据
unused未使用
clearing正在alter database clear logfile
clearing_currentalter database clear logfile 失败
1、inactive损坏,oracle再次使用此组前无影响,如日志文件组切换到此组时,实例暂停
已归档:alter database clear logfile group 1
未归档:alter database clear logfile unarchived group 1归档日志文件已不完整,应立即完全备份数据库
2、active损坏
尝试 alter system checkpoint,如成功则参考inactive办法恢复,如失败则执行不完全数据库恢复
3、current损坏
执行数据库不完全恢复
所有与恢复相关的文件的默认位置,创建数据库时没有设CONTROL_FILES 、DB_CREATE_FILE_DEST、DB_CREATE_ONLINE_LOG_DEST_N自动在闪回恢复区创建。如没有设LOG_ARCHIVE_DEST_n,启用归档模式时,自动将LOG_ARCHIVE_DEST_n设为闪回恢复区
永久文件
控制文件多路复用副本
联机重做日志文件多路复用副本
临时文件
归档重做日志文件
RMAN备份
RMAN副本
控制文件自动备份
闪回日志文件(不可以指定其他位置)
set system DB_RECOVERY_FILE_DEST_SIZE=2G(须先)
set system DB_RECOVERY_FILE_DEST=’XXXX’
v$flash_recovery_area_usage
rman
connect target/rman客户端本地
connect target user/pwd@orcl用rman客户端远程登录
connect target user/pwd@orcl log=xxx保存日志
connect target user/pwd@orcl log=xxx append在原日志文件上追加
connect target user/pwd@orcl cmdfile=xxx连接rman后,执行指定脚本
connect target user/pwd@orcl log=xxx cmdfile=xxx
rman{}整体作为一个事务执行,一起成功一起失败
alter system set controlfile_record_keep_time=0|7默认保留7天
控制文件包括可删除部分和不可删除部分,可删除部分包括归档日志文件历史记录和RMAN元数据
不可删除部分包括数据文件、联机日志文件
RMAN将数据文件备份到一个物理文件,物理文件叫备份片,几个备份片的逻辑组合叫备份集。
一般地,一个通道产生一个备份集,包括一个备份片,如启用控制文件自动备份,单独产生一个备份集。
filesperset一个备份集包括的数据文件个数,默认64
maxpiecesize备份片大小,可能一个备份集产生多个备份片
maxopenfiles一个通道最大能打开的数据文件数,默认64
maxsetsize备份集大小
section size 10G分段备份,如单个数据文件很大,可分段并行化备份
duartion备份完成时间
备份语句如果没有显式设置RMAN参数,则用rman configure中的默认设定,备份文件存放位置可在通道指定,也可在backup命令后指定。
vi database_backup
run {(冷备份、一致性备份、关闭备份)
shutdown immediate;-- 完整干净关闭数据库,normal|transactional|immediate
startup mount;-- 用RMAN须处理加载模式,因要读控制文件中的RMAN存储库
allocate channel d1 type disk;-- 设置备份通道,类型 disk|sbt
backup as backupset database-- 备份集模式备份整个数据库
format ‘xxxx’;-- 备份数据存放地
alter database open
}
rman target sys/oracle@orcl@database_backup
前提:控制文件完整
startup mount
restore database
recover database noredo-- 应用增量备份
alter database open resetlog-- 重设redolog
RMAN> run{(热备份、非一致性备份、打开备份)
allocate channel d1 device type disk format '/backup/d1_%U';
allocate channel d2 device type disk format '/backup/d2_%U';
backup as backupset database|datafile N |tablespace tbs format '/backup/d1_%U';
sql 'alter system archive log current';执行sql命令,手工归档联机重做日志文件
backup as backupset archivelog all delete all input; 成功备份归档日志后,删除原归档日志文件
}
format 格式约定
%c:备份片的副本数
%d:数据库名称
%D:位于该月的第几天
%M:位于该年的第几个月
%n:数据库名称,向右填补到最大8个字符
%u:一个8个字符的名称,代表备份集和创建时间
%p:该备份集的备份片号,从1开始到创建的文件数
%U:一个唯一的名字%u_%p_%c
%s:备份集的编号
%t:备份集的时间戳
%T:年月日格式(YYYY-MM-DD)
backup as compressed backupset....压缩备份集
bzip2默认,压缩率高,CPU占用高
zlib,速度比Bzip2快,压缩率不高,compatible级别11.1.0
backup as backupset.... tag='xxxx'为备份集或镜像副本加tag
backup validate database不实际备份,仅检查数据文件坏块
backup tablespace tbs skip readonly skip offline skip inaccessible跳过离线、丢失、只读表空间|数据文件
只能在磁盘,不能增量,且open或mount模式
与手工通过操作系统的复制命令备份数据文件类似。一个数据文件生成一个镜像副本文件,整个复制过程是rman进行的,rman一个数据块一个数据块的复制,rman会检测每一个数据块是否出现损坏,不需要将表空间设置成为begin backup,镜像副本中包含使用过的数据块,也包含从未使用过的数据块。生成镜像副本的好处在于恢复速度相对备份集来说,更快一些
backup as copy database
backup as copy archivelog all delete all input;
启用磁盘通道,备份归档日志文件移,然后删除
增量备份,RMAN先扫描整个数据文件来确认哪些块未改变
启用块变更跟踪,直接访问变更的块。
alter database enable block change tracking using file '/xxx'
alter database disable block tracking
差异增量备份自上次增量备份以来更改的所有块
backup incremental level=0 database|tablespace|datafile
backup incremental level=1 database|tablespace |datafile
累积增量备份自上次完整备份以来更改的所有块
backup incremental level=0 database|tablespace|datafile
backup incremental cumulative level=1 database|tablespace|datafile
backup archivelog from time 'sysdate-1'
backup archivelog from scn 1
backup archivelog from all
RMAN备份归档日志时,首先进行一次日志切换,然后对归档进行备份。备份过程中如发现当前归档日志损坏,会自动的切换到另外一个归档路径下面(前提是存在多个归档路径)查找该文件的副本
backup database |tablespace|datafile N plus archivelog
备份表空间、数据库、数据文件时一起备份归档日志文件
backup database |tablespace|datafile N plus archivelog all delete all input
备份表空间、数据库、数据文件时一起备份归档日志文件,然后删除原归档日志文件
backup database |tablespace|datafile N plus archivelog skip inaccessible
跳过不能访问的归档日志文件(绝不可接受)
backup recovery area备份闪回恢复区(当前或任意之间位置)
backup recovery files备份与恢复相关的文件(即使不位于闪回恢复区)
configure retention policy to redundancey 2冗余保留策略,RMAN保留指定数量的备份,默认为1
configure retention policy to recovery windows of 2 days保留足够多备份,确保可恢复到窗口的任意时间点
configure retention policy to none 备份永不过期
参数 control_file_record_keep_time 控制文件最多能保存RMAN元数据天数
归档备份--> 游离冗余策略之外的备份生存周期
backup … tag ‘years_backup’ keep until time ‘sysdate + 365’365天之后过期
backup … keep forever永不过期
change backup tag ‘years_backup’ nokeep更改后应用保留策略
超过保留策略任何备份,标记为obsolete,如存于闪回恢复区则自动删除
report need backup days 3
report need backup redundancy 3
backup as backupset devive type disk copies 2 database plus archive log2份备份片或镜像副本
Oracle加密备份授权
磁盘上创建加密的备份Advanced Security Option
加密的备份直接写入磁带 Oracle Secure Backup SBT
A) Transparent Encryption of Backups
This is the default mode and uses the Oracle wallet. A wallet is a password-protected
container used to store authentication and signing credentials, including private keys,
certificates, and trusted certificates needed by SSL.
C) Password Encryption of Backups
This mode uses only password protection. You must provide a password when creating and restoring encrypted backups.
Dual Mode Encryption of Backups
Dual-mode encrypted backups can be restored either transparently or by specifying a
password. When restoring a dual-mode encrypted backup, you can use either the Oracle Encryption Wallet or a password for decryption.
list、report、动态性能视图仅通过RMAN元数据获取信息,不确认备份片是否真实存在。用crosscheck核查真实备份片信息。
RMAN>list-- 在RMAN元数据中检索备份相关信息
RMAN> report obsolete-- 确定哪些备份集已被RMAN标记为obsolete
RMAN> delete obsolete-- 从RMAN元数据删除标记为obsolete备份片记录,一并删除真实备份片
RMAN>crosscheck-- RMAN元数据与真实备份片比较,丢失的备份片标记为expired
须连接目标数据据,不必连接恢复目录
RMAN> delete expired--从RMAN元数据删除标记为expired备份片记录
RMAN> report schema报告数据库物理结构,如数据文件、文件号、归档模式、undo数据文件等
v$session
v$process
v$session_longopsRMAN已经完成的工作量
backup validate check logial执行数据库验证
restore validate
validate查看给定的备份集,验证以确保能够还原
list recoverable backup of database查看能够用于还原和恢复数据库的所有数据文件备份或副本
report unrecoverable
list incarnation
reset database to incarnation
configure controlfile autobackup on
恢复步骤:
1、spfile文件完整
startup nomount
restore controlfile from autobackup
2、spfile文件丢失
startup pfile=/$ORACLE_HOME/dbs/init.ora nomount--使用默认参数文件启动数据库
set DBID=''数据库唯一标识
restore spfile from autobackup
shutown abort
startup nomount
restore controlfile from autobackup
alter database restore
alter database recover
alter database open resetlogs
3、没有启动autobackup, spfile、controlfile恢复
没有启用自动备份控制文件,每次备份1号数据文件的时候,都会强制备份控制文件和spfile,人工找到备份片,使用restore进行还原
startup pfile=/$ORACLE_HOME/dbs/init.ora nomount--使用默认参数文件启动数据库
set DBID=''数据库唯一标识
restore spfile from ‘c:\backup\07qwjljsad’第一个备份片
shutown abort
startup nomount
restore controlfile from ‘c:\backup\07qwjljsad’第一个备份片
alter database restore
alter database recover
alter database open resetlogs
前提:上一次备份后归档重做日志文件,联机重做日志文件
1、非关键文件,打开状态
RMAN> run {
sql'alter tablespace user offline'一般oracle已经将表空间置为offline
restore database|tablespace|datafile-- 仅损坏的数据文件或表空间即可
recover
sql 'alter tablespace user online'
}
2、关键文件
RMAN> startup mount
run {
restore
recover
sql 'alter tablespace system online'
}
关键文件与非关键文件恢复区别:
关键文件崩溃导致数据库立即停止,且恢复前无法open数据库。启动数据库到mount(RMAN须在mount以上模式工作),然后开始恢复关键文件,最后open数据库。
非关键文件崩溃或许不会导致数据库立即停机,数据库会自动将数据文件置为offline,如果数据库已停,可在mounnt模式先将受损文件offline,然后把数据库open,最后考虑恢复。
1、切换目录
RMAN run{
sql'alter datafile 4 offline';
set newname for datafile 4 to 'xx';--set命令,如set until set newname set dbid等,只能在run块中执行
switch datafile 4;
recover datafile 4;
sql 'alter database datafile 4 online';
}
2、还原备份文件
RMAN run{
sql'alter datafile 4 offline';
set newname for datafile 4 to 'xx';--set命令,如set until set newname set dbid等,只能在run块中执行
switch datafile 4;
recover datafile 4;
sql 'alter database datafile 4 online';
}
alter system set db_block_checking off,false|low|medium|full,true默认off,system表空间默认full
low 内存中更改块或从磁盘中读取块后对块进行基本检查
medium,除low外,检查所有非IOT块
analyze table|index发现受损坏
块受损不会导致数据文件offline,仅当会话读取受损块时返回错误,并写入警报日志。
RMAN备份默认遇块受损停止
RMAN> run {
set maxcorrupt for datafile 7 to 100;7号数据文件备份时,如受损块未超过100,继续
backup datafile 7
}
RMAN> backup nochecksum datafile 7不检查物理块损坏,默认RMAN检查物理块损坏
RMAN> backup check logical datafile 6检查物理、逻辑块损坏
RMAN恢复受损块,先从闪回日志搜索受损块完好副本(如启用闪回数据库功能),然后使用最新的级别0还原块(不使用增量级别1),最后用重做日志执行恢复
v$database_block_corruption
v$backup_corruption
v$copy_corruption
RMAN> block recover datafile 7 block 5
RMAN> block recover datafile 7 block 5,6,7 datafile 9 block 21,25
RMAN> block recover datafile 7 block 5,6,7 datafile 9 block 21,25 from backupset 1093
RMAN> block recover corruption list
Backup validate database查看RMAN检测到的所有数据库损坏(含spfile、controlfile
填充v$backup_corruption v$database_block_corruption
应用环境:
1、缺失联机重做日志文件(日志组所有副本)、归档重做日志文件,仅能执行不完整恢复;
2、用户错误或业务需求回退数据库至某个时间点
RMAN> run {
shutdown abort; startup mount
set until time "to_date('xxx' , 'xxx')"
restore database
早于指定时间点的所有数据文件备份,然后应用归档重做日志文件、当前重做日志文件
完整恢复仅还原损坏文件的最近一次备份
recover database-- 应用归档重做日志文件、联机重做日志文件至故障点(set语句指定位置)
alter database open resetlogs
}
或者
RMAN> run {
shutdown abort; startup mount
set until time "to_date('xxx' , 'xxx')"
restore databaseuntil time "to_date('xxx' , 'xxx')"
recover database until time "to_date('xxx' , 'xxx')"
alter database open resetlogs
}
关于故障点(指点恢复到哪)
until time指定时间点
until scn
until sequence
RMAN> configure autoback on
RMAN> run{
set dbid=
startup nomount pfile=xxx/init.ora
restore spfile from autobackup
shutdown abort; startup nomount
restore controlfile from autobackup-- 还原到spfile文件指定目录,如原位置不可用,则需先改spfile
alter database mount
restore database until scn xxx
recover database until scn xxx-- 不完整恢复
alter database open resetlogs
RMAN版本须和目标数据库版本相同,恢复目录的RMAN版本须等于或高于注册的数据库RMAN版本
1、创建恢复目录
sqlplus / as sysdba驻留恢复目录的数据库
create tablespace rmancat datafile '/u01/rmancat01.dbf' size 200m;
create user rman identified by rman default tablespace rmancat;
quota unlimited on rmancat;
grant recovery_catalog_owner to rman;
rman catalog rman@rman@catdb
create catalog;
rman target / catalog rman/rman@catdb从目标数据库启动RMAN,连接目标数据库、目录数据库
register database注册目标数据库到恢复目录,复制控制文件中的RMAN元数据
unregister database注销
resync catalog
list backup of database
2、虚拟专用目录
恢复目录的一个逻辑子集,DBA将自己的数据库注册到自己的专用目录中,虚拟专用目录所有者仅能看到自己注册的数据库或有权访问的数据库(由恢复目录所有者分配已注册的目标数据库)
sqlplus / as sysdba驻留恢复目录的数据库
craeate user vpc1 identified by vpc1 default tablespace rmamcat quota unlimited on rmancat
grant recovery_catalog_owner to vpc1vpc1不是恢复目录所有者,vpc1可以创建自己专用恢复目录
grant register database to vpc1vpc1可以注册目标数据库
rman catalog vpc1/vpc1@rcatdb
create virtual catalog
rman target / catalog vpc1/vpc1@catdb从目标数据库启动RMAN,连接目标数据库、目录数据库
register database注册目标数据库到恢复目录,复制控制文件中的RMAN元数据
unregister database注销
resync catalogRMAN下一次连接到目标数据和目录时会自动同步
list backup of database
vi recover.rman
run{
backup database plus archivelog delete all input;
}
rman target / @recover.rmanrman脚本放在目标数据库操作系统文件系统
RMAN> create script recover.rman
(
backup database plus archivelog delete all input;
)
RMAN> run (execute script recover.rman)rman脚本存在恢复目录
create|replace|print|list|execte|delete [global] script
RMAN> create script recover.rman from file '/.../recover.rman'将操作系统脚本转为存储恢复目录脚本
target当前数据库
auxiliary从target创建的新数据库,target、auxiliary可在同一台机器、也可不在同一台机器
取得target数据库最近一次备份副本
辅助数据库节点
辅助实例创建口令文件
orapwd file=$ORACLE_HOME/dbs/oranewdb password=1234 entries=3口令文件ora<SID>
auxiliary 配置listener、target配置tnsnames.ora,确保target到auxiliary网络连通性(如不同一台机器)
辅助实例创建初始化参数文件DB_NAME、CONTROL_FILES、DB_BLOCK_SIZE必需
辅助实例启动nomount
export ORACLE_SID=newdb
startup nomount
mount或open目标数据库
target的备份放在auxiliary数据库能访问的位置,如active模式不需要
rman target sys/oracle@orcl auxiliary sys/1234@newdb
run{
allocate auxiliary channel a1 device type disk;为辅助实例分配channel,可选
allocate channel t1 type disk;
duplicate target database to newdb;
或duplicate target database to newdb from active database
}
open辅助实例
alter database open resetlogs
duplicate命令完成的工作
为auxiliary创建控制文件
将target备份还原到auxiliary数据库,或直接从运行中的数据库复制
执行不完整恢复到最后的归档重做日志文件(不复制联机重做日志文件)
关闭后重启auxiliary,用resetlogs打开数据库
为auxiliary数据库生成新DBID
不完整恢复须应用到整个数据库,应还原所有数据库文件,整个数据库一起向前滚动。tspitr可以在不影响数据库其他表空间或对象前提下,将一个或多个表空间的内容恢复到过去某个时间点。tspitr依据目标数据库的表空间的一个子集创建一个辅助数据库,仅在此子集上执行不完整恢复,然后用辅助数据库的表空间替代目标数据库中的表空间,看起来好像仅恢复了该子集,保持目标数据库的其作部分是最新数据
除非使用了恢复目录,否则不能再次执行TSPITR
应用情景
表空间内对象在逻辑上独立,不与其他表空间存在父子关系(引用完整性)和索引关系
用DDL改了表空间中表的结构,导致无法用闪回表恢复
PURGE删除表
已经删除的表空间无法恢复,表空间改名后无法恢复到改名前的时间点(现在已经可以做到)
术语
目标时间表空间恢复到哪个时间点或哪个SCN
恢复集待恢复的表空间数据文件组
辅助集system undo temp等表空间数据文件
辅助目标存储辅助文件集的临时目录,如 redolog archivelog controlfile
执行tspitr前准备事项
①、select obj1_owner,obj1_name,ts1_name,obj2_owner,obj2_name,ts2_name
from ts_pitr_check
where ts1_name = 'tbs_name' and ts2_name != 'tbs_name'
or ts1_name != 'tbs_name' and ts2_name = 'tbs_name'
检查是否与其他表空间的对象存在引用关系,可以删除引用关系、加到恢复集一起恢复或挂起该关系,确保表之间逻辑上一致
②、select owner,name,to_char(creation_time,'yyyy-mm-dd:hh24:mi:ss') create_time
from ts_pitr_objects_to_be_dropped
where tablespace_name = 'tbs_name'
and creation_time > to_date('2008-07-19:21:55:00','yyyy-mm-dd:hh24:mi:ss')
恢复指定目标时间之后创建的对象,在执行恢复前导出各个对象,恢复后导入
TSPITR完成的动作
随机生成辅助实例
被恢复表空间脱机
还原控制文件到辅助实例
还原恢复集、辅助集的数据文件到辅助实例
恢复辅助实例到期望时间点、用resetlogs打开辅助实例
导出已恢复表空间元数据,关闭辅助实例
导入元数据到目标数据库
删除辅助文件
恢复表空间联机手动
RMAN> CONNECT TARGET
RMAN> RECOVER TABLESPACE users, example
UNTIL TIME '2007-06-29:08:00:00'
AUXILIARY DESTINATION '/u01/app/oracle/oradata/aux';
RMAN>BACKUP TABLESPACE users, example;
RMAN> SQL ‘ALTER TABLESPACE users, example ONLINE’;
执行TSPITR 并使表空间联机以后,就不能使用更早时间的备份
rman可创建副本数据,但仅限相同平台。
可传输表空间可跨平台迁移表空间及其数据,由此可演化为跨平台迁移整个数据库。
传输表空间限制:
表空间应自包含;
一样或兼容的字符集、字节序格式
传输表空间中的对象的模式,目标数据库应有(就是对象的owner)
表空间不能同名
相同对象(schema.object,还应考虑名称空间)相同,导入时忽略
select * from v$transportable_platform order by platform_name 检查字节序格式 endian
exec dbms_tts.transport_set_check('TS1')--检查表空间自包含,并使其只读(RMAN可不必)
RMAN>transport tablespace users
>tablespace destination '/export/home/oracle/oradata/users'
>auxiliary destination '/export/home/oracle/oradata/test1';
! expdp system/oracle transport_tablespace=ts1 dumpfile=ts1.dump directory=dp_out
RMAN> covert datafile 'u01/ttsfiles/ts1.bdf'
>from platform='Linux IA (32-bit)' format '/u01/ttsfiles/ts1conv.bdf'不同字节序格式平台需RMAN转换
!scp xxx xxx--拷贝表空间数据文件、元数据到目标数据库
! impdp system/oracle dumpfile=ts1.dump transport_datafiles=/01/ttsfiles/ts1.bdf directory=dp_out
alter database read write源和目标都执行
磁带BACKUP_TAPE_IO_SLAVES=TRUE 开启异步IO,默认FALSE
磁盘本地操作系统支持异步IO
如不支持异步IO :BACKUP_TAPE_IO_SALVES=TRUE且DBWR_IO_SALVES=nozero模拟异步IO
v$backup_sync_io监视同步IO
v$backup_async_io监视异步IO
RMAN所需内存从PGA分配,如BACKUP_TAPE_IO_SALVES=TRUE则用large pool,如未配large pool则用share pool
使用导出导入程序需要create session权限
如果需要导出导入其他用户对象,需要exp_full_database、imp_full_database
常规方式(Data Pump 称外部表路径)
类似普通的INSERT语句,用户进程构造VALUES子句,然后读取源数据文件,为每个插入行执行一
次INSERT,使用数据库缓冲区缓存,生成undo,生成重做。
直接路径(Data Pump也称直接路径)
直接读取源数据文件,将内容发送到服务器进程,服务器进程在其PGA组装数据中
的块,直接写入数据文件,写操作在表的高水位线上完成。不使用数据库高速缓冲区,不生成undo,
不生成重做。优点快,缺点:删除或禁用引用完整性约束(仅unique primary key not null约束有效),
没有激活INSERT触发器,针对其他会话的DML锁定表,群集表不适用。
vi load.ctl-- 创建Load控制文件
load data-- 启动加载操作
infile ‘depts.txt’-- 数据源
badfile ‘depts.bad’-- Loader拒绝记录,如违反完整性约束、与控制文件格式不一致
discardfile ’depts.dsc’--已成功从输入文件提取出记录,但不匹配记录选择标准而被拒绝
append-- 附加,而不是先truncate
into table dept-- 附加到哪张表
fidlds terminated by ‘,’-- 数据源分隔符
trailing nullcols-- 如缺少字段,抽入null
(deptno integer external(2),-- 表结构
dname,
loc
)
sqlldr userid=scott/tiger control=load.ctl direct=true 操作系统命令行执行加载,direct=true 直接路径,默认是insert into
create directory data_dir as ‘/sales/etl’
create directory log_dir as ‘/sales/etl’
grant read on directory data_dir to scott
grant write on directory log_dir to scott
select * from dba_tab_privs-- sys用户始终拥有目录,任务用户创建目录需 create directory权限
select * from dba_directories
create table sales_ext(
id number(6),
name varchar2(20)
age number(9)
)
organization external
(type oracle_loader
default directory data_dir-- 存放数据目录
access parameters
(records delimited by newline characterset us7ascⅡ用换行符分隔,字符集为us7ascⅡ
badfile ‘sales.bad’-- 外表坏文件
discardfile ‘depts.dsc’
logfile ‘sales.log’-- 外表日志文件
fields terminated by “ “ optionally enclosed by ‘/t’)字段由空格或tab他隔
location (‘sales.txt’)-- 数据文件名
)
reject limit unlimited读入整个文件
create directory data_dump as ‘/datapump_data’
grant read,write on directory data_dump to scott
vi scott_expdp.txt
directory=data_dump
schemas=scott
dumpfile=schema_scott.dat
exclude=package
exclude=view
exclude=procedure
exclude=index:”LINK ‘PK_%”
expdp scott/tiger parfile=/tmp/ scott_expdp.txt
create directory data_dump as ‘/datapump_data’
create directory log_dump as ‘/datapump_data’
grant read,write on directory data_dump to scott
grant read,write on directory log_dump to scott
vi scott_to_dog.txt
directory=data_dump目录
dumpfile=schema_scott.dat待导入二进制文件
remap_schema=scott:dog将schema(用户)scott的对象更改为dog不同用户之间
remap_tablespace=user:dog将表空间user更改为dog表空间不同表空间之间
impdp dog/wangwang parfile=/tmp/scott_to_dog.txt
等同不完整恢复,受闪回日志限制,需归档重做日志,mount模式
启用闪回数据库,SGA分配一个存储区域(闪回缓冲区),系统启动恢复写入器(Recovery Writer,RVWR)进程,将闪回缓冲区内容写入闪回日志。执行闪回数据库时,数据库用闪回日志将数据库闪回到某个时间点,然后应用归档重做日志和联机重做日志文件前滚到确切的时间点(和数据库不完全恢复一样),最后用resetlogs打开一个新数据库化身(incarnation)
1、启动闪回数据库功能
archivelog list
alter system set db_recovery_file_dest_size=8G
alter system set db_recovery_file_dest='/flash_recovery_area'
alter system set db_flashback_retention_target=240(m)
shutdown immediate
startup mount
alter database flashback on
alter database open
v$flashback_database_log闪回保留时间是一个期望的目标时间,确切闪回能力信息
v$flashback_database_stat闪回数据库性能消耗
select * from v$sgastat where name = 'flashback generation buff'闪回缓冲区大小
2、sqlplus执行闪回数据库
shutdown abort
startup mount
flashbackup database to timestamp to_timestamp(’20-12-08 10:00:00’,’dd-mm-yy hh:mm:ss)’
alter database open read only查看闪回结果,可多次闪回以达到最接近的结果
shutdown abort
startup mount
alter database open resetlogs
3、rman执行闪回
RMAN> flashbackup database to time = to_date('','')或to scn=to sequence=
4、开启闪回数据库后,默认所有表空间参与闪回功能
alter tablespace tbs flashbackup off关闭表空间闪回功能
alter tablespace tbs flashback onmount模式开启
执行闪回数据时,表空间须脱机。
闪回前备份脱机表空间,然后使用表空间恢复功能使其可以在闪回后的数据库中联机
能否恢复主要看表空间的可用空间,不需停机
drop表,仅rename table后放入recyclebin。
恢复表及其索引、权限、触发器、除外键约束外的所有约束,不能恢复system表
闪回时能改表名,不能改模式,和表一起闪回索引、触发器、约束,名字保持回收站名称
oracle空闲空间利用顺序:空闲--> 回收站 -->自动扩展
alter system set recyclebin = on
select * from cat
show recyclebin
drop table student删表,后台放入recyclebin
select object_name,original_name,type from user_recyclebin
flashback table 回收站内表名 to before drop
flashback table tb_name to before drop to new_tb
purge table student | drop table student purge删表,后台不放入recyclebin
purge recyclebin清空recyclebin
drop user hr cascade删除模式时连同模式对像(表),无法执行闪回表删除
闪回数据归档,11g新功能,用FBDAF进程,可追溯几年前,常出于法规需要,仅记录update delete
flashback archive administer 系统权限--> 创建、修改flashback data archive
flashback archive对象权限 -->启用对表的跟踪
create flashback archive default fb_fi tablespace fbda1 quota 500m retention 7 year
default表启用归档时可指定,如未指定则用default,如没有default ?
retention归档默认保留时间
alter flashback archive fb_fi add tablespace fbda2 quota 500mcreate flashback archive不能指定多个表空间
alter flashback archive fb_dflt purge before timestamp to_timestamp(‘’,’’)手工清除部分历史数据
alter table hr.employees flashback archive fb_fi除添加列外,不能执行DDL语句
alter table hr.employees flashback archive fb_fi off禁用后历史数据丢失
select * from employees
as of timestamp(systimestamp - interal ‘28’ day) 类似闪回查询,用户不知是搜索undo,还是flashback archive
where employee_id = 169
列出归档
显示归档与表空间关系
使用归档功能的表
查询表或事务过去某一时间点的值或历史变更值,构建相应的DML语句将表或事务反转到过去某个时间点,在线不影响用户。
1、闪回查询
select * from student as of timestamp to_timestamp(’07-11-13 16:00:07’,’dd-mm-rr hh:mm:ss’);
查询07-11-13 16:00:07时student表状态
insert into student select * from student
as of ….
create table student2 as
select * from student
as of ….
execute dbms_flashback.enable_at_time to_timestamp(’07-11-13 16:00:07’,’dd-mm-rr hh:mm:ss’)
数据库07-11-13 16:00:07时状态,仅对当前会话有效(其他会话使用实时数据库),不能DML
execute dbms_flashback.disable
2、闪回表 flashback table
构造DML语句来反转到过去的一个时间点,还原表索引、触发器disable、约束,处于联机状态。
grant flashback any table to emp
alter table student enable row move
flashback table student to timestamp to_timestamp(’07-11-13 16:00:07’,’dd-mm-rr hh:mm:ss’)
失败原因:约束,可以同时闪回相关联的表
没有足够的undo信息
其他用户不能锁定被闪回作用的行
表结构不能改变(添加或删除外)
系统表、固定表(x$)、远程表、外部表、临时表、v$视图不适用
3、闪回版本查询Flashback Version Query
返回两个SCN或时间戳之间的行的完整历史变更
依赖AUM(Automatic Undo Management)
version_between不能跨越DDL
4、闪回事务查询flashback_transaction_query
相比闪回版本查询,可实施撤销语句反转相关记录
alter database add supplemental log data
alter database add supplemental log data (primary key) columns
gant execute on dbms_flashback to hr
grant select any transaction to hr
flashback_transaction_query显示数据库执行的所有更改(包括DDL操作、已删除的表和用户)
declare
v_xid xid_array;
begin
v_xid :=xid_array('05000300FB050000');
dbms_flashback.transaction_backout(1,v_xid,options => dbms_flashback.nocascade);--执行撤销事务1
end;
cascade回滚所有事务及其从属事务
nocaseade如果可能,仅回滚指定事务
nocaseade_force回滚指定事务,忽略从属事务
nonconflict_only仅回滚指定事务的非冲突行的更改、
数据库进行一致状态,但无法再次自动完成指定事务