ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转]DBA管理-010

[转]DBA管理-010

原创 Linux操作系统 作者:31597359 时间:2019-02-07 12:00:06 0 删除 编辑
DBA管理-010

95.怎么样在恢复的时候移动数据文件,恢复到别的地点
给一个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;
}
96.怎么从备份片(backuppiece)中恢复(restore)控制文件与数据文件
可以使用如下方法,在RMAN中恢复备份片的控制文件
restore controlfile from backuppiecefile;
如果是9i的自动备份,可以采用如下的方法
restore controlfile from autobackup;
但是,如果控制文件全部丢失,需要指定DBID,如SET DBID=?
自动备份控制文件的默认格式是%F,这个格式的形式为
c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII就是DBID
至于恢复(restore)数据文件,oracle 816开始有个包dbms_backup_restore
在 nomount 状态下就可以执行,可以读 815甚至之前的备份片,读出来的文件用于恢复
可以在SQLPLUS中运行,如下
SQL>startup nomount
SQL> DECLARE
2 devtype varchar2(256);
3 done boolean;
4 BEGIN
5 devtype := dbms_backup_restore.deviceallocate('', params=>'');
6 dbms_backup_restore.restoresetdatafile;
7 dbms_backup_restore.restorecontrolfileto('E:Oracleoradatapennycontrol01.ctl');
8 dbms_backup_restore.restoreDataFileto(1,'E:Oracleoradatapennysystem01.dbf');
9 dbms_backup_restore.restoreDataFileto(2,'E:OracleoradatapennyUNDOTBS01.DBF');
10 dbms_backup_restore.restoreDataFileto(3,'E:ORACLEORADATAPENNYUSERS01.DBF');
11 dbms_backup_restore.restorebackuppiece('D:orabakBACKUP_1_4_04F4IAJT.PENNY',done=>done);
12 END;
13 /
PL/SQL 过程已成功完成。
SQL> alter database mount;
[Q]Rman的format格式中的%s类似的东西代表什么意义
[A]可以参考如下
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)

97.执行exec dbms_logmnr_d.build('Logminer.ora','file directory'),提示下标超界,怎么办
完整错误信息如下,
SQL> exec dbms_logmnr_d.build('Logminer.ora','file directory')
BEGIN dbms_logmnr_d.build('Logminer.ora','file directory'); END;
*
ERROR 位于第 1 行:
ORA-06532: 下标超出限制
ORA-06512: 在"SYS.DBMS_LOGMNR_D", line 793
ORA-06512: 在line 1
解决办法为:
<1>.编辑位于"$ORACLE_HOME/rdbms/admin"目录下的文件"dbmslmd.sql"
改变行:
TYPE col_desc_array IS VARRAY(513) OF col_description;

TYPE col_desc_array IS VARRAY(700) OF col_description;
并保存文件
<2>. 运行改变后的脚本
SQLPLUS> Connect internal
SQLPLUS> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql
<3>.重新编译该包
SQLPLUS> alter package DBMS_LOGMNR_D compile body;

98.执行execute dbms_logmnr.start_logmnr(DictFileName=>'DictFileName')提示ORA-01843:无效的月份,这个是什么原因
我们分析start_logmnr包
PROCEDURE start_logmnr(
startScn IN NUMBER default 0 ,
endScn IN NUMBER default 0,
startTime IN DATE default TO_DATE('01-jan-1988','DD-MON-YYYY'),
endTime IN DATE default TO_DATE('01-jan-2988','DD-MON-YYYY'),
DictFileName IN VARCHAR2 default '',
Options IN BINARY_INTEGER default 0 );
可以知道,如果TO_DATE('01-jan-1988','DD-MON-YYYY')失败,将导致以上错误
所以解决办法可以为
<1>、Alter session set NLS_LANGUAGE=American
<2>、用类似如下的方法执行
execute dbms_logmnr.start_logmnr (DictFileName=> 'f:temp2TESTDICT.ora', starttime => TO_DATE(
'01-01-1988','DD-MM-YYYY'), endTime=>TO_DATE('01-01-2988','DD-MM-YYYY'));

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8000572/viewspace-62294/,如需转载,请注明出处,否则将追究法律责任。

上一篇: [转]DBA管理-009
请登录后发表评论 登录
全部评论

注册时间:2006-10-07

  • 博文量
    120
  • 访问量
    77809