Saturday, June 7, 2008, 10:43 PM ( 26 浏览 )
- 技术文档 - 发表 fuyuncat
前两天看到现场alert日志中有一些00060(Deadlock)的告警。查了一下日志文件,发现一些奇怪的现象,比如有些锁在Insert时产生的,有些死锁是对同一个对象产生的。于是在解决这些问题的同时,仔细研究了一下TX锁,总结了产生TX锁的各种情况。数据记录被锁
我们知道,Oracle中事务产生的索都是行级锁。也就说,事务在对表做更新操作(Update、Delete)时,只在针对数据块中需要更新的数据记录加锁。这种类型的锁就是我们最常见的锁。看下面的例子:
完整文章
0 引用
| 永久链接
| 







Thursday, May 8, 2008, 09:10 AM ( 17 浏览 )
- 案例 - 发表 fuyuncat
一大早,突然收到生产系统报出多个ORA-01650错误,报回滚段空间不足。先分析一下相关背景。产生报错的程序是一个数据处理模块,每天会将其他系统传过来的平面文件中的内容处理后放入数据库中,事务量很大。我们的系统是9i,划分了16个回滚段,其中两个大的batch回滚段,每个batch回滚段有6G的足够空间。而数据处理模块会在事务中指定使用BATCH1。
再分析报错的模块。检查相关的数据事务处理部分,由于业务需要保持数据的一致性,需要处理完1个文件后才能提交,中间如果出错就要全部回滚。经过确认,这部分代码有很长时间没有做改动了。然后再确认数据量,可以确认,今天(周五)是一周之内文件内容最少的一天。也就是说,如果由于数据量引起错误,其他时间的概率应该更大。
完整文章
Wednesday, May 7, 2008, 10:42 PM ( 15 浏览 )
- 技术文档 - 发表 fuyuncat
我自己机器上有很多很有价值的文档(有自己写的,也有下载的),但是总是有时候想找一篇文档,当时不记得放在哪了。机器上正好装了Ultra Search,我就在我的文档目录上创建一个搜索系统,以后找起文档来方便多了。(当然google desktop也是一个不错的工具,但是,它有一定局限性,比如不能针对某个目录搜索,没有高级搜索。关键是顺便还可以配置一下Ultra Search,增加经验值J)
以下是创建步骤(安装Ultra Search过程参见我的另外一篇文章《安装配置ultra search》):
1. 创建一个数据库用户
Sqlplus “/as sysdba”
SQL> Create user demo identified by demo;
SQL> grant WKUSER to demo;
2. 启动Ultra Search
Searchctl start
完整文章
Monday, April 7, 2008, 10:41 PM ( 13 浏览 )
- 技术文档 - 发表 fuyuncat
1. 安装ultra search组件从Oracle网站上下载oracle10g companion安装。
重启数据库;
SQL> startup force
2. 安装Oracle Text 10g
a) 创建Oracle Text对象
SQL> connect SYS/password as SYSDBA
SQL> spool text_install.txt
SQL> @?/ctx/admin/catctx.sql CTXSYS SYSAUX TEMP UNLOCK
完整文章
Friday, March 7, 2008, 10:40 PM ( 20 浏览 )
- 技术文档 - 发表 fuyuncat
Dual表示一个特殊的系统,它只有一个字段、一条记录。在我们的代码中,经常会利用它产生一些特殊值,比如系统时间:select sysdate from dual;
正常情况下,以上语句会对dual表做一次全表扫描,产生3 consistent gets。这是一个很小的数值。但是如果放在一个大循环内,就会产生非常大的consistent gets(实际上,我们的系统就出现过这样的问题)。
如何来优化它呢,consistent gets即时只降低1,在一个大循环中都将会是一个非常大值。首先看一下sql trace:
完整文章
Thursday, February 14, 2008, 10:39 PM ( 13 浏览 )
- 技术文档 - 发表 fuyuncat
事务和数据块这里主要想通过试验来推断Oracle的事务在数据块(Oracle中存储的最小单位)上一些微观操作,以便于更好的理解Oracle的事务控制、一致性处理及锁冲突。
创建测试表:
SQL> create table t_multiver (a number, b number);
Table created.
SQL> insert into t_multiver values (1,1);
1 row created.
完整文章
Thursday, February 7, 2008, 10:37 PM ( 23 浏览 )
- 技术文档 - 发表 fuyuncat
Global Temporary Table是Oracle 8i中出现的特性,可以用于存储事务或会话中的临时数据。它的出现大大方便了开发人员。但是在使用上面,由于它本身的特性,一直存在一些问题。简单说一下临时表,它的数据只对调用它的会话可见,一个会话是无法访问其他会话中的临时表的数据。可以在创建时指定它是事务级的还是会话级的。它被创建在用户的默认临时表空间上,在创建时不会分配段,而是在会话中第一次insert的时候从零时表空间分配数据段。DML时,不会产生redo log,但是会产生undo log。并且无法生成临时表或者临时表上索引的统计信息(势必会影响CBO下的查询计划)。
下面研究一下临时表的数据是如何存储,又是如何获得的,如何cache在内存中的:
完整文章
Monday, January 7, 2008, 10:36 PM ( 13 浏览 )
- 技术文档 - 发表 fuyuncat
关于streams replication的原理本文就不做介绍了,相关文章可以在OTN和metalink上找到。本文主要介绍通过streams replication和transparent gateway实现Oracle向SQL Server的数据同步的配置过程。主要参考了metalink上的文章,并在期间开了4个SR解决发现的问题(并发现新bug一个)。
一、测试环境:
Oracle DB Server: 9205, SID: ORA92, Host: ORATEST(192.168.111.22), schema: orarep
SQL Server: 2000, DB: pubs, Host: SQLTEST,(192.168.111.11) schema: sqlrep
Oracle 透明网关:10gR2
二、透明网关的配置
完整文章
Friday, December 7, 2007, 10:35 PM ( 10 浏览 )
- 技术文档 - 发表 fuyuncat
1.1 第一步:确定主数据库中是否包含逻辑standby数据库不支持的数据类型和表。以下是逻辑standby数据库支持的类型:
CHAR
NCHAR
VARCHAR2 and VARCHAR
NVARCHAR2
NUMBER
DATE
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
RAW
CLOB
BLOB
完整文章
Thursday, November 8, 2007, 09:09 AM ( 11 浏览 )
- 案例 - 发表 fuyuncat
某系统突然掉电,系统启动后发现Oracle无法启动。启动时报如下错误:ORA-01102 cannot mount database in EXCLUSIVE mode
出现1102错误可能有以下几种可能:
一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;
二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。
完整文章





