首页 数据库 mysql教程 例子2之解决ORA

例子2之解决ORA

Jun 07, 2016 pm 03:48 PM
o 例子 停机 待机 方式 解决

VC Appliance停机是用待机方式将Oracle数据库停了。再启动时,Oracle不能启动。用SQLPLUS中的Starup命令。出现下面的提示: 由于ORA-03113错误是一个通用的错误提示,能给的信息量很少。 于是一步步的来Debug,由于startup相当于3个命令的集合,就一步步地执

VC Appliance停机是用待机方式将Oracle数据库停了。再启动时,Oracle不能启动。用SQLPLUS中的Starup命令。出现下面的提示:

例子2之解决ORA

由于ORA-03113错误是一个通用的错误提示,能给的信息量很少。

于是一步步的来Debug,由于startup相当于3个命令的集合,就一步步地执行

先执行

SQL>startup nomount

并没有发现什么明显的失败信息,说明启动数据库实例是没有问题的,再执行第二步

SQL>alter database mount;

出现故障

例子2之解决ORA

看来故障出现在挂载数据库文件时,这一步骤主要是“允许特定的维护操作, 例如, 重命名数据文件, 添加, 删除或重命名重做日志文件, 启用和禁用重做归档选项, 执行完全数据库恢复。它不允许对数据库进行一般的访问。”

找到$ORACLE_HOME/rdbms/log目录,用ls -ltr找到最近的日志文件。在本例中是sales_ora_27010.trc

例子2之解决ORA

看来是olr.loc和ocr.loc两个文件不能打开。但是我的机器上根本没有这个文件。在网上搜索,发现这两个文件和Oracle的集群有关,我这里是单节点的,按说是不需要Oracle Local Registry的。

在网上搜索,也没有什么特别有用的提示,但是发现了另一个问题,就是我找的日志文件可能不对,找了原来安装时导出的备份虚拟机,用命令

SQL>show parameter background

找到正确的日志路径/usr/local/oracle/diag/rdbms/oracle/sales/trace

查看启动时的日志,在最后发现

Starting ORACLE instance (normal)

LICENSE_MAX_SESSION = 0

LICENSE_SESSIONS_WARNING = 0

Picked latch-free SCN scheme 3

Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST

Autotune of undo retention is turned on.

Wed Aug 07 15:37:46 2013

SMON started with pid=13, OS id=30687

Wed Aug 07 15:37:46 2013

RECO started with pid=14, OS id=30689

Wed Aug 07 15:37:46 2013

MMON started with pid=15, OS id=30691

starting up 1 dispatcher(s) for network address ‘(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))’…

Wed Aug 07 15:37:46 2013

MMNL started with pid=16, OS id=30693

starting up 1 shared server(s) …

ORACLE_BASE from environment = /usr/local/oracle

Wed Aug 07 15:37:46 2013

ALTER DATABASE   MOUNT

USER (ospid: 30698): terminating the instance

Instance terminated by USER, pid = 30698

重试了多次,结果大多类似。在日志相同目录里,找到最近的trc文件,发现如下内容:

[root@localhost trace]# vi sales_ora_20498.trc

Release:        2.6.32-279.el6.x86_64

Version:        #1 SMP Fri Jun 22 12:19:21 UTC 2012

Machine:        x86_64

Instance name: sales

Redo thread mounted by this instance: 0

Oracle process number: 19

Unix process pid: 20498, image: oracle@localhost.localdomain (TNS V1-V3)

*** 2013-08-08 09:23:49.818

*** SESSION ID:(125.37) 2013-08-08 09:23:49.818

*** CLIENT ID:() 2013-08-08 09:23:49.818

*** SERVICE NAME:() 2013-08-08 09:23:49.818

*** MODULE NAME:(sqlplus@localhost.localdomain (TNS V1-V3)) 2013-08-08 09:23:49.818

*** ACTION NAME:() 2013-08-08 09:23:49.818

Error: kccpb_sanity_check_2

