Skip to content

Monthly Archives: 6月 2011

ORA-00350: log 2 of instance luda (thread 1) needs to be archived

 

 
 
 
ORA-00262: current log 1 of closed thread 1 cannot switch
ORA-00312: online log 1 thread 1:
'/oracle/oradata/LUDA/onlinelog/o1_mf_1_6zlkxrqf_.log'
ORA-00312: online log 1 thread 1:
'/oracle/flash_recovery_area/LUDA/onlinelog/o1_mf_1_6zlky0b9_.log'
ORA-00350: log 2 of instance luda (thread 1) needs to be archived
ORA-00312: online log 2 thread 1:
'/oracle/oradata/LUDA/onlinelog/o1_mf_2_6zlky76o_.log'
ORA-00312: online log 2 thread 1:
'/oracle/flash_recovery_area/LUDA/onlinelog/o1_mf_2_6zlkyghs_.log'
 
 
SQL> select GROUP#,ARCHIVED ,STATUS from v$log;
 
    GROUP# ARC STATUS
———- — —————-
         1 NO  CURRENT
         3 NO  INACTIVE
         2 NO  INACTIVE
 
 
配置DG时候强行关闭节点2,节点1 
再次启动节点一时候报错
 
[oracle@dg1 09:50:38|~]oerr ora 262
00262, 00000, "current log %s of closed thread %s cannot switch"
// *Cause:  The log cannot be cleared or manually archived because it is
//          the current log of a closed thread, and it is not possible to
//          switch logs so another log is current. All other logs for the
//          thread need to be archived, or cleared, and cannot be reused.
// *Action: Archive another log in the same thread first, or complete the
//          clearing. See attached errors for the reason the switch cannot
//          be completed.
[oracle@dg1 09:59:25|~]oerr ora 312
00312, 00000, "online log %s thread %s: '%s'"
// *Cause:  This message reports the filename for details of another message.
// *Action: Other messages will accompany this message. See the
//          associated messages for the appropriate action to take.
[oracle@dg1 09:59:30|~]oerr ora 350
00350, 00000, "log %s of instance %s (thread %s) needs to be archived"
// *Cause:  The command cannot be done because the log has not been archived,
//          and media recovery has been enabled.
// *Action: Archive the log or disable media recovery. If the command supports
//          an UNARCHIVED option then it can be used. However this may result
//          in making backups unuseable, and forcing the drop of some offline
//          files.
 
 
这里报2个日志组,快速解决办法:
 

alter database clear unarchived logfile group 2;
alter database clear unarchived logfile group 1;
alter database open;
 
当然这个报错的原因是首先关闭了dg2节点,当关闭节点1时候,rfs归档无法找到standby,从而传输失败,报错
 
clear =。= 不是很妥当的办法。

 

ORA-00600: 内部错误代码, 参数: [ktecgetsh-inc], [1], [], [], [], [], [], []

 

系统 :aix 53

版本: 10.2.0.3

 

Errors in file /oracle/app/oracle/admin/sxsi/udump/sxsi_ora_909628.trc:
ORA-00600: 内部错误代码, 参数: [ktecgetsh-inc], [1], [], [], [], [], [], []

处理过程:

 

3.1查看数据库等待事件:

确定当前session没有任何等待事件

SQL> select sid from v$mystat where rowed <=1;

SQL> select sid,event,p1,p1text from v$session

     

 

3.3定位出现问题的ACA的表:

SQL> select * from tab where tname like '%ACA6%';

 

TNAME                          TABTYPE  CLUSTERID

—————————— ——- ———-

ACA6                           TABLE

ACA60701                       TABLE

ACA6A                          TABLE

ACA6B                          TABLE

ACA6C                          TABLE

ACA6MERGE                      TABLE

ACA6MOVE                       TABLE

ACA6_BACKUP                    TABLE

ACA6_CW                        TABLE

ACA6_DEF                       TABLE

ACA6_TEMP                      TABLE

 

TNAME                          TABTYPE  CLUSTERID

—————————— ——- ———-

ACA6_TZ                        TABLE

F_ACA6                         TABLE

F_ACA6_1201                    TABLE

F_ACA6_BAK_20100629            TABLE

MLOG$_ACA6                     TABLE

ZZZ_ACA6_12                    TABLE

ZZZ_ACA6_DB                    TABLE

ZZZ_ACA6_YL                    TABLE

  找出ACA6

 

3.4  通过视图dba_indexes查看ACA6表上的索引

SQL> select INDEX_NAME,INDEX_TYPE from dba_indexes where table_name = 'ACA6';

 

INDEX_NAME                     INDEX_TYPE

