主要是小结之前遇到的备份恢复,内容很多分几次小结。
1 增加控制文件备份
select * from v$controlfile;
增加控制文件
alter system set control_files='d:\demo1\control01.ctl','c:\demo\control02.ctl' scope=spfile;
shutown 后,用host copy后再startup
2 多元化重做日志
col member format a30
select group#,member from v$logfile;
增加日志成员
alter database add logfile member
'xxxxxxx' to group 1,
'xxxxxxx' to group 2,
'xxxxx' to group 3;
3
降低UNdO时间,启动多个slave进程,设置fast_start_parallel_rollback,如果为false,则不启动slave进程,
如果设置为low,slave进程为CPU个数2倍,high为4倍
alter system set fast_start_parallel_rollback=high;
4 改变归档模式
先查一下
select log_mode from v$database;
shutdown immediate
startup mount
alter database archivelog;
alter database open;
5 设置归档位置
alter system set log_archive_dest_1='location=c:\demo\archive mandatory';
alter system set log_archive_dest_2='location=d:\demo\archive mandatory';
其中mandatory表明要强制归档
如果归档位置磁盘满了,可以临时禁止该位置
alter system set log_archive_dest_state_2=defer;
搞好后,
alter system set log_archive_dest_state_2=enable;
6 控制归档进程数
默认为2个归档进程,改变
alter system set log_archive_max_processes=3;
7 如果是本地存放归档日志的话,可以
第一个位置 alter system set log_archive_dest='d:\demo\archive1';
第二个位置 alter system set log_archive_duplex_dest='xxxx';
8 显示归档信息
archive log list;
显示归档日志信息
col name for a40
select name,sequence#,first_change# from v$archived_log;
显示其位置
col dest_name for a20
col destination for a20
select dest_name,destination,status from v$archive_dest;
显示所有归档进程的信息
select * from v$archive_processes;
9 手工切换日志
alter system switch logfile;
10 数据的备份
A 一致性备份
当数据库关闭后,用host copy把数据文件和控制文件COPY到其他地方
B 不一致备份
当open状态时的备份,只能用archivelog模式,
列出数据文件
select name from v$datafile;
alter database begin backup;
用host copy所有数据文件
alter database backup controlfile to 'd:\backup\demo.ctl'
alter database end backup;
alter system archive log current;
11 表空间备份
A 脱机备份
查看该表空间包含哪些数据文件
select file_name from dba_data_files where tablespace_name='USERS';
select tablespace_name from dba_data_files;(查看有多少个表空间)
之后alter tablespace xxx offline;
再用hostcopy,如果备份表空间,则要复制其下的所有文件
alter tablespace xxx online;
B 联机备份
和第一步差不多,只不过第二步用alter tablespace begin backup;最后用
alter tablespace end backup;
12 备份归档日志
显示过去一天以来的归档日志
select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;
再用host copy
13 备份spfile
create pfile='d:\backup\demo.par' from spfile='xxxx.or';
14 mount状态下恢复数据文件
当有备份数据文件在其他地方时,mout状态时
host copy 原来位置的dbf 目的位置的dbf(这里是之前备份的dbf)
alter database rename file '原来位置的dbf' to '目的位置的dbf';
之后还要用recover database,只能在mount状态下运行
startup force mount
recover database
恢复表空间,在open状态下
recover tablespace users
recover datafile
recover datafile 'd:\xxxx.dbf';
查看要恢复的数据文件
col error for a20
select file#,error,change# from v$recover_file;
可以查出哪个文件要恢复
15 当 system表空间损坏的恢复
归档模式肯定要的了。而且首先要备份好system01.dbf到其他磁盘,下面模拟下
shutdown immediate
host del xxxx.dbf
恢复时
startup mount
select file#,error,change# from v$recover_file;
查出要恢复的文件好,比如为1
host move d:\backup\system01.dbf d:\demo
recover datafile 1
alter database open
如果原来放system空间的磁盘损坏,要这样另外指定其位置
host copy d:\backup\system01.dbf e:\demo
alter database rename file 'd:\demo\system01.dbf' to 'e:\demo\system01.dbf'
16 恢复user表空间
shutdown immediate
host del xxxx.dbf
恢复时
startup mount
select file#,error,change# from v$recover_file;
查出要恢复的文件好,比如为4
alter database datafile 4 offline;
再打开数据库
alter database open;
host copy d:\backup\users01.dbf e:\demo\users01.dbf
recover datafile 4
alter database datafile 4 online;
(如果表空间里很多数据文件,可以这样)
alter tablespace users offline for recover;
host copy d:\backup\users01.dbf e:\demo\users01.dbf
recover tablespace users;
alter tablespace users online;
17 在open状态,归档模式下恢复未备份的数据文件
create tablespace user01 datafile 'd:\demo\user01.dbf' size 5m;
create table test_3(cola int) tablespace user01;
insert into test_3 values(1);
commit;
alter system switch logfile;
模拟删除
shutdown immediate;
host del d:\demo\user01.dbf
startup mount
alter database datafile 'd:\demo\user01.dbf' offline;
alter database open;
alter database create datafile 'd:\demo\user01.dbf';
recover datafile 'd:\demo\user01.dbf'
alter database datafile 'd:\demo\user01.dbf' online;
18 恢复控制文件
当某个控制文件损坏后,可以这样
alter system set control_files='备份\control1.ctl' scope=spfile
startup force
19 日志组中某个日志损坏的恢复
alter system switch logfile;
alter database drop logfile member '损坏的xxx.log';
然后要增加一个
alter database add logfile member 'xxxx.log' to group 1;
20 非活动日志组的所有日志成员全部损坏
A OPEN状态时
alter database clear unarchived logfile group 1;
B 非open时
alter database add logfile ('xxxx\xx.log','xxxx\xxx.log') size 10m;
alter database drop logfile group 1;
alter database open;
21 当前活动日志组的全部成员损坏
A 关闭状态下 出错,则打开数据库后用
recover database until cancel
alter database resetlogs;
B OPEN状态下
则必须startup mount后,用host copy把全部备份的数据文件.dbf COPY回去
然后用recover database until cancel
alter database open resetlogs;