Control file sequence number mismatch!

fhcsq: 38637 bhcsq: 38638 cfn 0

*** 2013-08-08 09:23:49.819

USER (ospid: 20498): terminating the instance

从上面来看,是控制文件故障。

现在重建控制文件,先到日志文件中找到一个相关参数的例子,在alert_sales.log文件中找出

Create controlfile reuse set database “oracle”

MAXINSTANCES 8

MAXLOGHISTORY 1

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

Datafile

‘/usr/local/oradata/ora11g/ORA11G/oracle/system01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/sysaux01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/undotbs01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/users01.dbf’

LOGFILE GROUP 1 (‘/usr/local/oradata/ora11g/ORA11G/oracle/redo01.log’) SIZE 51200K,

GROUP 2 (‘/usr/local/oradata/ora11g/ORA11G/oracle/redo02.log’) SIZE 51200K,

GROUP 3 (‘/usr/local/oradata/ora11g/ORA11G/oracle/redo03.log’) SIZE 51200K RESETLOGS

WARNING: Default Temporary Tablespace not specified in CREATE DATABASE command

Default Temporary Tablespace will be necessary for a locally managed database in future release

Successful mount of redo thread 1, with mount id 1691519286

Completed: Create controlfile reuse set database “oracle”

然后,根据网上“如何获得创建控制文件脚本并创建脚本”一文中的脚本模板

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE “PRIMARY” NORESETLOGS  ARCHIVELOG

–  SET STANDBY TO MAXIMIZE PERFORMANCE

MAXLOGFILES 5

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 ‘/opt/oracle/oradata/primary/redo01.log’  SIZE 10M,

GROUP 2 ‘/opt/oracle/oradata/primary/redo02.log’  SIZE 10M,

GROUP 3 ‘/opt/oracle/oradata/primary/redo03.log’  SIZE 10M

– STANDBY LOGFILE

DATAFILE

‘/opt/oracle/oradata/primary/system01.dbf’,

‘/opt/oracle/oradata/primary/undotbs01.dbf’,

‘/opt/oracle/oradata/primary/users01.dbf’

CHARACTER SET ZHS16GBK

;

RECOVER DATABASE

ALTER SYSTEM ARCHIVE LOG ALL;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE ‘/opt/oracle/oradata/primary/temp01.dbf’

SIZE 41943040  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

在SQL>下先运行startup nomount,然后直接将根据上面和日志中参数,定义下面的脚本直接粘贴到SQL>下

CREATE CONTROLFILE REUSE DATABASE “oracle” NORESETLOGS  ARCHIVELOG

–  SET STANDBY TO MAXIMIZE PERFORMANCE

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 1

LOGFILE

GROUP 1 ‘/usr/local/oradata/ora11g/ORA11G/oracle/redo01.log’  SIZE 51200K,

GROUP 2 ‘/usr/local/oradata/ora11g/ORA11G/oracle/redo02.log’  SIZE 51200K,

GROUP 3 ‘/usr/local/oradata/ora11g/ORA11G/oracle/redo03.log’  SIZE 51200K

– STANDBY LOGFILE

DATAFILE

‘/usr/local/oradata/ora11g/ORA11G/oracle/vpx01.dbf’,

–’/usr/local/oradata/ora11g/ORA11G/oracle/temp01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/system01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/sysaux01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/undotbs01.dbf’,

‘/usr/local/oradata/ora11g/ORA11G/oracle/users01.dbf’

在上面脚本中,我重试了几次,一次是日志大小,我想改成10M,但是不成功,另一次是提示temp01.dbf不是有效的数据库文件,我只有把它注释掉了,只能参照网上的脚本,一步步运行

例子2之解决ORA

其中,最后一句

ALTER TABLESPACE TEMP ADD TEMPFILE ‘/usr/local/oradata/ora11g/ORA11G/oracle/temp01.dbf’ SIZE 20480K REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED

我也是从日志文件中找出来的。

根据上面显示的结果,应该是恢复成功了。

