|  
  Oracle数据库的备份与恢复技术方案 
[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]导出用低版本,导入用当前版本  
如果版本跨越太大,需要用到中间版本过渡  
[Q]不同的字符集之前怎么导数据  
[A]a.前条件是保证导出/导入符合其他字符集标准,如客户环境与数据库字符集一致。  
b.修改dmp文件的2、3字节为目标数据库的字符集,注意要换成十六进制。  
参考函数(以下函数中的ID是十进制的):  
nls_charset_name 根据字符集ID获得字符集名称  
nls_charset_id 根据字符集名称获得字符集ID  
[Q]怎么样备份控制文件  
[A]再线备份为一个二进制的文件  
alter database backup controlfile to '$BACKUP_DEPT/controlfile.000' [reuse];  
备份为文本文件方式  
alter database backup controlfile to trace [resetlogs|noresetlogs];  
[Q]控制文件损坏如何恢复  
[A]1、如果是损坏单个控制文件  
只需要关闭数据库,拷贝一个好的数据文件覆盖掉坏的数据文件即可  
或者是修改init.ora文件的相关部分  
2、如果是损失全部控制文件,则需要创建控制文件或从备份恢复  
创建控制文件的脚本可以通过alter database backup controlfile to trace获取。  
[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]如果没有备份只能是删除这个数据文件了,会导致相应的数据丢失。  
SQL>startup mount  
--ARCHIVELOG模式命令  
SQL>Alter database datafile 'file name' offline;  
--NOARCHIVELOG模式命令  
SQL>Alter database datafile 'file name' offline drop;  
SQLl>Alter database open;  
注意:该数据文件不能是系统数据文件  
[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;  
}  本文出自:亿恩科技【www.enkj.com】 
      
      
		服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM] 
       |