EMPO007'S BLOG

欢迎来到EMPO007'S BLOG>>   | 首页 资源中心 | DB2 | OTHERS | UNIX/LINUX | ORACLE | LIFE | ITPUB论坛

10g中的transaction等待事件

发表人:empo007 | 发表时间: 2010年一月29日, 10:29

最近公司数据库出现了这样一个现象:
TX enqueue等待队列很长,而持有锁的会话所执行UPDATE语句的执行计划没有任何问题,执行效率应该很高,但是语句持有锁的时间却很长,这些会话的等待事件是transaction,从v$active_session_history中查看持有锁会话的相关信息,发现这些会话一直处于等待状态,等待事件一直是transaction。

关于transaction等待事件:等待其它事务rollback,这些事务可能是异常中断或者手工rollback,因为一些锁没有释放,阻塞了其它会话

 查看全文

10G新特性:使用客户端WALLET不用用户名和密码登陆远程数据库

发表人:empo007 | 发表时间: 2010年一月19日, 17:08

这里举个例子:

1、在D:oracleproduct10.2.0db_1NETWORKADMIN 中(任何目录都可以)创建密钥文件:

mkstore -wrl D:oracleproduct10.2.0db_1NETWORKADMIN -create

2、建立信任关系

mkstore -wrl D:oracleproduct10.2.0db_1NETWORKADMIN -createCredential tns username password

3、在客户端sqlnet.ora中增加下面的行

WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = D:oracleproduct10.2.0db_1NETWORKADMIN)))

SQLNET.WALLET_OVERRIDE = TRUE

4、登陆时不用提供用户名和密码

sqlplus /@tns


今天手工创建10G数据库失败,报ORA-12701错误

发表人:empo007 | 发表时间: 2010年一月18日, 13:49

SQL> CREATE DATABASE oam
2 USER SYS IDENTIFIED BY ORACLE
3 USER SYSTEM IDENTIFIED BY oracle
4 CONTROLFILE REUSE
5 logfile group 1 ('/ocs/oracle/ocs/oracle/oradata/oam/redo1.log') size 200M,
6 group 2 ('/ocs/oracle/ocs/oracle/oradata/oam/redo2.log') size 200M,
7 group 3 ('/ocs/oracle/ocs/oracle/oradata/oam/redo3.log') size 200M
8 MAXLOGFILES 5
9 MAXLOGMEMBERS 5
10 MAXLOGHISTORY 1
11 MAXDATAFILES 100
12 MAXINSTANCES 1
13 CHARACTER SET ZHS16GBK
14 NATIONAL CHARACTER SET AL16UTF16
15 datafile '/ocs/oracle/ocs/oracle/oradata/oam/system.dbf'
16 size 2048M autoextend on extent management local
17 sysaux datafile '/ocs/oracle/ocs/oracle/oradata/oam/sysaux.dbf'
18 size 2048M autoextend on
19 undo tablespace undotbs1
20 datafile '/ocs/oracle/ocs/oracle/oradata/oam/undo.dbf' size 2048M
21 default temporary tablespace temp
22 tempfile '/ocs/oracle/ocs/oracle/oradata/oam/temp.dbf' size 2048M;
NATIONAL CHARACTER SET AL16UTF16
*
ERROR at line 14:
ORA-12701: CREATE DATABASE character set is not known

检查发现是环境变量ORA_NLS10设置错误导致:

 查看全文

关于中国拦截导弹试验目的的我的看法

发表人:empo007 | 发表时间: 2010年一月13日, 17:08

显然主要是针对美对台军售,因为可以迫使美国进行对话进而对军售施加影响

其次也针对印度的战争叫嚣和周边一些敌对国家比如越南

仅此留存,让我们拭目以待


设置10046跟踪处理数据库不能open一例

发表人:empo007 | 发表时间: 2010年一月12日, 14:44

最近有个数据库不能open:
Errors in file /oracle/admin/zsjy/udump/zsjy_ora_18129.trc:
ORA-00980: synonym translation is no longer valid
Error 980 happened during db open, shutting down database
USER: terminating instance due to error 980
Instance terminated by USER, pid = 18129
ORA-1092 signalled during: alter database open...

 查看全文

trace errorstack

发表人:empo007 | 发表时间: 2010年一月08日, 12:18

alter session set events='err_num trace name ERRORSTACK level 10';
alter session set events 'err_num trace name errorstack off';

Oracle常用EVENT参考

发表人:empo007 | 发表时间: 2010年一月07日, 13:52

