天道酬勤

RDBMS and My Life

Archive for the ‘Database’ Category

ORA-00600:[2103],[1],[0],[1],[900]的处理

one comment

上周四中午刚放下订餐电话,手机响起鸟,客户的一套AIX 5.2 ML04  +  Oracle 10.2.0.3.0 (+Dataguard)的系统挂了,业务中断。收拾东西下楼打车赶往客户机房,大致半小时后到达客户机房登录系统检查发现系统报:“ORA-00600: internal error code, arguments: [2103], [1], [0], [1], [900]”错误。[2103]的错误与controlfile有关,[900]是等待的超时时间S。进一步检查发现,问题是出现在每天晚上0点都有crontab调度的系统备份任务:0点将系统置为热备模式—>连接FTP服务器—>CP需要备份的所有件—>最后将系统退出热备模式。metalink [ID 567891.1]说:系统处在热备份模式下,在日志发生切换时获取控制文件队列信息时发生了超时,这个等待时间默认是15分钟(900s)。虽然这里有一个Bug 6018274,但我的习惯是只有在做完了尽可能的尝试之后再认为是bug。

继续检查发现,系统一直在进行kill动作:“Killing enqueue blocker (pid=827572) on resource CF-00000000-00000000”,但遗憾的是这个动作失败了,尝试手工kill,失败。而且此时在系统中只要一发起与log相关的动作系统就挂起,无赖之下想重启oracle(这个想法很邪恶啊,如果待会儿起不来,how?),FT……正常关闭失败(意料中的),abort关机失败,回到OS中kill -9失败。万般无赖之下,只能重启OS,没想到的是AIX重启到一般的时候挂起,此时已经13:30了,还没有吃饭(12点客户叫俺一起去吃饭看到她那表情俺也有点不好意思。)不管了,先搞定系统再说吧。由于这套系统是P690上的一个分区,只要在HMC上使用“Hard Reset”选项了,鼠标移到此分区上检查了又检查了,俺视力5.2的说,但就怕这时看错了的话,后果,你知道的。在这前后几分钟,真有心跳加速的感觉,就怕待会儿库打不开啊。10分钟之后,my god,库顺利的打开了,哎呀,肚子不饿了,起应用一切顺利,先让别人开工吧。

造成ORA-00600 [2103]错误的原因有下:

1) 控制文件存放在I/O非常慢的存储系统上。

2) 频繁的日志切换,或日志文件过小或日志文件组数目过少。

3) 同时使用了异步I/O或多个数据写进程。

4) Oracle软件内部Bug。

5) OS/硬件问题。

讯问过客户工程师,确实在前一天18:30的时候进行数据整理,发生过非常频繁的日志切换,高峰时1分钟达5次日志切换,但在其后一天是正常的,由于环境复杂,暂时先做如下测试:(以影响业务程度最小化且实施难易程度依次列出)

1. 增大日志组成员大小,同时增加日志组数目。

2. 由于业务的特殊性,商讨能否修改备份策略来避开热备份。

3. 根据官方建议打补丁:Patch 5923866,在失效的情况下,将系统升级到10.2.0.4.0之上(最新分布为10.2.0.5.0)

4. 将操作系统从AIX 5.2 ML04升级到AIX 5.2 ML05(Oracle在[ID 406191.1]中建议)

BTW:在我重启完系统后问客户,此套系统应该有Dataguard的吧,答案是肯定的。到这里,可能大家会说为什么不在出问题的时候将系统切换到备机上。其实切换系统更多决定因素不仅仅只在技术层面的。

-The End-

Written by ochef

July 19th, 2010 at 10:00 am

Posted in Troubleshooting

Tagged with

expdp的network_link参数

leave a comment

expdp是server端工具,但可以通过NETWORK_LINK参数实现远端导出,但是前提是远端也安装有Oracle数据库,只有CLIENT端是没有办法利用数据泵的。

这里要指出的是:network_link不支持远端导出分区表中的某一个分区,但可以导整个分区表。以下为测试过程:

创建分区表sales:

[oracle@ora10g ~]$ sqlplus ‘/as sysdba’

SQL> CREATE TABLE sales

(sale_date DATE NOT NULL)

PARTITION BY RANGE (sale_date)

(PARTITION sales2010_q1

VALUES LESS THAN (TO_DATE(’2010-04-01′,’YYYY-MM-DD’))

TABLESPACE sp1,

PARTITION sales2010_q2

VALUES LESS THAN (TO_DATE(’2010-07-01′,’YYYY-MM-DD’))

TABLESPACE sp2,

PARTITION sales2010_q3

VALUES LESS THAN (TO_DATE(’2010-10-01′,’YYYY-MM-DD’))

TABLESPACE sp3);

插入4条记录:

SQL> select count(*) from sales;

COUNT(*)

———-

4

SQL> select * from sales partition(sales2010_q1);

SALE_DATE

————

23-MAR-10

SQL> select * from sales partition(sales2010_q2);

SALE_DATE

————

23-JUN-10

22-JUN-10

SQL> select * from sales partition(sales2010_q3);

SALE_DATE

