使用trace文件重建控制文件的时候会经常忽略其中只读表空间,这种方式重建后的只读表空间的其实在置成读写的时候会出现类似ORA-0
使用trace文件重建控制文件的时候会经常忽略其中只读表空间,,这种方式重建后的只读表空间的其实在置成读写的时候会出现类似
ora-01135: file 6 accessed for dml/query is offline
ora-01111: name for data file 6 is unknown - rename to correct file
ora-01110: data file 6: '/u01/app/oracle/product/10.2.1/db_1/dbs/missing00006'
的错误,大体分类一下:
当存在read only表空间时,重建控制文件分两种情况:
1、重建controlfile的脚本中包含read only所对应的datafile,datafile不需要rename。
2、重建controlfile的脚本中不包含read only所对应的datafile;重建controlfile之后需要rename datafile到正确的位置。
测试环境:oracle 10g database:prod
演示:
1,查看表空间状态
注意此时oltp表空间是read only状态。
sys@prod>select tablespace_name,status from dba_tablespaces;
tablespace_name status
------------------------------ ---------
system online
undotbs online
sysaux online
temp01 online
temp02 online
users online
tools online
oltp read only
mssm online
9 rows selected.
2,备份控制文件到trace
sys@prod>alter database backup controlfile to trace;
database altered.
3,开始重建控制文件过程:(停库=>nomount状态=>执行trace重建脚本)
sys@prod>shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sys@prod>startup nomount;
oracle instance started.
total system global area 314572800 bytes
fixed size 1219184 bytes
variable size 100664720 bytes
database buffers 209715200 bytes
redo buffers 2973696 bytes
4,此处模拟删除唯一的控制文件
sys@prod>show parameter control_files
name type value
------------------------------------ ----------- ------------------------------
control_files string /u01/app/oracle/oradata/prod/d
isk1/control1.ctl
prod@rhel1$ rm disk1/control1.ctl
5,执行trace脚本
1)如果打开备份产生的trace文件我们可以在后面看到控制文件的重建语句(仔细研究trace文件可以发现很多关于控制文件的重要信息)
产生的trace文件位于$oracle_base/admin/$oracle_sid/udump/目录下,如果不知道是哪个文件可以使用如下语句查找:
select
d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from
( select p.spid
from sys.v$mystat m,sys.v$session s,sys.v$process p
where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
( select t.instance from sys.v$thread t,sys.v$parameter v
where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,
( select value from sys.v$parameter where name = 'user_dump_dest') d ;
返回:
trace_file_name
--------------------------------------------------------------------------------
/u01/app/oracle/admin/prod/udump/prod_ora_13341.trc
或这使用下列方法获取pid
select a.spid from
v$process a,v$session b
where a.addr=b.paddr and b.username = 'sys';
返回:
spid
------------
13341
2)找到trace文件中的这段:
===========================================================
create controlfile reuse database "prod" noresetlogs archivelog
maxlogfiles 30
maxlogmembers 5
maxdatafiles 100
maxinstances 1
maxloghistory 292
logfile
group 1 (
'/u01/app/oracle/oradata/prod/disk1/redo01.log',
'/u01/app/oracle/oradata/prod/disk2/redo01_b.log'
) size 100m,
group 2 (
'/u01/app/oracle/oradata/prod/disk1/redo02.log',
'/u01/app/oracle/oradata/prod/disk2/redo02_b.log'
) size 100m,
group 3 (
'/u01/app/oracle/oradata/prod/disk1/redo03.log',
'/u01/app/oracle/oradata/prod/disk2/redo03_b.log'
) size 100m
-- standby logfile
datafile
'/u01/app/oracle/oradata/prod/disk1/system01.dbf',
'/u01/app/oracle/oradata/prod/disk1/undotbs01.dbf',
'/u01/app/oracle/oradata/prod/disk1/sysaux01.dbf',
'/u01/app/oracle/oradata/prod/disk1/users_01.dbf',
'/u01/app/oracle/oradata/prod/disk1/tools_01.dbf',
'/u01/app/oracle/oradata/prod/disk1/mssm_01.dbf'
character set us7ascii;
===========================================================
==注意此时的trace文件中没有只读表空间的信息,如果在这个脚本的datafile后面加上oltp的正确位置名就没有rename的过程了。
3)保存成脚本恢复使用:
prod@rhel1 /home/oracle$ vi con.sql

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号