what is rownum?

March 19th, 2013 No comments

long long long ago写过的一篇文章,分享给开发同学的,现在看看解释的还没有到点上,读起来会有点呼之欲出的感觉,吊起了欲可惜却没有出=,=!,需要的人将就着看看先。

Read more…

Categories: fundamental Tags:

Oracle常见变更风险分析

February 22nd, 2013 No comments

整理自之前分享过的线上常见变更风险分析,也可以从这里下载完整的doc:

Oracle常见变更风险分析

常见变更风险分析

一、 Create sequence

http://wiki.alipay.net/ops/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C-%E5%88%9B%E5%BB%BA%E3%80%81%E5%88%A0%E9%99%A4%E3%80%81%E4%BF%AE%E6%94%B9sequence

这个操作本身来说没有什么风险,毕竟不会涉及到高并发或者消耗大量的cpu,io什么的,也不会引起其他什么对象失效。

nocache的风险:

高并发访问的情况下,Seq的风险最大的还是在cache的设置,设置的太小会导致row cache lock等待。

SQL> select * from dba_sequences where SEQUENCE_NAME=’SEQ_TEST’ and SEQUENCE_OWNER=’QIFENG’; Read more…

Categories: fundamental Tags:

多线程python的cx_Oracle模块segment fault问题解决一例

January 9th, 2013 No comments

之前用python写了一个自动failover的工具,主要的功能是在主库不可用(如网络 down、主机 down、db down等)时(1分钟内),能够自动触发推送连接池相关的配置,让应用能够切到failover的一个db上去,从而降低系统的不可用时间。一些流水性质的系统特别适合自动failover的设计,比如交易、付款、消息等,特别是在对可用率要求比较高的情况下。

跑题了。。主要讲下这么多天一路走来,解决这个问题的跌宕起伏的心路历程:
Read more…

Categories: fundamental Tags:

test MarsEdit

January 8th, 2013 No comments
Categories: fundamental Tags:

CBO CPU耗费模型:索引 vs 全表扫

May 15th, 2012 No comments

原文:The CBO CPU Costing Model: Indexes vs. Full Table Scans
作者:Richard Foote
翻译:Johnny Cao

 

就如之前承诺过,我觉得我有必要去看看CBO是如何通过系统统计信息和CPU耗费模型来处理一个全表扫(FTS)的,这样我们就可以理解为什么CBO做了这个选择,而不是其他选择。

提醒:你可能需要一个计算器来帮助你:) Read more…

Categories: TSOP Tags: ,

OPTIMIZER_INDEX_CACHING&optimizer_index_cost_adj

May 5th, 2012 No comments

翻书的时候看到的,挺有意思的2个参数,看下doc(11g)上的解释:

OPTIMIZER_INDEX_CACHING

Property
Description

Parameter type
Integer

Default value
0

Modifiable
ALTER SESSION, ALTER SYSTEM

Range of values
0 to 100

OPTIMIZER_INDEX_CACHING lets you adjust the behavior of cost-based optimization to favor nested loops joins and IN-list iterators.

The cost of executing an index using an IN-list iterator or of executing a nested loops join when an index is used to access the inner table depends on the caching of that index in the buffer cache. The amount of caching depends on factors that the optimizer cannot predict, such as the load on the system and the block access patterns of different users.

You can modify the optimizer’s assumptions about index caching for nested loops joins and IN-list iterators by setting this parameter to a value between 0 and 100 to indicate the percentage of the index blocks the optimizer should assume are in the cache. Setting this parameter to a higher value makes nested loops joins and IN-list iterators look less expensive to the optimizer. As a result, it will be more likely to pick nested loops joins over hash or sort-merge joins and to pick indexes using IN-list iterators over other indexes or full table scans. The default for this parameter is 0, which results in default optimizer behavior. Read more…

sql trace的几种方式

May 1st, 2012 No comments

汇总下troubleshooting提到的sql trace的几种方式:

1.9i

dbms_session.set_sql_trace

dbms_system.set_sql_trace_in_session

2.10g+

alter session set events '10046 trace name context forever ,level N'

dbms_system.set_ev(
si=>$sid, --sid
se=>$serial#, --serial#
ev=>10046, --event number
le=>[0|1|4|8|12], --level
nm=>null --name ,usually null
)

dbms_monitor.SESSION_TRACE_ENABLE(  --对应的关闭就是session_trace_disable
SESSION_ID=>$sid,
SERIAL_NUM=>$serial#,
WAITS=>true,  --level 8
binds=>true    --level 4
)
Categories: TSOP Tags:

11g sql baselines实验

April 24th, 2012 No comments

11g sql baselines 实验
sql baselines 在outline 的基础上,增加了对更好执行计划的捕获及演变功能,而outline只有固化执行计划的能力,使用起来也不是很方便。
sql baselines是将sql的执行计划保存在SYSAUX空间的SQL Management Base中,sql解析产生execution plan的时候会参考baseline的信息,那具体baseline是如何影响sql的执行计划产生的呢?
image

