全量备份:对数据库完整的备份
建议:一月一次全量,一周一次增量
恢复目录数据库创建步骤
--指定自动通道并行个数。
CONFIGURE DEVICE TYPE sbt/disk PARALLELISM n;
--指定自动通道的默认设备
CONFIGURE DEFAULT DEVICE TYPE TOsbt/disk;
RUN{
ALLOCATE CHANNEL 通道名称 DEVICE TYPE 设备类型;
……}
RMAN>SHOW ALL;
(2)备份片
(3)RMAN-Format字符串替代变量说明:
%c:备份片的拷贝数(从1开始编号);
%d:数据库名称;
%D:位于该月中的天数 (DD);
%M:位于该年中的月份 (MM);
%F:一个基于DBID 唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个1-256的序列;
%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称;
%p:该备份集中备份片的编号,从1 开始编号;
%U:是%u_%p_%c的简写形式,利用它可以为每一个备份片生成一个唯一名称,这是最常用的命名方式;
%s:备份集的号;
%t:备份集时间戳;
%T:年月日格式(YYYYMMDD);
注:如果在BACKUP命令中没有指定FORMAT选项,则RMAN默认使用%U为备份片段命名
①以SYSDBA身份登录
②查看数据库归档方式
③如果处于非归档方式,则将数据库处于归档方式下
④打开数据库
①连接目标数据库和恢复目录数据库
②备份数据库和归档日志
使用RMAN备份的数据库页只能使用RMAN提供的恢复命令进行恢复
RMAN恢复数据库用到了两个命令:
①保证数据库在MOUNT模式下启动
②在RMAN环境下
su -oracle
sqlplus-s sys/pwd123 as sysdba
SQL>shutdown immediate;
SQL> startupmount;
SQL> alterdatabase archivelog;
SQL> alterdatabase open;
SQL> archivelog list;
SQL> createtablespace rmants datafile '/opt/oracle/oradata/rmants.ora' size 20M;
SQL> createuser rman identified by rman default tablespace rmants temporary tablespacetemp;
SQL> grantconnect,resource to rman;
SQL> grantrecovery_catalog_owner to rman;
SQL> quit;
rmancatalog rman/rman
RMAN> createcatalog tablespace rmants;
rmantarget sys/pwd123
RMAN> connectcatalog rman/rman
RMAN> registerdatabase;
run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
allocate channel ch3 device type disk;
};
RMAN> quit;
mkdir -p/opt/oracle/rmanbak
rman catalog rman/rman
RMAN> connecttarget sys/pwd123;
RMAN> backupdatabase format '/opt/oracle/rmanbak/%d_%T.%U';
RMAN> backup database plus archivelog delete input;
(5)恢复
rman catalog rman/rman
RMAN> connecttarget sys/pwd123;
RMAN> shutdown immediate;
RMAN> startupmount;
RMAN> restoredatabase;
RMAN> recoverdatabase;
RMAN> alterdatabase open;
mkdir -p/opt/oracle/backup
sqlplussys as sysdba;
SQL>create directory dump_dir as '/opt/oracle/backup';
SQL> grantread,write on directory dump_dir to scott;
SQL>quit;
expdpscott/pwd123 directory=dump_dir dumpfile=scotttab-$(date +%F).dmptables=emp,dept;
sqlplussys as sysdba;
SQL> connscott/pwd123;
SQL> droptable emp;
SQL> quit;
impdp scott/pwd123 directory=dump_dirdumpfile=scotttab-2017-12-18.dmp tables=scott.emp
sqlplus sys as sysdba;
SQL> connscott/pwd123;
SQL> select* from emp;
注意:
①启用归档模式,闪回数据库只能处于归档模式
②建立闪回恢复区
③启用闪回日志
④查询是否成功启用闪回恢复区
⑤查询是否成功启用归档
⑥查询是否成功启用闪回数据库
闪回数据库基本语法为
FLASHBACK DATABASE [database] TO [SCN|TIMESTAMP expression]|
[SCN|TIMESTAMP expression]|
[BEFORE SCN|TIMESTAMPexpression]
参数说明:
sqlplussys as sysdba
SQL> shutdownimmediate;
SQL>startup mount;
SQL> alter database archivelog; //启用归档模式,闪回数据库只能处于归档模式
SQL> altersystem set db_recovery_file_dest='/opt/oracle/flash_recovery_area' scope=both; //设置闪回恢复区位置
SQL> altersystem set db_recovery_file_dest_size=3G scope=both; //设置闪回恢复区大小
SQL> altersystem set db_flashback_retention_target=1440; //设置闪回恢复区数据保留时间为一天,单位为min
SQL> shutdownimmediate;
SQL>startup mount;
SQL>alter database flashback on; //启用闪回日志
SQL> alterdatabase open;
SQL> showparameter db_recovery_file; //查询是否成功请闪回恢复区
SQL> archivelog list;
SQL> selectflashback_on from v$database; //查询是否成功启用闪回数据库
闪回数据库操作的限制
SQL> SELECTCURRENT_SCN FROM V$DATABASE; //查看当前的SCN
SQL>create table test1 (id number,name char(20)); //创建测试表
SQL>insert into test1 values(1,'database'); //插入数据
SQL> commit;
SQL> shutdownimmediate;
SQL> startupmount;
SQL>flashback database to scn 1032024; //闪回到SCN
SQL> alterdatabase open resetlogs; //开数据库
SQL> select* from test1; //查询报错
SQL>alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; //设置显示时间
SQL> selectoldest_flashback_scn, oldest_flashback_time from v$flashback_database_log; //查询数据库中当前的闪回SCN和时间
SQL> selectsysdate from dual; //查询当前系统时间
SQL> settime on //改变数据库当前时间状态
17:04:58 SQL> create table test2(id number,name char(20)); //创建测试表
17:05:22 SQL> insert into test2 values(1,'database'); //插入测试数据
17:05:44 SQL> commit;
17:05:48 SQL> shutdown immediate;
17:06:05 SQL> startup mount;
17:06:20 SQL> flashback database totimestamp(to_timestamp('2015-09-27 22:22:06','YYYY-MM-DD HH24:MI:SS'));
//闪回到指定时间
17:07:16 SQL> alter database open resetlogs; //开启数据库
17:07:31 SQL> select * from test2; //查询测试
必须满足下列条件
ALTER TABLE table ENABLE ROWMOVEMENT;
闪回表操作的基本语法为
FLASHBACK TABLE [schema.]table TO
SCN|TIMESTAMP expression
[ENABLE|DISABLE TRIGGERS]
参数说明:
SCN:将表恢复到指定的SCN时状态
TIMESTAMP:将表恢复到指定的时间点
ENABLE|DISABLE TRIGGER:在恢复表中数据的过程中,表上的触发器是激活还是禁用(默认为禁用)
注意:SYS或以AS SYSDBA身份登录的用户不能执行闪回表操作
SQL> grantselect any dictionary to scott;
SQL> quit;
sqlplusscott;
SQL> settime on
17:28:28 SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS'; //更新日期显示格式
17:28:44 SQL> select sysdate from dual;
17:28:55 SQL> create table test3(id number primary key, name char(30)); //插入测试数据
17:29:42 SQL> insert into test3 values(1,'zhang');
17:30:07 SQL> insert into test3 values(2,'zhao');
17:30:15 SQL> insert into test3 values(3,'wang');
17:30:23 SQL> commit;
17:54:55 SQL> select current_scn fromv$database; //查询当前scn号
17:55:14 SQL> update test3 set name='liu'where id=1; ##更新数据
17:55:33 SQL> commit ;
17:55:36 SQL> select * from test3;
17:31:51 SQL> alter table test3 enablerow movement; //启动test3表的ROW MOVEMENT特性
17:55:42 SQL> flashback table test3 totimestamp to_timestamp('2017-12-18 23:17:49','YYYY-MM-DD HH24:MI:SS');
//恢复表到指定时间
17:56:02 SQL> select * from test3;
闪回删除的基本语法为
FLASHBACK TABLE [schema.]table TO BEFOREDROP [RENAME TO table]
注意:不支持SYS用户,SYSTEM表空间下的对象也不能从回收站里拿到。故使用SYS或者SYSTEM用户登录时,查询为空
sqlplus sys as sysdba
SQL> alter system set recyclebin=on deferred; //启动回收站
SQL> showparameter recyclebin; //查看回收站是否启用
sqlplusas scott
SQL> create table exampe(id numberprimary key, name char(20));
SQL> insert into exampe values(1,'beforedrop');
SQL> commit;
SQL> drop table exampe;
SQL> flashback table exampe to beforedrop rename to new_example;
SQL> select *from new_example;
SQL> purge recyclebin; //清空回收站
SQL> selectobject_name,original_name,type from user_recyclebin; //查询是否为空
闪回查询:使用闪回查询功能,可以执行截止到特定时间的查询
语法:
select column_name[,...]
from table_name
[as of scn | timestamp expression]
[where condition]
sqlplus scott;
SQL> alter session setnls_date_format='YYYY-MM-DD HH24:MI:SS';
SQL> set time on;
18:01:38 SQL> select empno,sal fromscott.emp where empno=7844; //查询目前表记录值
18:01:50 SQL> update scott.emp setsal=2000 where empno=7844; //第一次更新数据
18:02:05 SQL> commit;
18:02:17 SQL> select empno,sal fromscott.emp where empno=7844; //查询第一次更改值
18:02:29 SQL> update scott.emp setsal=3000 where empno=7844; //第二次更新数据
18:02:36 SQL> commit;
18:02:43 SQL> select empno,sal fromscott.emp where empno=7844; //查询第二次更改值
18:02:47 SQL> select empno,sal fromscott.emp as of timestamp to_timestamp('2017-12-18 12:24:14','YYYY-MM-DDHH24:MI:SS') where empno=7844;
//删除查询未更改数据之前的数据值
18:03:31 SQL> select empno,sal fromscott.emp as of timestamp to_timestamp('2017-12-18 12:24:47','YYYY-MM-DDHH24:MI:SS') where empno=7844;
//删除查询第一次数据更改的数据值
18:04:32 SQL> select empno,sal fromscott.emp where empno=7844; //查询当前数据值