Monthly Archives: March 2012

数据泵造成的数据损失

客户尝试导入一个分区表的个别几个分区,结果却损失了整个分区表的数据。 下面通过一个例子来在线这个问题: SQL> CREATE TABLE T_PART PARTITION BY RANGE (CREATED) 2 (PARTITION P1 VALUES LESS THAN (TO_DATE(‘2012-1-1’, ‘YYYY-MM-DD’)), 3 PARTITION P2 VALUES LESS THAN (TO_DATE(‘2012-2-1’, ‘YYYY-MM-DD’)), 4 PARTITION P3 VALUES LESS THAN (TO_DATE(‘2012-3-1’, ‘YYYY-MM-DD’)), 5 PARTITION P4 VALUES LESS THAN … Continue reading

Posted in ORACLE | Tagged , , , | Leave a comment

利用SCHEDULER调用shell脚本

10g的SCHEDULER的一个重要的功能是可以调用操作系统命令或SHELL脚本。而在10g以前,这个功能只能通过外部存储过程来实现。 下面是一个简单的例子,首先编辑一个test.sh脚本: #!/usr/bin/ksh echo abc >> /home/xxx/a.txt#!/usr/bin/ksh echo abc >> /home/xxx/a.txt 注意,#!/usr/bin/ksh是必须的,否则JOB运行会出现ORA-27369错误。 给这个shell设置执行权限: $ chmod 744 test.sh$ chmod 744 test.sh 下面就可以在数据库中建立PROGRAM: SQL> BEGIN 2 DBMS_SCHEDULER.CREATE_JOB( 3 JOB_NAME => ‘J_TEST’, 4 JOB_TYPE => ‘EXECUTABLE’, 5 JOB_ACTION => ‘/home/xxx/test.sh’, 6 ENABLED => … Continue reading

Posted in ORACLE | Tagged , , , , | Leave a comment

分区表相关视图没有过滤删除表

一直认为,表被删除后,普通的视图中是查询不到表信息的,只有从RECYCLBIN相关视图才能看到被删除的表,没想到最近发现分区表的相关视图中仍然保留被删除表的信息。 看一个简单的例子: SQL> CREATE TABLE T_PART (ID NUMBER, NAME VARCHAR2(30)) 2 PARTITION BY HASH (ID) 3 PARTITIONS 4; 表已创建。 SQL> SELECT TABLE_NAME, PARTITIONING_TYPE, PARTITION_COUNT, STATUS 2 FROM USER_PART_TABLES; TABLE_NAME PARTITION PARTITION_COUNT STATUS —————————— ——— ————— ——– T_PART HASH 4 VALID … Continue reading

Posted in ORACLE | Tagged , , , , | Leave a comment

调用者存储过程访问权限问题

一直认为调用者权限过程所参考的对象是调用者用户下的对象,所依赖的权限也是调用者拥有的权限,但是现在发现事实并非完全如此。 事实上这个观点对于表、视图是正确的,调用者权限存储过程访问的表和视图是调用者当前用户下的,且权限都来自调用者本身。 但是对于存储过程,却是个例外,调用者权限存储过程中调用的OWNER用户下的存储过程,对于调用者而言,即使没有权限也是可以访问的。 描述有点抽象,看一个简单的例子: SQL> CONN SYSTEM/MANAGER 已连接。 SQL> CREATE USER U1 IDENTIFIED BY U1 DEFAULT TABLESPACE USERS; 用户已创建。 SQL> GRANT CREATE SESSION TO U1; 授权成功。 SQL> CONN TEST/TEST 已连接。 SQL> CREATE OR REPLACE PROCEDURE P_1 AUTHID CURRENT_USER AS 2 … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

中止进程导致系统HANG住

以前在11g上碰到过一次类似的情况,由于ALTER SYSTEM KILL SESSION导致资源被完全占用,在一段时间内数据库处于HANG住状态。这次又碰到类似的问题。 简单描述一下问题产生的环境,用户在进行测试,在很短的时间内连续启动了多个应用服务器,导致大量的并发进程同时连接到数据库中,致使数据库服务器CPU利用率一下冲到100%。 由于数据库的这种状态,用户决定中止一些进程来释放服务器上的资源。但是通过kill -9和alter system kill session杀掉大量的会话后,数据库服务器反而处于HANG死状态,这时连sqlplus / as sysdba都无非正常登录。 于是用户继续通过kill -9清除所有非本地连接,到最后所有连接到数据库的非本地连接已经完全被杀掉,而服务器上的CPU资源已经下降,只有Oracle的PMON进程占用了单CPU的50%左右,其他CPU完全空闲。可是此时数据库仍然无非正常登录。 此时只能通过sqlplus –prelim “/ as sysdba”方式登录,然后利用oradebug执行systemstate的dump,查看导致数据库HANG死的原因。 检查SYSTEMSTATE的DUMP文件,发现PMON进程和大量的DEAD进程都在经历library cache: mutex X等待事件。而整个DUMP文件中library cache: mutex X等待事件出现了3000多次。这个等待事件是不正常的。 查询MOS发现果然是bug:Bug 9312879 “library cache: mutex x” waits after killing sessions / PMON slow … Continue reading

Posted in BUG | Tagged , , , | Leave a comment

ORA-7445(dbgrmqmqpk_query_pick_key)错误

客户数据库上出现了ORA-7445[dbgrmqmqpk_query_pick_key]错误。 详细错误信息为: Sun Nov 13 00:20:24 2010 Exception [TYPE: SIGSEGV, Address NOT mapped TO object] [ADDR:0xB38F0000000049] [PC:0x100213D08, dbgrmqmqpk_query_pick_key()+0f88] Errors IN file /opt/diag/rdbms/orcl/orcl/trace/orcl_m001_272500.trc (incident=137962): ORA-07445: 出现异常错误: 核心转储 [dbgrmqmqpk_query_pick_key()+0f88] [SIGSEGV] [ADDR:0xB38F0000000049] [PC:0x100213D08] [Address NOT mapped TO object] [] Incident details IN: /opt/diag/rdbms/orcl/orcl/incident/incdir_137962/orcl_m001_272500_i137962.trc … Continue reading

Posted in BUG | Tagged , , , | Leave a comment

ORA-600(2758)错误

客户数据库异常DOWN机,在启动过程中出现了这个错误。 由于掉电导致了客户数据库出现了控制文件的不一致,尝试启动报错如下: SQL> startup ORACLE instance started. Total System Global Area 126950956 bytes Fixed SIZE 454188 bytes Variable SIZE 92274688 bytes DATABASE Buffers 33554432 bytes Redo Buffers 667648 bytes * ORA-00214: controlfile ‘D:\ORACLE\ORADATA\SXXHDTS\CONTROL03.CTL’ version 2623 inconsistent WITH file ‘D:\ORACLE\ORADATA\SXXHDTS\CONTROL02.CTL’ version … Continue reading

Posted in ORACLE | Tagged , , , , , , , , , | Leave a comment

缺少归档导致不完整恢复

简单介绍一次客户由于缺少归档造成数据丢失的案例。 分享一个案例:客户的一个测试数据库要迁移到另一台服务器上,客户DBA在将数据库备份到带库后,对原数据库服务器进行了格式化。 当DBA在目标服务器上进行数据库的恢复时发现了问题。数据库的备份虽然成功完成,但是随后的归档日志的备份由于报错失败了。现在只有一个全库的热备份,而没有任何归档日志的备份。目前已经不是丢失数据的问题了,而是缺少一致性的备份,数据库根本无法打开。 当然这个案例的恢复对于我们来说不算什么困难的事情,全库恢复后,直接RECOVER UNTIL CANCEL,尝试直接OPEN RESETLOGS,会出现错误: SQL> conn / AS sysdba Connected. SQL> ALTER DATABASE OPEN READ ONLY; ALTER DATABASE OPEN READ ONLY * ERROR at line 1: ORA-16004: backup DATABASE requires recovery ORA-01152: file 1 was NOT restored … Continue reading

Posted in ORACLE | Tagged , , , , | Leave a comment

ORA-600(krhpfh_03)错误

测试服务器上出现这个错误信息。 这个错误是发生在表空间OFFLINE的时候: 2012-01-07 00:42:13.026000 +08:00 CREATE tablespace test datafile SIZE 10m 2012-01-07 00:42:15.619000 +08:00 Completed: CREATE tablespace test datafile SIZE 10m 2012-01-07 00:46:25.448000 +08:00 Errors IN file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_smon_13951.trc: ORA-01116: error IN opening DATABASE file 5 ORA-01110: DATA file 5: ‘/u01/app/oracle/oradata/ORCL/datafile/o1_mf_test_7jg93510_.dbf’ … Continue reading

Posted in ORACLE | Tagged , , , , , , , , , , , | Leave a comment

修改数据字典表导致ORA-600(ktecgsc:kcbz_objdchk)错误

公司的测试服务环境被整崩溃了,简单记录一下错误。 同事发现一个测试数据库无法登录,对数据库执行SHUTDOWN ABORT后,重新启动bootstrap报错: [ora11g@hpserver2 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Sun Mar 4 00:37:58 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global … Continue reading

Posted in ORACLE | Tagged , , , , , , , | Leave a comment