具体如下:

 查看全文

当实例不能正常连接,如何获取诊断信息?

发表人:empo007 | 发表时间: 2010年一月07日, 11:15

NOTE:359536.1

几种方式:

 查看全文

RAC中临时空间使用机制

发表人:empo007 | 发表时间: 2010年一月07日, 11:01

NOTE:465840.1

要点:

 查看全文

如何查看linux系统是32位还是64位?

发表人:empo007 | 发表时间: 2009年十月22日, 14:57

# getconf LONG_BIT


如何找到引起TX锁的语句?

发表人:empo007 | 发表时间: 2009年十月13日, 14:18

需要通过v$open_cursor视图找到语句:

select w.holding_session, s1.username holding_user, q1.sql_text holding_sql
from dba_waiters w,
v$session s1,
v$open_cursor q1,
v$locked_object l1,
dba_objects o1
where w.holding_session = s1.sid
and s1.sid = q1.sid(+)
and l1.session_id = s1.sid
and l1.object_id = o1.object_id
and (upper(q1.sql_text) like '%DELETE%' or
upper(q1.sql_text) like '%UPDATE%')
and upper(q1.sql_text) like '%' || o1.object_name || '%';

这一查询结果可能会存在多条记录,需要结合等待会话的语句,从逻辑上分析是哪一条语句产生的锁。

可以通过下面的语句找到发生等待的具体数据记录(假定等待锁的会话ID为13):

select s.sid,
o.object_name wait_object,
s.row_wait_obj#,
s.row_wait_file#,
s.row_wait_block#,
s.row_wait_row#,
dbms_rowid.rowid_create(1,
s.row_wait_obj#,
s.row_wait_file#,
s.row_wait_block#,
s.row_wait_row#) l_rowid
from v$session s, v$enqueue_lock l, dba_objects o
where s.sid = l.sid
and s.row_wait_obj# = o.object_id(+)
and s.sid = 13;

然后通过查询到的对象和ROWID找到相关数据(假定被锁住的对象是TEST,rowid是AAAHbvAAJAAAA/YAAA):

select * from test where rowid = chartorowid('AAAHbvAAJAAAA/YAAA');


调整......

发表人:empo007 | 发表时间: 2009年九月25日, 09:51

投入、沉着、严谨

几个note

发表人:empo007 | 发表时间: 2009年九月23日, 11:33

1、在RAC环境下,如果logon较多的话,需要加大sys.audseq$的cache
2、对于enqueue,TX锁等待的LMODE是4,则是典型的ITL等待或者是等待索引页节点分裂
3、10G中的正则表达式函数使用举例:
SQL> Select username, phonenumber from t_userinfo
2 where REGEXP_LIKE(phonenumber, '13[5-8][0-9][0-9][0-9][0-9]8{4}');


分区表管理

发表人:empo007 | 发表时间: 2009年九月23日, 11:01

1、增加表分区
alter table t_partition_range add partition t_range_p4 values less than(40);
如果在执行该语句时未指定update indexes子句:
对range/list分区,其local索引和global索引不会受影响,
对hash分区,新加分区及有数据移动的分区的local索引和glocal索引会被置为unuseable
2、收缩表分区
alter table t_partition_hash coalesce partition;
如果在执行该语句时没有指定update indexes子句,收缩过程中有数据改动的分区其local索引和glocal索引都会失效
3、删除表分区
删除分区:alter table [tbname] drop partition [ptname];
删除子分区:alter table [tbname] drop subpartition [ptname];
4、交换分区
Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁移数据,注意不是将表转换成分区或非分区的形式,而仅只是迁移表中数据(互相迁移),由于其号称是采用了更改数据字典的方式,因此效率最高(几乎不涉及io操作)。Exchange partition适用于所有分区格式,你可以将数据从分区表迁移到非分区表,也可以从非分区表迁移至分区表,或者从hash partition迁移到range partition诸如此类。
语法为:alter table tbname1 exchange partition/subpartition ptname with table tbname2;

RAC中跨节点并行

发表人:empo007 | 发表时间: 2009年九月23日, 10:56

在RAC中,我们可以通过设置跨节点并行,将并行操作分布到RAC中的不同节点同时进行,以便发挥整个RAC环境的最大运算能力。在RAC中设置跨节点并行主要是通过设置parallel_instance_group和instance_groups这两个参数进行的。 查看全文

Valid XHTML 1.0 Strict and CSS. Powered by pLog
Design by Blog.lvwo.com