[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的指导下进行。
如果不是current and active 日志坏了,仅是 inactive 坏了,则 clear log startup mount
alter database clear logfile '...'; 否则:
做下面的步骤前先备份您的数据库!!!!! _ALLOW_RESETLOGS_CORRUPTION = true statup mount
recover database using backup controlfile until cancel; cancel
alter database open resetlogs; ----- maybe error ,not serious shutdown
去掉该参数_ALLOW_RESETLOGS_CORRUPTION startup
[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 \switch datafile all; recover database;
sql \release channel d1; }
[Q]操作系统重装,如何恢复数据库? [A]两种方法
首先都是需要安装Oracle软件,最好按照原来的目录结构 1.把你的ORACLE文件全部COPY到另外一个分区
再安装ORACLE,按以前的所有的配置安装(SID,服务名,字符集)目录完全一致,安装后停掉所有ORACLE相关的服务,再把备份的文件COPY回来,重新启动服务,一般就OK了 2.你可以使用oradim创建一个实例,把所有文件恢复到原来的位置,就可以启动数据库了 这种方式省去了建库的过程 方法:
1。安装ORACLE软件
2。运行DBCA,创建数据库,位置什么的随便,只要SID,DBNAME,CHARACTERSET相同就得,到最后一步选保存为脚本,不运行建库,保存退出。 3。打开建库脚本(。BAT),手工运行语句(例子): mkdir E:\\oracle\\admin\\everac\\bdump mkdir E:\\oracle\\admin\\everac\\cdump mkdir E:\\oracle\\admin\\everac\\create mkdir E:\\oracle\\admin\\everac\\pfile mkdir E:\\oracle\\admin\\everac\%udump
mkdir v:\\database mkdir v:\\oradata\\everac set ORACLE_SID=everac1
E:\\oracle\\ora92\\bin\\oradim.exe -new -sid EVERAC1 -startmode m E:\\oracle\\ora92\\bin\\oradim.exe -edit -sid EVERAC1 -startmode a
E:\\oracle\\ora92\\bin\\orapwd.exe file=E:\\oracle\\ora92\\database\\PWDeverac1.ora password=change_on_install 4。可以联库,打开数据库。-----OVER
[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 \switch datafile all; recover database;
sql \release channel d1; }
[Q]执行exec dbms_logmnr_d.build('Logminer.ora','file directory'),提示下标超界,怎么办
[A]完整错误信息如下,
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: 在\ORA-06512: 在line 1 解决办法为:
1.编辑位于\目录下的文件\改变行:
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;
[Q]执行execute dbms_logmnr.start_logmnr(DictFileName=>'DictFileName')提示ORA-01843:无效的月份,这个是什么原因 [A]我们分析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:\\temp2\\TESTDICT.ora', starttime => TO_DATE(
'01-01-1988','DD-MM-YYYY'), endTime=>TO_DATE('01-01-2988','DD-MM-YYYY')); [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;