标签云
asm恢复 bbed bootstrap$ dul kcbzib_kcrsds_1 kccpb_sanity_check_2 kcratr_nab_less_than_odr MySQL恢复 obet ORA-00312 ORA-00704 ORA-00742 ORA-01110 ORA-01200 ORA-01555 ORA-01578 ORA-01595 ORA-600 2662 ORA-600 2663 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-600 kcratr_nab_less_than_odr ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 ORACLE恢复 Oracle 恢复 ORACLE数据库恢复 oracle碎片 OSD-04016 YOUR FILES ARE ENCRYPTED 比特币加密文章分类
- MongoDB (1)
- MongoDB恢复 (1)
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (112)
- 数据库 (1,878)
- DB2 (22)
- MySQL (82)
- Oracle (1,704)
- Data Guard (53)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (168)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (72)
- Oracle Bug (8)
- Oracle RAC (56)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (29)
- Oracle备份恢复 (659)
- Oracle安装升级 (107)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (91)
- PostgreSQL (37)
- pdu工具 (7)
- PostgreSQL恢复 (13)
- SQL Server (34)
- SQL Server恢复 (14)
- TimesTen (7)
- 达梦数据库 (5)
- 达梦恢复 (3)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (51)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (34)
- MongoDB (1)
-
最近发表
- 由于con$.con#值达到极限,触发数据库增加约束报ORA-600 12807错误
- MongoDB 离线提取工具—mongoext
- .bres勒索病毒加密数据库dmp文件可恢复
- ORA-600 krsm_mrp_rebuild_lf_list.lno_mismatch
- 记录一次0丢失的ORA-00354: 损坏重做日志块标头故障恢复
- 不当数据库恢复操作导致一个月数据丢失
- obet快速修复oracle 位图损坏块
- 不太常见的10.2.0.1的oracle redo损坏恢复
- obet forcecopy功能抢救硬件故障中的数据文件
- kcratr_nab_less_than_odr和system坏块故障处理
- 通过obet 恢复system坏块,打开数据库
- obet dbv功能完整说明
- 分享一例运行在aix上的sap系统数据库恢复过程
- OBET-Oracle Block Editor Tool使用说明
- 几乎动用了所有手段的Oracle故障恢复
- Oracle Block Edit Tool (obet) 功能增强–2026.07
- Oracle 19c 202607补丁(RUs+OJVM)-19.32
- Patch_SCN快速修复ORA-01555数据库open故障
- 快速处理 ORA-01210: data file header is media corrupt 故障
- ORA-00314: log 3 of thread 1, expected sequence# N doesn’t match 0
分类目录归档:Oracle
记一次含AND-EQUAL执行计划调优
1.数据库版本
SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production PL/SQL Release 9.2.0.4.0 - Production CORE 9.2.0.3.0 Production TNS for Linux: Version 9.2.0.4.0 - Production NLSRTL Version 9.2.0.4.0 - Production
2.发现含有AND-EQUAL执行计划
SQL> SELECT
2 COUNT(TABXNPRESM1_.DETAIL_ID) AS X0_0_
3 FROM QXTDEV1.TAB_XN_PRESMS TABXNPRESM0_, QXTDEV1.TAB_XN_PRESMS_DETAIL TABXNPRESM1_
4 WHERE (TABXNPRESM0_.COMPANY_ID = 346240)
5 AND (TABXNPRESM0_.EMPLOYEE_ID = 0)
6 AND (TABXNPRESM0_.PRE_TIME >= TO_DATE('2011/12/25', 'yyyy/mm/dd'))
7 AND (TABXNPRESM0_.PRE_TIME < TO_DATE('2011/12/26', 'yyyy/mm/dd') + 1)
8 AND ((TABXNPRESM0_.SEND_TYPE = 1) OR (TABXNPRESM0_.SEND_TYPE = 0))
9 AND ((TABXNPRESM1_.RESULT = -1) OR (TABXNPRESM1_.RESULT = 0))
10 AND (TABXNPRESM0_.PRE_ID = TABXNPRESM1_.PRE_ID);
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=11 Card=1 Bytes=40)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TAB_XN_PRESMS_DETAIL'(Cost=3 Card=2 Bytes=30)
3 2 NESTED LOOPS (Cost=11 Card=1 Bytes=40)
4 3 TABLE ACCESS (BY INDEX ROWID) OF 'TAB_XN_PRESMS' (Cost=8 Card=1 Bytes=25)
5 4 AND-EQUAL
6 5 INDEX (RANGE SCAN) OF 'IDX_XN_PRESMS_2' (NON-UNIQUE)
7 5 INDEX (RANGE SCAN) OF 'IDX_XN_PRESMS_1' (NON-UNIQUE) (Cost=4 Card=638)
8 3 INDEX (RANGE SCAN) OF 'IDX_XN_PRESMS_DETAIL' (NON-UNIQUE) (Cost=2 Card=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
272188 consistent gets
0 physical reads
0 redo size
375 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
3.关于AND-EQUAL解释
If the WHERE clauses uses columns of many single-column indexes, then Oracle executes the statement by performing a range scan on each index to retrieve the rowids of the rows that satisfy each condition. Oracle then merges the sets of rowids to obtain a set of rowids of rows that satisfy all conditions. Oracle then accesses the table using these rowids.
Oracle can merge up to five indexes. If the WHERE clause uses columns of more than five single-column indexes, then Oracle merges five of them, accesses the table by rowid, and then tests the resulting rows to determine whether they satisfy the remaining conditions before returning them.
大概的意思是当where条件后面含有多个列的单列索引时(不超过5个),会先得到每个条件的rowid,然后这些rowid进行merges,得到一个rowid的结果集,最后根据这些rowid取表中记录。
4.表/列/索引相关信息
--index和列信息
SQL> SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
2 FROM USER_IND_COLUMNS
3 WHERE TABLE_NAME IN ('TAB_XN_PRESMS', 'TAB_XN_PRESMS_DETAIL');
INDEX_NAME TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------ --------------------
IDX_XN_PRESMS_1 TAB_XN_PRESMS COMPANY_ID
IDX_XN_PRESMS_2 TAB_XN_PRESMS EMPLOYEE_ID
IDX_XN_PRESMS_3 TAB_XN_PRESMS PRE_TIME
PK_TAB_XN_PRESMS TAB_XN_PRESMS PRE_ID
IDX_XN_PRESMS_4 TAB_XN_PRESMS SEND_TYPE
IDX_XN_PRESMS_DETAIL TAB_XN_PRESMS_DETAIL PRE_ID
IDX_XN_PRESMS_DETAIL_2 TAB_XN_PRESMS_DETAIL SEND_TIME
PK_TAB_XN_PRESMS_DETAIL TAB_XN_PRESMS_DETAIL DETAIL_ID
8 rows selected
--index的统计信息
SQL> SELECT TABLE_NAME,
2 INDEX_NAME,
3 TO_CHAR(LAST_ANALYZED, 'yyyy-mm-dd hh24:mi:ss')
4 FROM USER_INDEXES
5 WHERE TABLE_NAME IN ('TAB_XN_PRESMS', 'TAB_XN_PRESMS_DETAIL');
TABLE_NAME INDEX_NAME TO_CHAR(LAST_ANALYZED,'YYYY-MM
------------------------------ ------------------------------ ------------------------------
TAB_XN_PRESMS IDX_XN_PRESMS_1 2011-12-29 09:25:32
TAB_XN_PRESMS IDX_XN_PRESMS_2 2011-12-29 09:25:35
TAB_XN_PRESMS IDX_XN_PRESMS_3 2011-12-29 09:25:39
TAB_XN_PRESMS IDX_XN_PRESMS_4 2011-12-29 09:25:21
TAB_XN_PRESMS_DETAIL IDX_XN_PRESMS_DETAIL 2011-12-29 09:20:03
TAB_XN_PRESMS_DETAIL IDX_XN_PRESMS_DETAIL_2 2011-12-29 09:20:01
TAB_XN_PRESMS PK_TAB_XN_PRESMS 2011-12-29 09:25:46
TAB_XN_PRESMS_DETAIL PK_TAB_XN_PRESMS_DETAIL 2011-12-29 09:20:02
8 rows selected
--列的唯一度情况
SQL> SELECT TABLE_NAME, COLUMN_NAME, NUM_DISTINCT
2 FROM USER_TAB_COLS
3 WHERE (TABLE_NAME, COLUMN_NAME) IN
4 (SELECT TABLE_NAME, COLUMN_NAME
5 FROM USER_IND_COLUMNS
6 WHERE TABLE_NAME IN ('TAB_XN_PRESMS', 'TAB_XN_PRESMS_DETAIL'))
7 ORDER BY table_name,NUM_DISTINCT DESC;
TABLE_NAME COLUMN_NAME NUM_DISTINCT
------------------------------ ------------------------------ ------------
TAB_XN_PRESMS PRE_ID 1999270
TAB_XN_PRESMS PRE_TIME 1342594
TAB_XN_PRESMS EMPLOYEE_ID 10676
TAB_XN_PRESMS COMPANY_ID 3136
TAB_XN_PRESMS SEND_TYPE 10
TAB_XN_PRESMS_DETAIL DETAIL_ID 3863184
TAB_XN_PRESMS_DETAIL PRE_ID 1996872
TAB_XN_PRESMS_DETAIL SEND_TIME 437526
8 rows selected
通过这些信息可以得出:
1)统计信息是最新收集过的
2)因为有多个单列index,数据库为了使得cost最小,可能选择了不合适的index(IDX_XN_PRESMS_2[EMPLOYEE_ID]/IDX_XN_PRESMS_1[COMPANY_ID]),使得出现AND-EQUAL,从而逻辑读偏高。对于这个sql,应该使用唯一度比较高的IDX_XN_PRESMS_3[PRE_TIME]
3)也可以通过修改index,实现程序高效,但是考虑到会影响启动程序,在没有十足的把握之前遵守hint优先原则
5.增加hint提示
SQL> SELECT /*+ index(TABXNPRESM0_ IDX_XN_PRESMS_3) */
2 COUNT(TABXNPRESM1_.DETAIL_ID) AS X0_0_
3 FROM QXTDEV1.TAB_XN_PRESMS TABXNPRESM0_, QXTDEV1.TAB_XN_PRESMS_DETAIL TABXNPRESM1_
4 WHERE (TABXNPRESM0_.COMPANY_ID = 346240)
5 AND (TABXNPRESM0_.EMPLOYEE_ID = 0)
6 AND (TABXNPRESM0_.PRE_TIME >= TO_DATE('2011/12/25', 'yyyy/mm/dd'))
7 AND (TABXNPRESM0_.PRE_TIME < TO_DATE('2011/12/26', 'yyyy/mm/dd') + 1)
8 AND ((TABXNPRESM0_.SEND_TYPE = 1) OR (TABXNPRESM0_.SEND_TYPE = 0))
9 AND ((TABXNPRESM1_.RESULT = -1) OR (TABXNPRESM1_.RESULT = 0))
10 AND (TABXNPRESM0_.PRE_ID = TABXNPRESM1_.PRE_ID);
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=641 Card=1 Bytes=40)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TAB_XN_PRESMS_DETAIL'(Cost=3 Card=2 Bytes=30)
3 2 NESTED LOOPS (Cost=641 Card=1 Bytes=40)
4 3 TABLE ACCESS (BY INDEX ROWID) OF 'TAB_XN_PRESMS' (Cost=638 Card=1 Bytes=25)
5 4 INDEX (RANGE SCAN) OF 'IDX_XN_PRESMS_3' (NON-UNIQUE) (Cost=63 Card=22286)
6 3 INDEX (RANGE SCAN) OF 'IDX_XN_PRESMS_DETAIL' (NON-UNIQUE) (Cost=2 Card=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1422 consistent gets
0 physical reads
0 redo size
375 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
从这里可以看出,程序的逻辑读下降了很多(从272188下降到1422),得到了优化效果,提高了程序执行效率
结合上篇:BITMAP CONVERSION FROM ROWIDS,总结一个经验,如果同时使用到了一个表的多个index,效率一般情况下不会太高。同时也给各位提个醒,index并非越多越好,有时候会适得其反(建立index时需要考虑情况)
发表在 Oracle 开发
评论关闭
清理表部分数据方法
最近两天,开发要求,清理掉某些表的部分数据,因为不能停业务,不能采用cast+rman方式实现.只能自己写脚本删除,在这些删除数据中,经过总结,共有三种类型:
1.删除单个表数据
删除a表以dealdate为范围的部分数据
DECLARE
P_SQL VARCHAR2(300) :=
'DELETE FROM a WHERE dealdate<to_date('||''''||
'2010-11-01 00:00:00'||''''||','||''''||'yyyy-mm-dd hh24:mi:ss'||''''||')';
P_COUNT NUMBER := 1000;
BEGIN
WHILE 1 = 1 LOOP
EXECUTE IMMEDIATE P_SQL || ' and rownum <= :nu'
USING P_COUNT;
IF SQL%NOTFOUND THEN
EXIT;
END IF;
COMMIT;
END LOOP;
COMMIT;
END;
2.删除两个关联表数据
tab_a,tab_b两个表通过共有的PRE_ID列关联,然后按照tab_a.ACCEPT_TIME列为条件删除两个表中数据,tab_b表中数据比tab_a多很多
DECLARE
CURSOR CUR IS
SELECT B.ROWID BID, A.ROWID AID
FROM tab_a A, tab_b B
WHERE A.PRE_ID = B.PRE_ID
AND A.ACCEPT_TIME <
TO_DATE('2010-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
ORDER BY B.ROWID;
V_COUNTER NUMBER;
BEGIN
V_COUNTER := 0;
FOR ROW IN CUR LOOP
DELETE FROM tab_a WHERE ROWID = ROW.AID;
DELETE FROM tab_b WHERE ROWID = ROW.BID;
V_COUNTER := V_COUNTER + 1;
IF (V_COUNTER >= 1000) THEN
COMMIT;
V_COUNTER := 0;
END IF;
END LOOP;
COMMIT;
END;
3.删除某个表中重复列
删除tab_a表中的COMPANY_ID/PY_DES/PY_DES_Q/PY_TYPE/RELATE_ID列重复数据
DECLARE
CURSOR CUR IS
SELECT A.ROWID AID
FROM tab_a A
WHERE ROWID NOT IN (SELECT MAX(B.ROWID)
FROM tab_a B
WHERE A.COMPANY_ID = B.COMPANY_ID
AND A.PY_DES = B.PY_DES
AND A.PY_DES_Q = B.PY_DES_Q
AND A.PY_TYPE = B.PY_TYPE
AND A.RELATE_ID = B.RELATE_ID)
ORDER BY A.ROWID;
V_COUNTER NUMBER;
BEGIN
V_COUNTER := 0;
FOR ROW IN CUR LOOP
DELETE FROM tab_a WHERE ROWID = ROW.AID;
V_COUNTER := V_COUNTER + 1;
IF (V_COUNTER >= 1000) THEN
COMMIT;
V_COUNTER := 0;
END IF;
END LOOP;
COMMIT;
END;
发表在 Oracle 开发
评论关闭
ORA-07445[kslgetl()+120]/ORA-00108错误解决
一.数据库版本
SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production
二.alert中发现ORA-07445[kslgetl()+120]/ORA-00108错误
Mon Dec 19 09:19:42 2011 found dead dispatcher 'D000', pid = (13, 1) Mon Dec 19 09:19:42 2011 dispatcher 'D000' encountered error getting listening address Mon Dec 19 09:19:42 2011 Errors in file /opt/oracle/admin/gaxt/bdump/gaxt_ora_16297.trc: ORA-07445: exception encountered: core dump [kslgetl()+120] [SIGSEGV] [Address not mapped to object] [0x000000208] [] [] ORA-00108: failed to set up dispatcher to accept connection asynchronously Mon Dec 19 09:19:45 2011 found dead dispatcher 'D000', pid = (21, 2) Mon Dec 19 09:19:45 2011 dispatcher 'D000' encountered error getting listening address Mon Dec 19 09:19:45 2011 Errors in file /opt/oracle/admin/gaxt/bdump/gaxt_ora_16299.trc: ORA-07445: exception encountered: core dump [kslgetl()+120] [SIGSEGV] [Address not mapped to object] [0x000000208] [] [] ORA-00108: failed to set up dispatcher to accept connection asynchronously
三.trace文件信息
Oracle process number: 15
Unix process pid: 10607, image: oracle@gongantest (D000)
Warning: keltnfy call to ldmInit failed with error 46
*** 2011-12-19 19:21:40.100
network error encountered getting listening address:
NS Primary Error: TNS-12533: TNS:illegal ADDRESS parameters
NS Secondary Error: TNS-12560: TNS:protocol adapter error
NT Generic Error: TNS-00503: Illegal ADDRESS parameters
OPIRIP: Uncaught error 108. Error stack:
ORA-00108: failed to set up dispatcher to accept connection asynchronously
Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0x208, PC: [0x7a06b8, kslgetl()+120]
*** 2011-12-19 19:21:40.107
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [kslgetl()+120] [SIGSEGV] [Address not mapped to object] [0x000000208] [] []
ORA-00108: failed to set up dispatcher to accept connection asynchronously
Current SQL information unavailable - no session.
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst()+31 call ksedst1() 000000000 ? 000000001 ?
2B91BE8F7D50 ? 2B91BE8F7DB0 ?
2B91BE8F7CF0 ? 000000000 ?
ksedmp()+610 call ksedst() 000000000 ? 000000001 ?
2B91BE8F7D50 ? 2B91BE8F7DB0 ?
2B91BE8F7CF0 ? 000000000 ?
ssexhd()+629 call ksedmp() 000000003 ? 000000001 ?
2B91BE8F7D50 ? 2B91BE8F7DB0 ?
2B91BE8F7CF0 ? 000000000 ?
__restore_rt()+0 call ssexhd() 00000000B ? 2B91BE8F8D70 ?
2B91BE8F8C40 ? 2B91BE8F7DB0 ?
2B91BE8F7CF0 ? 000000000 ?
kslgetl()+120 signal __restore_rt() 0600E7560 ? 0000000E8 ?
09AAE5728 ? 0000009A9 ?
000003980 ? 09AAE5740 ?
ksfglt()+108 call kslgetl() 0600E7560 ? 000000001 ?
09AAE5728 ? 0000009A9 ?
000003980 ? 09AAE5740 ?
四.在MOS上找到相关文章[ID 1298804.1]
Applies to: Oracle Server - Enterprise Edition - Version: 11.1.0.6 to 11.1.0.7 - Release: 11.1 to 11.1 Information in this document applies to any platform. Symptoms The following errors are seen in the trace file written by an ORA-7445 [kslgetl]: network error encountered getting listening address: NS Primary Error: TNS-12533: TNS:illegal ADDRESS parameters NS Secondary Error: TNS-12560: TNS:protocol adapter error NT Generic Error: TNS-00503: Illegal ADDRESS parameters OPIRIP: Uncaught error 108. Error stack: ORA-00108: failed to set up dispatcher to accept connection asynchronously Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0x130, PC: [0x82f09dc, kslgetl()+80] The trace file indicates that there is no session: Current SQL information unavailable - no session. The Call Stack Trace in the ORA-7445 trace file contains a function list similar to: kslgetl <- PGOSF57_ksfglt <- kghfre <- kmnsbf <- nsbfr <- nsiofrrg <- nsiocancel <- nsopen_shutitdown <- nsclose <- nsgblclose <- nsgblTRMHelper <- nsgblRealTerm <- nlstdstp <- npinlt <- ksuabt <- opidrv <- sou2o <- opimai_real <- main <- libc_start_main Cause The trace file first reports: Warning: keltnfy call to ldmInit failed with error 46 The ORA-7445 is not the starting point here. This exception is just a spin-off from ORA-180 and it is possible that different internal errors may be seen, such as ORA-600 [504], depending on what is happening when the ORA-180 is encountered. The cause for the ORA-180 is related to the inital message at the beginning of the trace file: "keltnfy call to ldmInit failed with error 46" and this is followed by: "network error encountered getting listening address:" The error code (here: 46) is the key for solving the issue. This warning says that ldmInit() returned error 46 which is LDMERR_HOST_NOT_FOUND (host not found). This error is returned if the OS call gethostbyname() fails with an error. So these appears to be a network specific issue. Solution 1) Check permission on /etc/hosts $ ls -l /etc/hosts -rw-r--r-- 2 root root 194 Oct 17 2006 /etc/hosts Check if /etc/hosts file is correctly configured <ip address> <fully qualified hostname> <simple or short hostname> <alias, if applicable> ( all of this on one line ). 2) Check the hostname: $ hostname $ ping `hostname` Make sure you are able to ping the hostname 3) Check if /etc/nodename is correctly configured If you have DNS setup, ping is not a tool to diagnose DNS problem. A better tool to use is nslookup, dnsquery, or dig. $ nslookup <shortname> $ nslookup <long name> $ nslookup <ip address> The forward and reverse lookup should succeed and return consistent address/info. 4) Check nsswitch.conf $ more nsswitch.confhosts: files dnsMake sure host lookup is also done through the /etc/hosts file and not just dns. It is recommended that FILES come first before DNS. Also, check the resolv.conf. This makes sure that the DNS is working properly.
在这里看到虽然数据库的版本不一样,alert和trace中的错误不完全一致,但是很相似。是由于主机名不能被正常访问导致,所以尝试这从主机名相关部分着手解决。
五.查看主机名相关信息,解决问题
[oracle@gongantest ~]$ ls -l /etc/hosts
-rw-r--r-- 2 root root 176 Dec 16 13:43 /etc/hosts
[oracle@gongantest ~]$ hostname
gongantest
[oracle@gongantest ~]$ ping gongantest
ping: unknown host gongantest
[oracle@gongantest ~]$ more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
#192.168.11.60 gongantest
--发现改主机名的dns被注释掉
[oracle@gongantest ~]$ ping gongantest
PING gongantest (192.168.11.60) 56(84) bytes of data.
From 192.168.9.66 icmp_seq=2 Destination Host Unreachable
From 192.168.9.66 icmp_seq=3 Destination Host Unreachable
From 192.168.9.66 icmp_seq=4 Destination Host Unreachable
--- gongantest ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3999ms, pipe 3
--除掉注释,测试不通
[root@gongantest ~]# ifconfig
eth1 Link encap:Ethernet HWaddr 00:14:22:10:96:CA
inet addr:192.168.9.66 Bcast:192.168.11.255 Mask:255.255.252.0
inet6 addr: fe80::214:22ff:fe10:96ca/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4207222 errors:0 dropped:0 overruns:0 frame:0
TX packets:2482964 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1156547557 (1.0 GiB) TX bytes:565900103 (539.6 MiB)
--发现该机器的ip为192.168.9.66,修改hosts文件。
--初步确定出现问题的原因是因为机器迁移,使用了新ip,注释掉了hosts文件中错误ip
[root@gongantest ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.9.66 gongantest
[oracle@gongantest ~]$ ping gongantest
PING gongantest (192.168.9.66) 56(84) bytes of data.
64 bytes from gongantest (192.168.9.66): icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from gongantest (192.168.9.66): icmp_seq=2 ttl=64 time=0.031 ms
64 bytes from gongantest (192.168.9.66): icmp_seq=3 ttl=64 time=0.033 ms
--- gongantest ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.031/0.033/0.037/0.007 ms
--ping测试正常
继续观察
--观察d000进程是否启动 [oracle@gongantest ~]$ ps -ef|grep ora_ oracle 10180 1 0 13:23 ? 00:00:00 ora_pmon_gaxt oracle 10182 1 0 13:23 ? 00:00:00 ora_psp0_gaxt oracle 10184 1 0 13:23 ? 00:00:00 ora_mman_gaxt oracle 10186 1 0 13:23 ? 00:00:00 ora_dbw0_gaxt oracle 10188 1 0 13:23 ? 00:00:02 ora_lgwr_gaxt oracle 10190 1 0 13:23 ? 00:00:00 ora_ckpt_gaxt oracle 10192 1 0 13:23 ? 00:00:00 ora_smon_gaxt oracle 10194 1 0 13:23 ? 00:00:00 ora_reco_gaxt oracle 10196 1 0 13:23 ? 00:00:00 ora_cjq0_gaxt oracle 10198 1 0 13:23 ? 00:00:00 ora_mmon_gaxt oracle 10200 1 0 13:23 ? 00:00:00 ora_mmnl_gaxt oracle 10204 1 0 13:23 ? 00:00:00 ora_s000_gaxt oracle 10210 1 0 13:23 ? 00:00:00 ora_arc0_gaxt oracle 10212 1 0 13:23 ? 00:00:00 ora_arc1_gaxt oracle 10214 1 0 13:23 ? 00:00:00 ora_qmnc_gaxt oracle 10218 1 0 13:23 ? 00:00:00 ora_j000_gaxt oracle 10222 1 0 13:24 ? 00:00:00 ora_q000_gaxt oracle 10234 1 0 13:24 ? 00:00:00 ora_q001_gaxt oracle 10609 1 0 13:32 ? 00:00:00 ora_d000_gaxt oracle 10639 9962 0 13:35 pts/0 00:00:00 grep ora_ --观察alert日志未出现该错误 Mon Dec 26 13:32:18 2011 Errors in file /opt/oracle/admin/gaxt/bdump/gaxt_ora_10607.trc: ORA-07445: exception encountered: core dump [kslgetl()+120] [SIGSEGV] [Address not mapped to object] [0x000000208] [] [] ORA-00108: failed to set up dispatcher to accept connection asynchronously Mon Dec 26 13:32:21 2011 found dead dispatcher 'D000', pid = (13, 85) Mon Dec 26 13:36:04 2011 Thread 1 advanced to log sequence 232 (LGWR switch) Current log# 1 seq# 232 mem# 0: /opt/oracle/oradata/gaxt/redo01.log
至此ORA-07445[kslgetl()+120]/ORA-00108错误解决

加我微信(17813235971)
加我QQ(107644445)

