[Q]如何开启/关闭归档 [A]如果开启归档,请保证log_archive_start=true开启自动归档,否则只能手工归档,如果是关闭了归档,则设置该参数为false 注意:如果是OPS/RAC环境,需要先把parallel_server = true注释掉,然后执行如下步骤,最后用这个参数重新启动 1、开启归档 a. 关闭数据库shutdown immediate b. startup mount c. alter database archivelog d. alter database opne 2、禁止归档 a. 关闭数据库shutdown immediate b. startup mount c. alter database noarchivelog d. alter database open 归档信息可以通过如下语句查看 SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination E:/oracle/ora92/database/archive Oldest online log sequence 131 Next log sequence to archive 133 Current log sequence 133
[Q]怎样设置定时归档 [A]9i以上版本,保证归档的最小间隔不超过n秒 设置Archive_lag_target = n 单位:秒 范围:0~7200
[Q]怎么样备份控制文件 [A]再线备份为一个二进制的文件 alter database backup controlfile to '$BACKUP_DEPT/controlfile.000' [reuse]; 备份为文本文件方式 alter database backup controlfile to trace [resetlogs|noresetlogs];
[Q]怎么样热备份一个表空间 [A]Alter tablespace 名称 begin backup; host cp 这个表空间的数据文件 目的地; Alter tablespace 名称 end backup; 如果是备份多个表空间或整个数据库,只需要一个一个表空间的操作下来就可以了。
[Q]怎么快速得到整个数据库的热备脚本 [A]可以写一段类似的脚本 SQL>set serveroutput on begin dbms_output.enable(10000); for bk_ts in (select t.ts#,t.name from v$tablespace t,v$datafile d where t.ts#=d.ts#) loop dbms_output.put_line('--'||bk_ts.name); dbms_output.put_line('alter tablespace '||bk_ts.name||' begin backup;'); for bk_file in (select file#,name from v$datafile where ts#=bk_ts.ts#) loop dbms_output.put_line('host cp '||bk_file.name||' $BACKUP_DEPT/'); end loop; dbms_output.put_line('alter tablespace '||bk_ts.name||' end backup;'); end loop; end; /
[Q]丢失一个数据文件,没有备份但是有该数据文件创建以来的归档怎么恢复 [A]保证如下条件 a. 不能是系统数据文件 b. 不能丢失控制文件 如果满足以上条件,则 SQL>startup mount SQL>Alter database create datafile 'file name' as 'file name' size ... reuse; SQL>recover datafile n; -文件号 或者 SQL>recover datafile 'file name'; 或者 SQL>recover database; SQL>Alter database open;
[Q]联机日志损坏如何恢复 [A]1、如果是非当前日志而且归档,可以使用 Alter database clear logfile group n来创建一个新的日志文件 如果该日志还没有归档,则需要用 Alter database clear unarchived logfile group n 2、如果是当前日志损坏,一般不能clear,则可能意味着丢失数据 如果有备份,可以采用备份进行不完全恢复 如果没有备份,可能只能用_allow_resetlogs_corruption=true来进行强制恢复了,但是,这样的方法是不建议的,最好在有Oracle support的指导下进行。
[Q]怎么样在恢复的时候移动数据文件,恢复到别的地点 [A]给一个RMAN的例子 run { set until time 'Jul 01 1999 00:05:00'; allocate channel d1 type disk; set newname for datafile '/u04/oracle/prod/sys1prod.dbf' to '/u02/oracle/prod/sys1prod.dbf'; set newname for datafile '/u04/oracle/prod/usr1prod.dbf' to '/u02/oracle/prod/usr1prod.dbf'; set newname for datafile '/u04/oracle/prod/tmp1prod.dbf' to '/u02/oracle/prod/tmp1prod.dbf'; restore controlfile to '/u02/oracle/prod/ctl1prod.ora'; replicate controlfile from '/u02/oracle/prod/ctl1prod.ora'; restore database; sql "alter database mount"; switch datafile all; recover database; sql "alter database open resetlogs"; release channel d1; }