—————————— —————————

IDX_ACA6_AAC001_AAE140         NORMAL

PK_ACA6                        NORMAL

IDX_ACA6_AAC001                NORMAL

IDX_ACA6_AAE063                NORMAL

IDX_ACA6_AAE074                NORMAL

IDX_ACA6_AAB001                NORMAL

IDX_ACA6_EAE038                NORMAL

IDX_ACA6_AAE002                NORMAL

IDX_ACA6_PRSENO                NORMAL

PK_ACA6                        NORMAL

IDX_ACA6_PRSENO                NORMAL

 

INDEX_NAME                     INDEX_TYPE

—————————— —————————

PK_ACA6                        NORMAL

IDX_ACA6_AAC001                NORMAL

IDX_ACA6_AAE002                NORMAL

IDX_ACA6_AAE063                NORMAL

IDX_ACA6_AAE074                NORMAL

IDX_ACA6_EAE038                NORMAL

IDX_ACA6_PRSENO                NORMAL

 

已选择18行。

  由上面的查询可以看出此表有18个索引,如果全部重建,那么需要的时间需要比较长,这里我们根据错误以及内部原理推出错误只局限在出现错误的对应的分区表上的索引,所以只要找出对应的分区表上的索引即可。

3.5  根据客户提供的aca6表的aca6_6分区进行拆分,那么报错也是这个分区表:

执行

SQL>Select * from aca6 partition(aca6_1) where ….;

 

SQL>select * from aca6 partition(aca6_6) where aae002='125485532354'; 

ORA-10632:invalid rowid

   得出的是 分区表aca6 1-5partition都是正常的,只有执行拆分操作的6号分区出现问题,根据查询到的ace002索引为此分区aae002字段上的索引,吕与我采用CATS尝试创建该表备份,并重建ACE002索引。

1.6    通过下面语句执行cats以及重建

 

Create table aca6_6bak as select * from aca6 partition(aca6_6);

报错:ora 10632.

终止业务服务器,尝试重建索引:

select dbms_metadata.get_ddl('index','IDX_ACA6_AAE002') from dual;

然后将结果粘贴执行,

报错:ora 10632

  

发现事故非常严重,已经无法访问表,无法用cats和重建索引方式解决这个问题,逐建议采用备份恢复,但是最后发现备份恢复不出

 3.7 执行hint全扫分析

 

select /*+ parallel(aca6,2) */ count(*) from aca6 partition(aca6_6);

 3725620 rows

ora  10632invaild rowid

这里标明,表数据还能扫描,还没全坏继续执行

SQL> select * from aca6 partition(aca6_6) where rownum <= 10000

观察等待事件

SQL> select sidevent,p1,p2 from v$session where sid in (select sid from v$mystat where

Rownum <=1);

SID EVENT

———- —————————————————————-

        P1         P2

———- ———-

       137 SQL*Net message to client

1650815232          1

…….

在这里结果标明扫描并没有从磁盘里读取数据块,任何的select的操作都不可能没有等待事件,向磁盘读取数据过程都需要一定的时间,并且会有相关的IO事件在event中显示,

这里分析:数据库并没有向硬盘读取数据,表的数据在硬盘中,数据是正常的,可能是由于这个bug引起内存错误造成oracle无法正确去读取硬盘数据块。

解决办法:

将共享池刷新一遍,尝试cats以及index rebuild

操作:

SQL >Alter system flush shared_pool;

SQL >Alter system flush buffer_cache;

 

然后执行CATS以及INDEX REBUILT成功。备有aca6_6bak一份,大约5G数据

 

学做人

为人要谦和,

要学会包容,

说话不要尖锐,

心平气和,才能胸有成竹。

技术 和 性格差无关,谦和。

Linux:设置用户变量ps1

设定的PS1的值

PS1="[u@h w]$"

PATH=$PATH:$HOME/bin

#使用export把PS1输出,以使它可以在子shell中生效,这会造成ROOT用户的也采用此样式

#export PS1 要慎用

export PATH

unset USERNAME

下面简单说说环境下默认的特殊符号所代表的意义:

d :代表日期,格式为weekday month date,例如:"Mon Aug 1"

H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux

h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略

t :显示时间为24小时格式,如:HH:MM:SS

T :显示时间为12小时格式

A :显示时间为24小时格式:HH:MM

u :当前用户的账号名称

v :BASH的版本信息

w :完整的工作目录名称。家目录会以 ~代替

W :利用basename取得工作目录名称,所以只会列出最后一个目录

# :下达的第几个命令

$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

 

例子:

 

export  PS1="[oracle t->w]"