9.用open resetlogs打开数据库
SQL>alter database open resetlogs;
Database altered.
我测试的平台是11gR2的版本,在open resetlogs之后,自动在原来默认的路径创建了temp表空间和3组redo文件。
如果恢复目录和原来相同,就不用修改。
如果目录不同,我们就需要把这些文件移到我们现在的data目录。
源目录:
$cd /u01/app/Oracle/oradata/orcl
$ ls
redo01.log redo02.log redo03.log temp01.dbf
现在的目录:
$cd /u01/oradata/orcl
$ ls
control01.ctl example01.dbf sysaux01.dbf system01.dbf undotbs01.dbf users01.dbf
(1)处理online redo log
SQL>select group#,bytes/1024/1024||'M',status from v$log;
GROUP# BYTES/1024/1024||'M' STATUS
---------- ----------------------------------------- ----------------
1 50M CURRENT
2 50M UNUSED
3 50M UNUSED
SQL>select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
3 /u01/app/oracle/oradata/orcl/redo03.log
2 /u01/app/oracle/oradata/orcl/redo02.log
1 /u01/app/oracle/oradata/orcl/redo01.log
oracle至少有2组redo log。所以我们可以将已经完成归档的redo drop掉,重新创建。
SQL>alter database drop logfile group 3;
SQL>alter database add logfile group 3('/u01/oradata/orcl/redo03.log') size 50m;
Database altered.
SQL>alter database drop logfile group 2;
Database altered.
SQL>alter database add logfile group 2 ('/u01/oradata/orcl/redo02.log') size 50m;
Database altered.
SQL>alter system switch logfile;
System altered.
SQL>alter system checkpoint;
System altered.
SQL>select group#,bytes/1024/1024||'M',status from v$log;
GROUP# BYTES/1024/1024||'M' STATUS
---------- ----------------------------------------- ----------------
1 50MINACTIVE
2 50M INACTIVE
3 50M CURRENT
SQL>alter database drop logfile group 1;
Database altered.
SQL>alter database add logfile group 1 ('/u01/oradata/orcl/redo01.log') size 50m;
Database altered.
SQL>select group#,bytes/1024/1024||'M',status from v$log;
GROUP# BYTES/1024/1024||'M' STATUS
---------- ----------------------------------------- ----------------
1 50M UNUSED
2 50M INACTIVE
3 50M CURRENT
SQL>select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
3 /u01/oradata/orcl/redo03.log
2 /u01/oradata/orcl/redo02.log
1 /u01/oradata/orcl/redo01.log
(2)处理temp临时表空间
SQL>select name from v$tempfile;
NAME
--------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf
--表空间offline
SQL>alter database tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' offline;
Database altered.
--在OS级别移动temp的数据文件
SQL>!mv /u01/app/oracle/oradata/orcl/temp01.dbf /u01/oradata/orcl/temp01.dbf;
--修改控制文件中temp文件的信息
SQL>alter database rename file '/u01/app/oracle/oradata/orcl/temp01.dbf' to '/u01/oradata/orcl/temp01.dbf';
Database altered.
--temp表空间online
SQL>alter database tempfile '/u01/oradata/orcl/temp01.dbf' online;
Database altered.
--验证
SQL>select name from v$tempfile;
NAME
--------------------------------------------------
/u01/oradata/orcl/temp01.dbf
10. NID修改DBID和DBNAME
先查看,这个和我们之前的一样
SQL> select name,dbid from v$database;
NAME DBID
-------------------------------------------------- ----------
ORCL 1275959622
NOTE:
(1)在修改DBID期间仍然可能会遇到不可恢复的错误,所以修改之前备份数据库,特别是控制文件,因为nid会修改控制文件中的信息。
(2)需要将DB启动到mount状态才能修改。
SQL> shutdown immediate
SQL> startup mount;