————

23-SEP-10

远端机器上创建 directory目录、赋权、创建dblink:

[oracle@node1 /]$ sqlplus ‘/as sysdba’

SQL> create directory dump_dir as ‘/backup’;

Directory created.

SQL> grant read,write on directory dump_dir to ochef;

Grant succeeded.

SQL> create database link test connect to ochef identified by oracle using ‘primary’;

Database link created.

SQL> select count(*) from ochef.sales@test;

COUNT(*)

———-

4

远程导出整个分区表:

[oracle@node1 ~]$ expdp ochef/oracle directory=dump_dir dumpfile=sales.dmp network_link=test tables=sales

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – Production

With the Partitioning, Real Application Clusters, OLAP, Data Mining

and Real Application Testing options

Starting “OCHEF”.”SYS_EXPORT_TABLE_01″:  ochef/******** directory=dump_dir dumpfile=sales.dmp network_link=test tables=sales

Estimate in progress using BLOCKS method…

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 384 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

. . exported “OCHEF”.”SALES”                             4.960 KB       4 rows

Master table “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded

******************************************************************************

Dump file set for OCHEF.SYS_EXPORT_TABLE_01 is:

/backup/sales.dmp

Job “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully completed at 11:12:43

远程导出分区表的某个分区:

[oracle@node1 ~]$ expdp ochef/oracle directory=dump_dir dumpfile=sales.dmp network_link=test tables=sales:sales2010_q2

ORA-39001: invalid argument value

ORA-39203: Partition selection is not supported over a network link.

本地导出分区表的某个分区:

[oracle@ora10g ~]$ expdp ochef/oracle directory=dump_dir dumpfile=sales.dmp tables=sales:sales2010_q2

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “OCHEF”.”SYS_EXPORT_TABLE_01″:  ochef/******** directory=dump_dir dumpfile=sales.dmp tables=sales:sales2010_q2

Estimate in progress using BLOCKS method…

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 128 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

. . exported “OCHEF”.”SALES”:”SALES2010_Q2″              4.937 KB       2 rows

Master table “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully loaded/unloaded

******************************************************************************

Dump file set for OCHEF.SYS_EXPORT_TABLE_01 is:

/backup/sales.dmp

Job “OCHEF”.”SYS_EXPORT_TABLE_01″ successfully completed at 11:07:07

关于远程expdp用户权限问题,请移步这里

-The End-

Written by ochef

May 19th, 2010 at 12:27 pm

Posted in Database

Tagged with ,

db_unique_name与service_name

leave a comment

为了data guard在角色切换时不用事先准备好二个init.ora参数文件,那么就需要配置valid_for参数,类似如下配置(备库):

db_unique_name=ora10gstd

log_archive_dest_1=’location=/u01/app/oracle/oradata/ora10g/archive valid_for=(all_logfiles,all_roles) db_unique_name=ora10gstd’

log_archive_dest_2=’service=standby lgwr async valid_for=(online_logfiles,primary_role)   db_unique_name=ora10g’

db_unique_name在oracle的高可用dataguard的应用中会经常使用,有和db_name不一样的作用,在物理dg中,要求主、从库都有一样的db_name(虽然他们和rac不一样,并不是同一个库),但是他们的db_unique_name是不一样的,用以进行不同的标示。

注意:如果修改了db_unique_name的值,会影响到Service_names,也会影响到动态监听的service_name,因此,也应修改tnsnames.ora文件中service_name的服务名,否则,即使tnsping能通,但无法提供相应的服务。

-The End-

Written by ochef

May 19th, 2010 at 9:59 am

Posted in Database

Tagged with ,

Oracle Restart

leave a comment

上一篇文章,我用同样的安装方法同样的配置成功了,也许还真是版本不兼容的问题。

[oracle@ora11gr2 ~]$ cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.3 (Carthage)

[oracle@ora11gr2 ~]$ uname -a
Linux ora11gr2 2.6.18-128.el5 #1 SMP Wed Jan 21 07:58:05 EST 2009 i686 i686 i386 GNU/Linux

[oracle@ora11gr2 ~]$ srvctl config database -d ora11gr2 -a
Database unique name: ora11gr2
Database name:
Oracle home: /u01/app/oracle/product/11.2.0/dbhome_1
Oracle user: oracle
Spfile:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups:
Services:
Database is enabled
[oracle@ora11gr2 ~]$

模拟了进程异常终止之后,restart将其启动的过程:

[oracle@ora11gr2 ~]$ srvctl start database -d ora11gr2
[oracle@ora11gr2 ~]$ ps -ef|grep ora_
oracle    4881     1  0 12:42 ?        00:00:00 ora_pmon_ora11gr2
oracle    4883     1  0 12:42 ?        00:00:00 ora_vktm_ora11gr2
oracle    4887     1  0 12:42 ?        00:00:00 ora_gen0_ora11gr2
oracle    4889     1  0 12:42 ?        00:00:00 ora_diag_ora11gr2
oracle    4891     1  0 12:42 ?        00:00:00 ora_dbrm_ora11gr2
oracle    4893     1  1 12:42 ?        00:00:00 ora_psp0_ora11gr2
oracle    4895     1  1 12:42 ?        00:00:00 ora_dia0_ora11gr2
oracle    4897     1 21 12:42 ?        00:00:03 ora_mman_ora11gr2
oracle    4899 1  0 12:42 ?        00:00:00 ora_dbw0_ora11gr2
oracle    4901     1  2 12:42 ?        00:00:00 ora_lgwr_ora11gr2
oracle    4903     1  0 12:42 ?        00:00:00 ora_ckpt_ora11gr2
oracle    4905     1  1 12:42 ?        00:00:00 ora_smon_ora11gr2
oracle    4907     1  0 12:42 ?        00:00:00 ora_reco_ora11gr2
oracle    4909     1  6 12:42 ?        00:00:00 ora_mmon_ora11gr2
oracle    4911     1  0 12:42 ?        00:00:00 ora_mmnl_ora11gr2
oracle    4913     1  0 12:42 ?        00:00:00 ora_d000_ora11gr2
oracle    4915     1  0 12:42 ?        00:00:00 ora_s000_ora11gr2
oracle    4985     1  0 12:42 ?        00:00:00 ora_p000_ora11gr2
oracle    4987     1  0 12:42 ?        00:00:00 ora_p001_ora11gr2
oracle    4989     1  0 12:42 ?        00:00:00 ora_qmnc_ora11gr2
oracle    5007     1  7 12:42 ?        00:00:00 ora_cjq0_ora11gr2
oracle    5011     1 34 12:42 ?        00:00:00 ora_j000_ora11gr2
oracle    5013     1  8 12:42 ?        00:00:00 ora_j001_ora11gr2
oracle    5015  3000  0 12:42 pts/0    00:00:00 grep ora_
[oracle@ora11gr2 ~]$ date
Wed Apr 21 12:42:59 CST 2010
[oracle@ora11gr2 ~]$ kill -9 4899
[oracle@ora11gr2 ~]$ ps -ef|grep ora_
oracle    5100     1 10 12:43 ?        00:00:00 ora_pmon_ora11gr2
oracle    5102     1 11 12:43 ?        00:00:00 ora_vktm_ora11gr2
oracle    5106     1  9 12:43 ?        00:00:00 ora_gen0_ora11gr2
oracle    5108     1  9 12:43 ?        00:00:00 ora_diag_ora11gr2
oracle    5110     1 10 12:43 ?        00:00:00 ora_dbrm_ora11gr2
oracle    5112     1  7 12:43 ?        00:00:00 ora_psp0_ora11gr2
oracle    5114  3000  0 12:43 pts/0    00:00:00 grep ora_
[oracle@ora11gr2 ~]$ ps -ef|grep ora_
oracle    5100     1  1 12:43 ?        00:00:00 ora_pmon_ora11gr2
oracle    5102     1  0 12:43 ?        00:00:00 ora_vktm_ora11gr2
oracle    5106     1  0 12:43 ?        00:00:00 ora_gen0_ora11gr2
oracle    5108     1  0 12:43 ?        00:00:00 ora_diag_ora11gr2
oracle    5110     1  1 12:43 ?        00:00:00 ora_dbrm_ora11gr2
oracle    5112     1  1 12:43 ?        00:00:00 ora_psp0_ora11gr2
oracle    5116     1  1 12:43 ?        00:00:00 ora_dia0_ora11gr2
oracle    5118     1 24 12:43 ?        00:00:02 ora_mman_ora11gr2
oracle    5120 1  1 12:43 ?        00:00:00 ora_dbw0_ora11gr2
oracle    5122     1  1 12:43 ?        00:00:00 ora_lgwr_ora11gr2
oracle    5124     1  1 12:43 ?        00:00:00 ora_ckpt_ora11gr2
oracle    5126     1  2 12:43 ?        00:00:00 ora_smon_ora11gr2
oracle    5128     1  0 12:43 ?        00:00:00 ora_reco_ora11gr2
oracle    5130     1  6 12:43 ?        00:00:00 ora_mmon_ora11gr2
oracle    5132     1  1 12:43 ?        00:00:00 ora_mmnl_ora11gr2
oracle    5134     1  0 12:43 ?        00:00:00 ora_d000_ora11gr2
oracle    5136     1  0 12:43 ?        00:00:00 ora_s000_ora11gr2
oracle    5206     1  2 12:43 ?        00:00:00 ora_p000_ora11gr2
oracle    5208     1  1 12:43 ?        00:00:00 ora_p001_ora11gr2
oracle    5210     1  1 12:43 ?        00:00:00 ora_qmnc_ora11gr2
oracle    5228     1  2 12:43 ?        00:00:00 ora_cjq0_ora11gr2
oracle    5232  3000  0 12:43 pts/0    00:00:00 grep ora_
[oracle@ora11gr2 ~]$ date
Wed Apr 21 12:43:35 CST 2010

这里你还可以参考kamus大师的文章。

-The End-

Written by ochef

April 21st, 2010 at 1:21 pm

Posted in Database

Tagged with ,