数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle FAQ 之备份与恢复篇


发布日期:2023年01月11日
 
Oracle FAQ 之备份与恢复篇

[Q]如何开启/关闭归档

[A]如果开启归档请保证log_archive_start=true开启自动归档否则只能手工归档如果是关闭了归档则设置该参数为false

注意如果是OPS/RAC环境需要先把parallel_server = true注释掉然后执行如下步骤最后用这个参数重新启动

开启归档

a 关闭数据库shutdown immediate

b startup mount

c alter database archivelog

d alter database opne

禁止归档

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\ora\database\archive

Oldest online log sequence

Next log sequence to archive

Current log sequence

[Q]怎样设置定时归档

[A]i以上版本保证归档的最小间隔不超过n秒

设置Archive_lag_target = n

单位秒 范围~

[Q]不同版本怎么导出/导入

[A]导出用低版本导入用当前版本

如果版本跨越太大需要用到中间版本过渡

[Q]不同的字符集之前怎么导数据

[A]a前条件是保证导出/导入符合其他字符集标准如客户环境与数据库字符集一致

b修改dmp文件的字节为目标数据库的字符集注意要换成十六进制

参考函数(以下函数中的ID是十进制的)

nls_charset_name 根据字符集ID获得字符集名称

nls_charset_id 根据字符集名称获得字符集ID

[Q]怎么样备份控制文件

[A]再线备份为一个二进制的文件

alter database backup controlfile to $BACKUP_DEPT/controlfile [reuse];

备份为文本文件方式

alter database backup controlfile to trace [resetlogs|noresetlogs];

[Q]控制文件损坏如何恢复

[A]如果是损坏单个控制文件

只需要关闭数据库拷贝一个好的数据文件覆盖掉坏的数据文件即可

或者是修改initora文件的相关部分

如果是损失全部控制文件则需要创建控制文件或从备份恢复

创建控制文件的脚本可以通过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_outputenable();

for bk_ts in (select distinct tts#tname from v$tablespace tv$datafile d where tts#=dts#) loop

dbms_outputput_line(||bk_tsname);

dbms_outputput_line(alter tablespace ||bk_tsname|| begin backup;);

for bk_file in (select file#name from v$datafile where ts#=bk_tsts#) loop

dbms_outputput_line(host cp ||bk_filename|| $BACKUP_DEPT/);

end loop;

dbms_outputput_line(alter tablespace ||bk_tsname|| 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]如果是非当前日志而且归档可以使用

Alter database clear logfile group n来创建一个新的日志文件

如果该日志还没有归档则需要用

Alter database clear unarchived logfile group n

如果是当前日志损坏一般不能clear则可能意味着丢失数据

如果有备份可以采用备份进行不完全恢复

如果没有备份可能只能用_allow_resetlogs_corruption=true来进行强制恢复了但是这样的方法是不建议的最好在有Oracle support的指导下进行

[Q]怎么样创建RMAN恢复目录

[A]首先创建一个数据库用户一般都是RMAN并给予recovery_catalog_owner角色权限

sqlplus sys

SQL> create user rman identified by rman;

SQL> alter user rman default tablespace tools temporary tablespace temp;

SQL> alter user rman quota unlimited on tools;

SQL> grant connect resource recovery_catalog_owner to rman;

SQL> exit;

然后用这个用户登录创建恢复目录

rman catalog rman/rman

RMAN> create catalog tablespace tools;

RMAN> exit;

最后你可以在恢复目录注册目标数据库了

rman catalog rman/rman target backdba/backdba

RMAN> register database;

[Q]怎么样在恢复的时候移动数据文件恢复到别的地点

[A]给一个RMAN的例子

run {

set until time Jul ::;

allocate channel d type disk;

set newname for datafile /u/oracle/prod/sysproddbf

to /u/oracle/prod/sysproddbf;

set newname for datafile /u/oracle/prod/usrproddbf

to /u/oracle/prod/usrproddbf;

set newname for datafile /u/oracle/prod/tmpproddbf

to /u/oracle/prod/tmpproddbf;

restore controlfile to /u/oracle/prod/ctlprodora;

replicate controlfile from /u/oracle/prod/ctlprodora;

restore database;

sql alter database mount;

switch datafile all;

recover database;

sql alter database open resetlogs;

release channel d;

}

[Q]怎么从备份片(backuppiece)中恢复(restore)控制文件与数据文件

[A]可以使用如下方法在RMAN中恢复备份片的控制文件

restore controlfile from backuppiecefile;

如果是i的自动备份可以采用如下的方法

restore controlfile from autobackup;

但是如果控制文件全部丢失需要指定DBID如SET DBID=?

自动备份控制文件的默认格式是%F这个格式的形式为

cIIIIIIIIIIYYYYMMDDQQ其中IIIIIIIIII就是DBID

至于恢复(restore)数据文件oracle 开始有个包dbms_backup_restore

在 nomount 状态下就可以执行可以读 甚至之前的备份片读出来的文件用于恢复

可以在SQLPLUS中运行如下

SQL>startup nomount

SQL> DECLARE

devtype varchar();

done boolean;

BEGIN

devtype := dbms_backup_restoredeviceallocate( params=>);

dbms_backup_restorerestoresetdatafile;

dbms_backup_restorerestorecontrolfileto(E:\Oracle\oradata\penny\controlctl);

dbms_backup_restorerestoreDataFileto(E:\Oracle\oradata\penny\systemdbf);

dbms_backup_restorerestoreDataFileto(E:\Oracle\oradata\penny\UNDOTBSDBF);

dbms_backup_restorerestoreDataFileto(E:\ORACLE\ORADATA\PENNY\USERSDBF);

dbms_backup_restorerestorebackuppiece(D:\orabak\BACKUP___FIAJTPENNYdone=>done);

END;

/

PL/SQL 过程已成功完成

SQL> alter database mount;

[Q]Rman的format格式中的%s类似的东西代表什么意义

[A]可以参考如下

%c 备份片的拷贝数

%d 数据库名称

%D 位于该月中的第几天 (DD)

%M 位于该年中的第几月 (MM)

%F 一个基于DBID唯一的名称这个格式的形式为cIIIIIIIIIIYYYYMMDDQQ其中IIIIIIIIII为该数据库的DBIDYYYYMMDD为日期QQ是一个的序列

%n 数据库名称向右填补到最大八个字符

%u 一个八个字符的名称代表备份集与创建时间

%p 该备份集中的备份片号开始到创建的文件数

%U 一个唯一的文件名代表%u_%p_%c

%s 备份集的号

%t 备份集时间戳

%T 年月日格式(YYYYMMDD)

               

上一篇:赛门铁克Oracle启动Veritas数据中心认证

下一篇:oracle in和exists、not in和not exists原理和性能探究