先重启操作系统。再手工启动Oracle,一切正常,但是对应的VCSA却不能启动,用OEM进去看到有数据块错误

例子2之解决ORA

从图中可以看到,ORA-01578错误,出现文件损坏,Block是45953。

用dbv命令检查文件

[oracle@localhost ~]$ dbv FILE=’/usr/local/oradata/ora11g/ORA11G/oracle/vpx01.dbf’ BLOCKSIZE=8192

得到下面的结果:

例子2之解决ORA

从中可以看出,被标记会Corrupt的块有452个。

再查询是哪些损坏的哪些内容:

Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=5 and 45953 between block_id and block_id+blocks-1;

结果如下:

例子2之解决ORA

说明损坏的是LOBSEGMENT

用命令找到损坏的表名和列名

select table_name, column_name from dba_lobs where segment_name=’SYS_LOB0000075100C00016$$’ and owner =’VPXADMIN’;

结果为:

例子2之解决ORA

select count(*) from VPXADMIN.VPX_RESOURCE_POOL;

发现这个表中只有8行数据。

ROWID                      ID

—————— ———-

AAASVcAAFAAACfjAAA          8

AAASVcAAFAAACfkAAB        523

AAASVcAAFAAACfkAAA        816

AAASVcAAFAAACfkAAC        826

AAASVcAAFAAACfkAAD        833

AAASVcAAFAAACfkAAE        839

AAASVcAAFAAACflAAB       1212

AAASVcAAFAAACfjAAC       1601

一行一行地试

select * from VPXADMIN.VPX_RESOURCE_POOL where id>1212;

发现ID=1212的这条记录是损坏的。

delete  from  VPXADMIN.VPX_RESOURCE_POOL where id=1212;

删除后,这个表可以正常地访问了,用DBV检查,结果没有什么不同。

shutdown immadiate数据库,提示没有Commit,看来删除并没有真正成功,于是在SQL命令行下,直接输入commit提交了修改。然后可以关闭数据库了。重启数据库DBV检查情况并无改观,说明这些还不够。

想了半天,也没有什么头绪,回到OEM页面中,在“可用 性”里面,选择了“执行恢复”,看看能不能将表空间VPX恢复到8月3日之前。

点了半天后,提示操作失败,同时VPX也脱机了,在图形界面中却怎么为无法联机。真是事情越搞越乱,好在问题并不复杂,在SQL环境下,执行

recover datafile 5

alter database datafile 5 online;

alter tablespace VPX online;

就可以联机了。

再回到原来的问题。

排查到现在,还有两个方向研究,一个是从vCenter服务器不能启动服务入手,查看日志,查看出错的地点和原因。一个还是从DBV出的错误结果入手。

先从DBV入手,在网上搜索到这篇文章,发现,可能根据DBV出的错误信息找到出错的文件和块,从而找到对应的表。

下面一部分的DBV 201错误块信息

DBV-00201: Block, DBA 21044390, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044391, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044393, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044394, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044395, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044397, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044398, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044399, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044401, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044402, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044403, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044406, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044407, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044410, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044411, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044412, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044414, marked corrupt for invalid redo application

DBV-00201: Block, DBA 21044415, marked corrupt for invalid redo application

根据最后的显示,应该有452个块,这里这是一部分,因为终端显示不完全。

拿最后一个来测试一下

select dbms_utility.data_block_address_file(21044415) from dual;

select dbms_utility.data_block_address_block(21044415) from dual;

结果是File为5,Block为72895。再用

Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=5 and 72895 between block_id and block_id+blocks-1;

得到Segment名为SYS_LOB0000075068C00059$$用

select table_name, column_name from dba_lobs where segment_name=’SYS_LOB0000075068C00059$$’ and owner =’VPXADMIN’

得到表名为VPX_HOST,列表为RESOURCE_INFO,测试一下:

例子2之解决ORA

这里又出现了一个块10309,用相同的方法找到是VPX_HOST表中的另一个列CAPABILITY,这种方法很明显能找到故障表,但是对于修复却帮助不大,因为数量太大,没有办法手工处理。

按上文中提到的修复方法先创一个表

create table corrupted_data (corrupted_rowid rowid);

然后,在SQL提示符下粘贴下面脚本代码,最后用/结束并运行。

set concat off

declare

error_1578 exception;

pragma exception_init(error_1578,-1578);

n number;

begin

for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop

begin

n:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw(’889911′));

exception

when error_1578 then

insert into corrupted_data values (cursor_lob.r);

commit;

end;

end loop;

end;

根据提示符,输入需要的各变量值,列名为RESOURCE_INFO,所有者VPXADMIN,表名为VPX_HOST。脚本会把有问题行的ROWID写到上表创建的表中。上面的代码中hextoraw(’889911′)有点奇怪,不知道是什么意思,在上文最后到是提到了,原来这个值是随便写的,主要是让n总是返回0值。

然后再将有问题行中的对应列数据填为空值。

set concat off

update &table_owner.&table_with_lob set &lob_column=empty_blob() where rowid in (select corrupted_rowid from corrupted_data);

出现下面的错误提示

ORA-00932: inconsistent datatypes: expected NCLOB got BLOB

于是将上面的代码修改成

update &table_owner.&table_with_lob set &lob_column=empty_clob() where rowid in (select corrupted_rowid from corrupted_data);

再试一次,Update成功。(如果类型是XMLTYPE则用XMLType.createXML(”)代替empty_clob()。)

回到命令行方式,用DBV再试一次,结果却仍是有452个Page被标记为坏。

但是这次用Select * from vpxadmin.vpx_host;能返回正常的值了。说明表的确是被修复了。但量DBV结果仍标记为Corrupted,用DBV来找坏表的实用性就差了许多。像这样有452个坏块,一个一个地测试,太麻烦了。

转到vCenter的服务器中,

例子2之解决ORA

发现在启动过程中,初始化VPXD时出错。

查看/var/log/vmware/vpx目录下的日志。大致可判断为数据库中数据读出来后,反序列化出错。但是因为上面的原因我又找到不出故障的表的内容,用OEM在表空间里试了几个表,都是好的,从VCenter日志中也找不出线索,问题就变成死问题了。

看来只能重建一个表空间给vCenter用,原来保留的数据也只有放弃了。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1659
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1232
24
五招教你解决黑鲨手机开不了机的问题! 五招教你解决黑鲨手机开不了机的问题! Mar 24, 2024 pm 12:27 PM

随着智能手机技术的不断发展,手机在我们日常生活中扮演着越来越重要的角色。而作为一款专注于游戏性能的旗舰手机,黑鲨手机备受玩家青睐。然而,有时候我们也会面临到黑鲨手机开不了机的情况,这时候我们就需要采取一些措施来解决这一问题。接下来,就让我们来分享五招教你解决黑鲨手机开不了机的问题:第一招:检查电池电量首先,确保你的黑鲨手机有足够的电量。可能是因为手机电量耗尽

小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? 小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? Mar 22, 2024 am 08:06 AM

随着社交媒体的不断发展,小红书已经成为越来越多年轻人分享生活、发现美好事物的平台。许多用户在发布图片时遇到了自动保存的问题,这让他们感到十分困扰。那么,如何解决这个问题呢?一、小红书发布自动保存图片怎么解决?1.清除缓存首先,我们可以尝试清除小红书的缓存数据。步骤如下:(1)打开小红书,点击右下角的“我的”按钮;(2)在个人中心页面,找到“设置”并点击;(3)向下滚动,找到“清除缓存”选项,点击确认。清除缓存后,重新进入小红书,尝试发布图片看是否解决了自动保存的问题。2.更新小红书版本确保你的小

无法在此设备上加载驱动程序怎么解决?(亲测有效) 无法在此设备上加载驱动程序怎么解决?(亲测有效) Mar 14, 2024 pm 09:00 PM

  大家都知道,如果电脑无法加载驱动程序,该设备可能就无法正常工作或与计算机进行正确的交互。那在电脑上弹出无法在此设备上加载驱动程序的提示框,我们要如何解决呢?下面小编就教大家两招轻松解决问题。  无法在此设备上加载驱动程序解决方法  1、开始菜单搜索“内核隔离”。  2、将内存完整性关闭,上方提示“内存完整性已关闭。你的设备可能易受攻击。”点击后方忽略即可,不会对使用有影响。  3.重启机器之后即可解决问题。

黑鲨手机充电故障排查与解决 黑鲨手机充电故障排查与解决 Mar 22, 2024 pm 09:03 PM

黑鲨手机是一款以性能强悍、游戏体验出色而著称的智能手机品牌,备受广大游戏玩家和科技爱好者的喜爱。然而,就像其他智能手机一样,黑鲨手机也会出现各种问题,其中充电故障是比较常见的一种。充电故障不仅会影响手机的正常使用,还可能引发更严重的问题,因此及时解决充电问题十分重要。本文将从常见的黑鲨手机充电故障原因入手,介绍排查和解决充电问题的方法,希望能帮助读者解决黑鲨

简单步骤:解决VSCode中文界面无法显示问题 简单步骤:解决VSCode中文界面无法显示问题 Mar 25, 2024 am 11:57 AM

我的步骤如下:解决VSCode中文界面无法显示问题有人在安装VSCode后发现,无论设置什么语言,界面总是显示为方框或乱码,非常困扰。这往往是由于系统缺少语言支持包或字体问题导致的。下面我将分享一些简单的解决步骤,帮助您修复VSCode中文界面无法显示的问题。步骤一:安装中文语言包首先,我们需要为VSCode安装中文语言包。打开VSCode,依次点击左下角的

地下城与勇士手游53没有主线怎么办 地下城与勇士手游53没有主线怎么办 Mar 18, 2024 pm 05:31 PM

玩家在地下城与勇士手游中进行游戏时可以通过提升等级获得主线任务,有很多玩家不知道53没有主线怎么办,33级和53级都会有一段时间没有任务。地下城与勇士手游53没有主线怎么办答:升到下一级。1、53级都会有一段时间没有任务,大概是半级左右,只要升到下一级,就有任务。2、可以手动接取EXP循环任务,刷三次断头谷即可获得一个10%的经验胶囊。3、这里要提醒大家的是,在接受EXP任务时,记得顺便将每日任务接下来,这里也能有不少的经验。4、在我们没有主线任务之后,可以加入正在做主线任务的角色,与他一起共享

Win8电脑忘记密码怎么办?轻松解决! Win8电脑忘记密码怎么办?轻松解决! Mar 27, 2024 pm 05:12 PM

Win8电脑忘记密码怎么办?轻松解决!在日常生活中,我们经常会遇到忘记密码的情况,尤其是当密码是用于我们使用频率较高的电脑登录时,这样的情况更是常见。特别是对于使用Windows8操作系统的电脑用户来说,忘记密码可能会带来一些困扰,但事实上,忘记Win8电脑密码并不是一个难以解决的问题。在本文中,我们将介绍一些解决Win8电脑忘记密码的方法,帮助你轻松应对

全球数字货币交易十大APP推荐(2025货币交易软件排名) 全球数字货币交易十大APP推荐(2025货币交易软件排名) Mar 12, 2025 pm 05:48 PM

本文推荐全球十大数字货币交易APP,涵盖币安(Binance)、OKX、火币(Huobi Global)、Coinbase、Kraken、Gate.io、KuCoin、Bitfinex、Gemini和Bitstamp。这些平台在交易对数量、交易速度、安全性、合规性、用户体验等方面各有特色,例如币安以其高交易速度和广泛服务闻名,而Coinbase则更适合新手用户。选择适合自己的平台需要综合考虑自身需求和风险承受能力。 了解全球主流数字货币交易平台,助您安全高效进行数字资产交易。

See all articles