备份术语

用户管理备份(物理备份)操作系统命令执行的备份

服务器管理备份(RMANRMAN能备份数据文件、控制文件、归档重做日志文件、SPFILE、备份集片

RMAN不能备份口令、联机重做日志、PFILEOracleNet配置文件、临时文件

冷备份(脱机、一致性备份)数据库处于关机状态,用操作系统复制相关文件进行备份

非归档模式,RMAN处于mount模式执行的备份

热备份(联机、非一致性备份)数据库处于联机状态,开启归档模式,备份数据库相关文件

关键文件构成system表空间、当前undo_tablespace、控制文件任一副本 --> 实例立即停止(崩溃)

全部备份所有数据文件、控制文件

局部备份部份表空间、数据文件,大部分情况下仅归档模式才能进行

完整备份所有使用的文件块

增量备份自上一次完整备份以来更改的块,累积增量备份、差异增量备份

完全恢复恢复到数据库或数据文件崩溃前,不丢失任何数据

部分恢复恢复到数据库某一时间点,丢失数据

restore将数据文件从备份位置复制到数据库指定位置(数据文件原位置或重新指定位置)

recover用联机重做日志文件和归档重做日志文件恢复到实例崩溃时或指定时间点

备份和恢复服务级别协议:

MTBF平均无故障时间

MTTR平均恢复时间

数据丢失程度

故障类型

语句、用户进程失败,实例崩溃自动回滚

网络故障

用户错误闪回、不完全恢复

介质失败备份和恢复

用户管理备份

冷备份和恢复(非归档模式)

⑴、备份非归档模式仅能执行冷备份,自上次备份以来的数据全部丢失

shutdown immediate |transactional | normal

!cp datafilecontrolfile

shutdown abort

!cp datafilecontrolfile、重做日志文件(必选)

⑵、恢复到原位置

shutdown abort

!cp datafilecontrolfile

starup

⑶、恢复新位置

shutdown abort

!cp datafilecontrolfile

startup mount

alter database rename file ‘原位置’ to ‘新位置

alter database open

热备份(归档模式)

1、备份恢复数据前提begin backupend 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

RMANsqlplus比较:

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 失败

1inactive损坏,oracle再次使用此组前无影响,如日志文件组切换到此组时,实例暂停

已归档:alter database clear logfile group 1

未归档:alter database clear logfile unarchived group 1归档日志文件已不完整,应立即完全备份数据库

2active损坏

尝试 alter system checkpoint,如成功则参考inactive办法恢复,如失败则执行不完全数据库恢复

3current损坏

执行数据库不完全恢复

闪回恢复区

所有与恢复相关的文件的默认位置,创建数据库时没有设CONTROL_FILES DB_CREATE_FILE_DESTDB_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

RMAN 基础

rman

connect target/rman客户端本地

connect target user/pwd@orclrman客户端远程登录

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并行化参数

RMAN将数据文件备份到一个物理文件,物理文件叫备份片,几个备份片的逻辑组合叫备份集。

一般地,一个通道产生一个备份集,包括一个备份片,如启用控制文件自动备份,单独产生一个备份集。

filesperset一个备份集包括的数据文件个数,默认64 

maxpiecesize备份片大小,可能一个备份集产生多个备份片

maxopenfiles一个通道最大能打开的数据文件数,默认64

maxsetsize备份集大小

section size 10G分段备份,如单个数据文件很大,可分段并行化备份

duartion备份完成时间

备份语句如果没有显式设置RMAN参数,则用rman configure中的默认设定,备份文件存放位置可在通道指定,也可在backup命令后指定。

非归档模式RMAN备份、恢复

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备份

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跳过离线、丢失、只读表空间|数据文件

p_w_picpath copy备份

只能在磁盘,不能增量,且openmount模式

与手工通过操作系统的复制命令备份数据文件类似。一个数据文件生成一个镜像副本文件,整个复制过程是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备份与恢复相关的文件(即使不位于闪回恢复区)

RMAN冗余策略

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份备份片或镜像副本

RMAN 加密备份

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.

RMAN备份信息

listreport、动态性能视图仅通过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

恢复spfilecontrolfile

configure controlfile autobackup on

恢复步骤:

1spfile文件完整

startup nomount

restore controlfile from autobackup

2spfile文件丢失

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 spfilecontrolfile恢复

没有启用自动备份控制文件,每次备份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数据库。启动数据库到mountRMAN须在mount以上模式工作),然后开始恢复关键文件,最后open数据库。