也就是说,解析的时候查找SMB,如果存在baseline,则使用baseline,否则使用当前产生的执行计划,到这里其实跟outline差不多,不过baseline最重要的功能不在这里。
要使用sql bseline需要开启一个系统参数:

alter system set OPTIMIZER_USE_SQL_PLAN_BASELINES=true;

1.sql baseline的产生 Read more…

Categories: TSOP Tags:

something we should know about SHELL script

April 16th, 2012 No comments

1.ssh 调用远程nohup &脚本

工作需要,需要到批量到多个机器上执行一些nohup &脚本,写了个脚本,但是发现老师不成功:

ssh $ip "cd /root/test;nohup sh xxoo.sh &"

这个并没有起到后台执行的效果,ssh仍需要等待。
改成如下即可:

ssh $ip "cd /root/test;nohup sh xxoo.sh>/dev/null 2>&1 </dev/null &"

上面是将远端的xxoo.sh in,out,err重定向了,不再跟ssh端有交互即可。如果xxoo.sh内容就是nohup sh xxoo2.sh &,ssh那句里面nohup &就可以省略了,效果一样的。
参考:
nohup
Getting ssh to execute a command in the background on target machine(stackoverflow)

2.loop里面调用ssh会自动break的问题

while read ip
do
ssh $ip "sh xxoo.sh"
done<ip.list

上面ip.list作为输入,但同事ssh 也会获取输入信息,所以会出现循环break的情况。
改成如下即可:

ssh $ip "sh xxoo.sh"</dev/null
或者:
ssh –n $ip "sh xxoo.sh"

man ssh参考:
-n      Redirects stdin from /dev/null (actually, prevents reading from stdin).  This must be used when ssh is run in the background.  A common trick is
to use this to run X11 programs on a remote machine.  For example, ssh -n shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi,
and the X11 connection will be automatically forwarded over an encrypted channel.  The ssh program will be put in the background.  (This does
not work if ssh needs to ask for a password or passphrase; see also the -f option.)

3.ssh 远程执行本地脚本

这个功能,之前一直以为只能先把要执行的脚本分发到remote机器上,然后用ssh $ip “sh xxoo.sh”的方式去执行,最近才发现这样做其实多余了。
直接把STDIN在本地重定向即可:

ssh $ip <xxoo.sh

这样就不会因为一个临时小需求就往线上机器分发各种乱七八糟的脚本了。

4. sed
需要正则匹配的时候可以用sed -r来匹配真正的正则
需要在匹配行之后添加一行:sed ‘/asdf/a qifeng.cao’ t.txt
需要在匹配行之前添加一行:sed ‘/asdf/i qifeng.cao’ t.txt

5.

Categories: fundamental Tags:

ABOUT SYS_CONTEXT

April 15th, 2012 No comments

SYS_CONTEXT函数可以用来查询当前用户的信息,这些信息都是存在用户的namespace当中,我们最常用的namespace就是USERENV了。
用法也很简单,例如要查询当前登录的用户会话(session):

SQL> col sname for a10
SQL> select sys_context('userenv','session_user') sname from dual;

SNAME
----------
SYS

SYS_CONTEXT的前生是USERENV函数,现在还是可以用的,但能查的东西没有sys_context多:

SQL> select userenv('ISDBA') from dual;

USEREN
------
TRUE

USERENV空间包含的信息很多,列举几个平时对我们来说比较有用的信息:

Parameter Return Value
AUTHENTICATION_TYPE 用户的验证方法,比如常见的通过tnsnames连上来的用户就是DATABASE验证,未通过listener的本地连接用户就是OS验证
CURRENT_SCHEMA 当前schema名字,默认的话跟session名字是一样的,除非你用alter session set current_schema切换了用户的schema
CURRENT_SCHEMAID 当前schema的id,即该schema的dba_users.USER_ID,sys.user$.user#
CURRENT_USER 当前的 user,注意跟schema的区别,貌似会受执行环境的影响,跟session_user还是有区别的,虽然一般情况下一样。
CURRENT_USERID 当前user的id,即该user的dba_users.USER_ID,sys.user$.user#,同上
HOST 客户端名
IP_ADDRESS 客户端IP,我的测试结果是只有通过listener的连接才会有ip信息,本地连接为空
ISDBA 是否具有DBA权限
INSTANCE 返回instance number,这个在RAC环境下有点用,单实例没什么意义
SESSIONID audit用的id,跟v$session.AUDSID一样
SESSION_USER 登录的用户名
SESSION_USERID 登录的用户ID,dba_users.user_id
SID 当前v$session.sid

通过这些信息可以自己写个after logon on database trigger来实现想要的审计功能,或者限制某些用户登录的功能。

此外,我们自己也可以通过dbms_session.set_context过程来增加一些namespace以及相应的parameter+value,然后通过sys_context展示。目前感觉不到这东西意义何在。。

REF:

SYS_CONTEXT(ONLINE DOC)
SYS_CONTEXT(PSOUG)
USERENV vs. SYS_CONTEXT

Categories: TSOP Tags: