Oracle元数据对象Invalid修复过程
在Oracle的运行过程中,由于操作失误可能会造成内部元数据的损坏,进而影响到系统的一些基础功能和正常处理。一旦发生这种故障,
在Oracle的运行过程中,由于操作失误可能会造成内部元数据的损坏,进而影响到系统的一些基础功能和正常处理。一旦发生这种故障,对内部数据字典的重建就是我们需要进行的处理。
本篇从一个损坏故障为入手点,介绍了如何进行Oracle元数据对象的重建。
1、故障场景
一个朋友的测试库最近出现很多“古怪”的错误,比如exp/imp操作异常中断、pl/sql中元数据信息无法展现和异常报错。这种情况下,笔者向朋友索要的对应的alert_log日志文件。结果发现很多错误信息。
Sat Jun 23 06:36:37 2012
Errors in file /u01/diag/rdbms/wilson/wilson/trace/wilson_m001_3667.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-04063: package body "SYS.PRVT_HDM" has errors
ORA-06508: PL/SQL: could not find program unit being called: "SYS.PRVT_HDM"
ORA-06512: at line 1
(篇幅原因,有省略…..)
Sat Jun 23 06:53:39 2012
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x34] [PC:0x92C0E13, kzpchkc()+4425] [flags: 0x0, count: 1]
Errors in file /u01/diag/rdbms/wilson/wilson/trace/wilson_ora_3619.trc (incident=12215):
ORA-07445: °é”è: è¨ [kzpchkc()+4425] [SIGSEGV] [ADDR:0x34] [PC:0x92C0E13] [Address not mapped to object] []
Incident details in: /u01/diag/rdbms/wilson/wilson/incident/incdir_12215/wilson_ora_3619_i12215.trc
Sat Jun 23 06:53:40 2012
Trace dumping is performing id=[cdmp_20120623065340]
Sat Jun 23 06:53:45 2012
Sweep [inc][12215]: completed
Sweep [inc2][12215]: completed
Sat Jun 23 06:55:23 2012
ORA-942 encountered when generating server alert SMG-4120
ORA-942 encountered when generating server alert SMG-4121
如此类型的错误信息,遍布在近几天错误日志中。但执行一些失败的命令时(如desc),还会有异常错误信息在日志中展现。
在上面的错误日志中,,还有是关于MMON进程异常中断之后,反复重新启动。
MMON进程是AWR报告库收集进程,定期(每小时)收集系统状态保存在数据库字典中。MMON异常中断后反复重启,似乎意味着AWR收集受到影响。
和朋友联系,获取进一步信息。
当日的AWR snapshot只有两条,看来真正出现了问题。同时,发现自动作业中的sys.standard包失效(invalid),合并的还有很多包和方法失效。
经过朋友回忆,应该是执行了exp/imp的重置脚本catexp.sql。看来是该脚本在执行中,破坏了内部的字典信息和数据,导致了一系列问题。
2、问题解决准备
发现了问题的根源,我们就可以有解决问题的基本思路:重新创建数据字典视图和程序对象。我们在Oracle程序安装目录中,均有保存建库脚本和程序,所以可以调用对应脚本,来更新数据字典和程序对象。
由于处理信息比较敏感,所以在处理之前,要进行一次完全备份。笔者选择停机冷备的方法。
首先,定位控制文件和数据文件位置信息,准备拷贝。
[root@ /]# chown -R oracle:oinstall backup
[root@ /]# ls -l | grep backup
drwxr-xr-x 2 oracle oinstall 4096 Jun 25 20:23 backup
--控制文件
SQL> select 'cp '||name||' /backup' from v$controlfile;
'CP'||NAME||'/BACKUP'
--------------------------------------------------------------------------------
cp /u01/app/oradata/ORA11G/controlfile/o1_mf_7vpyvypo_.ctl /backup
cp /u01/app/flash_recovery_area/ORA11G/controlfile/o1_mf_7vpyw16z_.ctl /backup
--数据文件
SQL> select 'cp '||file_name||' /backup' from dba_data_files;
'CP'||FILE_NAME||'/BACKUP'
--------------------------------------------------------------------------------
cp /u01/app/oradata/ORA11G/datafile/o1_mf_users_7vpyc2xd_.dbf /backup
cp /u01/app/oradata/ORA11G/datafile/o1_mf_undotbs1_7vpyc2py_.dbf /backup
cp /u01/app/oradata/ORA11G/datafile/o1_mf_sysaux_7vpyc2hb_.dbf /backup
cp /u01/app/oradata/ORA11G/datafile/o1_mf_system_7vpyc1x7_.dbf /backup
之后,关机将文件拷贝到备份目录上。
[oracle@bsplinux ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jun 25 20:42:06 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
使用生成脚本语句,实现拷贝。
[oracle@bsplinux backup]$ ls -l
total 1720628
-rw-r----- 1 oracle oinstall 9748480 Jun 25 20:44 o1_mf_7vpyvypo_.ctl
-rw-r----- 1 oracle oinstall 9748480 Jun 25 20:44 o1_mf_7vpyw16z_.ctl
-rw-r----- 1 oracle oinstall 723525632 Jun 25 20:55 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 744497152 Jun 25 21:08 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 267395072 Jun 25 20:47 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 5251072 Jun 25 20:45 o1_mf_users_7vpyc2xd_.dbf
冷备份完成。
注意:在进行所有的修复操作前,如果有可能,一定要进行数据现场保留备份!这样起码可以做到不会将情况恶化。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL支持四種索引類型:B-Tree、Hash、Full-text和Spatial。 1.B-Tree索引適用於等值查找、範圍查詢和排序。 2.Hash索引適用於等值查找,但不支持範圍查詢和排序。 3.Full-text索引用於全文搜索,適合處理大量文本數據。 4.Spatial索引用於地理空間數據查詢,適用於GIS應用。

MySQL 數據庫中,用戶和數據庫的關係通過權限和表定義。用戶擁有用戶名和密碼,用於訪問數據庫。權限通過 GRANT 命令授予,而表由 CREATE TABLE 命令創建。要建立用戶和數據庫之間的關係,需創建數據庫、創建用戶,然後授予權限。

MySQL 和 MariaDB 可以共存,但需要謹慎配置。關鍵在於為每個數據庫分配不同的端口號和數據目錄,並調整內存分配和緩存大小等參數。連接池、應用程序配置和版本差異也需要考慮,需要仔細測試和規劃以避免陷阱。在資源有限的情況下,同時運行兩個數據庫可能會導致性能問題。
