Tag Archives: update

ORA-7445(_intel_fast_memcpy.A)错误

在10.2.0.4 RAC for X86-64环境上出现了ORA-7445[_intel_fast_memcpy.A]的错误。 以前碰到过几次的memcpy有关的错误,但是这个错误函数是第一次碰到: Sat Apr 7 17:27:11 2012 Errors IN file /opt/app/oracle/admin/orcl/bdump/orcl1_j002_16579.trc: ORA-07445: exception encountered: core dump [_intel_fast_memcpy.A()+10] [SIGSEGV] [Address NOT mapped TO object] [0x2A9734C000] [] [] 本以为这个错误不是太常见,结果查询MOS采发现,原来类似的错误还是很常见的,于是进一步比对详细的TRACE信息: *** 2012-04-07 17:27:11.099 *** ACTION NAME:() 2012-04-07 17:27:11.099 *** MODULE … Continue reading

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

ODA一键式升级

ODA另外一个值得称道的方便之处,就是一键式升级。 数据库的升级本身就是比较麻烦的事情,不谈跨大版本的升级,仅仅是PSR的升级也包括很多的步骤,即使是一个PSU的升级,同样也不是一个简单的工作。如果是RAC环境,那么恭喜你,工作量DOUBLE都不止。 那么对于ODA而言,除了RAC架构之外,还有自身的ILON以及管理工具要维护,因此整个环境的升级一定是一个非常烦琐的工作。而ODA的最大目标就是简化工作,因此整个ODA硬件及软件环境这个非常烦琐的操作被简化为几个命令完成。 当前的ODA管理工具oak版本为2.2.0.0.0,包含的数据库版本为11.2.0.3.2,下面的测试将oak升级到2.3.0.0.0,而数据库的版本相应的升级到11.2.0.3.3。 首先需要从MOS上下载补丁文件:p13982331_23000_Linux-x86-64.zip,这个文件打包了所有ODA升级需要的文件。 上传到/tmp目录后,通过unpack选项进行解压: [root@odaenmo1 ~]# cd /opt/oracle/oak/bin [root@odaenmo1 bin]# ./oakcli unpack –package /tmp/p13982331_23000_Linux-x86-64.zip Unpacking takes a while, pls wait…. Successfully unpacked the files TO repository. 解压完成后,就可以执行升级PATCH的操作了: [root@odaenmo1 bin]# ./oakcli UPDATE –patch 2.3.0.0.0 执行完这个操作,Oracle会提示在升级过程中,DB/ASM/CLUSTERWARE都会被停止,选择确认后,Oracle要求确认是否在节点2上同样执行了unpack操作。 输入root的密码后,Oracle开始对HMP、OAK、IPMI和STORAGE进行升级操作。 不过这个升级过程并不会升级GRID和DB,如果要将CLUSTERWARE和DB同样升级到最新的版本,应该在上面的升级结束后执行下面的命令: [root@odaenmo1 bin]# … Continue reading

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

利用触发器解决更新主键冲突的问题

有朋友问我能否用触发器实现更新数据时,如果发现主键已经存在,则将冲突的主键更新为当前记录之前的主键值。 简单的说,如果表中存在主键为1和2的记录,如果一条UPDATE语句将1更新为2,那么想要实现的功能是为了确保这个UPDATE可以执行成功,在后台自动将ID为2的记录更新为1。 这个功能应该可以实现,但是直接在触发器中肯定无法实现,因为这是一个标准的变异表问题。而且即使是采用自治事务的方式,也需要小心,因为要修改原有的记录就必须通过UPDATE实现,而这个UPDATE又会导致触发器的触发,如果处理不当,就会导致循环触发。 SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30), CONSTRAINT PK_T PRIMARY KEY (ID)); TABLE created. SQL> CREATE OR REPLACE PROCEDURE P_UPDATE_T (P_NEW NUMBER, P_OLD NUMBER) AS 2 BEGIN 3 FOR I IN (SELECT ID FROM T WHERE … Continue reading

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

ORA-600(13030)错误

在ITPUB上看到的一个UPDATE RETURN引发的ORA-600错误。 告警日志中错误如下: Mon Jan 16 09:50:13 2012 Errors IN file /DATA/dir1/app/oracle/admin/moyzkf1/udump/moyzkf1_ora_27801.trc: ORA-00600: internal error code, arguments: [13030], [1], [], [], [], [], [], [] 从对应的TRACE中可以看出,执行的是一个UPDATE RETURN语句: *** 2012-01-16 09:50:13.236 *** SERVICE NAME:(moyzkf1) 2012-01-16 09:50:13.179 *** SESSION ID:(1981.62963) 2012-01-16 09:50:13.179 … Continue reading

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

插入LOB对象的方法

其实以前写过类似的文章,但是都是在其他例子中,没有专门针对这个问题进行过描述,最近发现,还有很多人不清楚,插入一个包含LOB对象的记录需要几个步骤。 在客户的环境中,发现插入一条包含LOB的记录,居然用了四个步骤: SQL> CREATE TABLE T_LOB (ID NUMBER, NAME VARCHAR2(30), CONTENTS CLOB); 表已创建。 SQL> DECLARE 2 V_CLOB CLOB; 3 V_STR VARCHAR2(32767) := LPAD(’A’, 4000, ‘A’); 4 BEGIN 5 INSERT INTO T_LOB 6 VALUES (1, ‘A’, EMPTY_CLOB()); 7 SELECT CONTENTS 8 … Continue reading

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