非关键文件崩溃或许不会导致数据库立即停机,数据库会自动将数据文件置为offline,如果数据库已停,可在mounnt模式先将受损文件offline,然后把数据库open,最后考虑恢复。

p_w_picpath copy还原

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';

}

块介质恢复 BMR

alter system set db_block_checking off,false|low|medium|full,true默认offsystem表空间默认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检测到的所有数据库损坏(含spfilecontrolfile

填充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

RMAN脚本

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当前数据库

auxiliarytarget创建的新数据库,targetauxiliary可在同一台机器、也可不在同一台机器

取得target数据库最近一次备份副本

辅助数据库节点

辅助实例创建口令文件

orapwd file=$ORACLE_HOME/dbs/oranewdb password=1234 entries=3口令文件ora<SID>

auxiliary 配置listenertarget配置tnsnames.ora,确保targetauxiliary网络连通性(如不同一台机器)

辅助实例创建初始化参数文件DB_NAMECONTROL_FILESDB_BLOCK_SIZE必需

辅助实例启动nomount

export ORACLE_SID=newdb

startup nomount

mountopen目标数据库

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依据目标数据库的表空间的一个子集创建一个辅助数据库,仅在此子集上执行不完整恢复,然后用辅助数据库的表空间替代目标数据库中的表空间,看起来好像仅恢复了该子集,保持目标数据库的其作部分是最新数据

除非使用了恢复目录,否则不能再次执行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源和目标都执行

RMAN异步IO配置

磁带BACKUP_TAPE_IO_SLAVES=TRUE 开启异步IO,默认FALSE

磁盘本地操作系统支持异步IO

如不支持异步IO BACKUP_TAPE_IO_SALVES=TRUEDBWR_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_databaseimp_full_database

常规方式(Data Pump 称外部表路径)

类似普通的INSERT语句,用户进程构造VALUES子句,然后读取源数据文件,为每个插入行执行一

INSERT使用数据库缓冲区缓存,生成undo,生成重做

直接路径(Data Pump也称直接路径)

直接读取源数据文件,将内容发送到服务器进程,服务器进程在其PGA组装数据中

的块,直接写入数据文件,写操作在表的高水位线上完成。不使用数据库高速缓冲区,不生成undo

不生成重做。优点快,缺点:删除或禁用引用完整性约束(仅unique primary key not null约束有效),

没有激活INSERT触发器,针对其他会话的DML锁定表,群集表不适用

SQL*Loader

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

external表

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读入整个文件

Data Pump

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:dogschema(用户)scott的对象更改为dog不同用户之间

remap_tablespace=user:dog将表空间user更改为dog表空间不同表空间之间

impdp dog/wangwang parfile=/tmp/scott_to_dog.txt

闪回 flashback

flashback database

等同不完整恢复,受闪回日志限制,需归档重做日志,mount模式

启用闪回数据库,SGA分配一个存储区域(闪回缓冲区),系统启动恢复写入器(Recovery WriterRVWR)进程,将闪回缓冲区内容写入闪回日志。执行闪回数据库时,数据库用闪回日志将数据库闪回到某个时间点,然后应用归档重做日志和联机重做日志文件前滚到确切的时间点(和数据库不完全恢复一样),最后用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'闪回缓冲区大小

2sqlplus执行闪回数据库

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

3rman执行闪回

RMAN> flashbackup database to time = to_date('','')to scn=to sequence=

4、开启闪回数据库后,默认所有表空间参与闪回功能

alter tablespace tbs flashbackup off关闭表空间闪回功能

alter tablespace tbs flashback onmount模式开启

执行闪回数据时,表空间须脱机。

闪回前备份脱机表空间,然后使用表空间恢复功能使其可以在闪回后的数据库中联机

flashbackup drop

能否恢复主要看表空间的可用空间,不需停机

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删除模式时连同模式对像(表),无法执行闪回表删除

flashback data archive

闪回数据归档,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

列出归档spacer.gif

显示归档与表空间关系

spacer.gif

使用归档功能的表

spacer.gif

flashback query

查询表或事务过去某一时间点的值或历史变更值,构建相应的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:07student表状态

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或时间戳之间的行的完整历史变更

依赖AUMAutomatic Undo Management

spacer.gif

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操作、已删除的表和用户)

spacer.gif

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仅回滚指定事务的非冲突行的更改、

数据库进行一致状态,但无法再次自动完成指定事务