使用trace文件重建控制文件时的只读表空间处理

php中文网
发布: 2016-06-07 17:17:40
原创
1153人浏览过

使用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                            

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号