2008-04-12 Sat
Author:NinGoo posted on NinGoo.net
MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的。代理服务器是和TCP/IP协议打交道,而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,MySQL Protocol包括认证和查询两个基本过程:
认证过程包括:
- 客户端向服务器发起连接请求
- 服务器向客户端发送握手信息
- 客户端向服务器发送认证请求
- 服务器向客户端发送认证结果
如果认证通过,则进入查询过程:
- 客户端向服务器发起查询请求
- 服务器向客户端返回查询结果
当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的,想详细了解MySQL Protocol的同学,可以去这里看看。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。可以说MySQL Proxy相当于一个轻量级的MySQL了,实际上,MySQL Proxy的admin server是可以接受SQL来查询状态信息的。
MySQL Proxy通过lua脚本来控制连接转发的机制。主要的函数都是配合MySQL Protocol各个过程的,这一点从函数名上就能看出来:
- connect_server()
- read_handshake()
- read_auth()
- read_auth_result()
- read_query()
- read_query_result()
至于为什么采用lua脚本语言,我想这是因为MySQL Proxy中采用了wormhole存储引擎的关系吧,这个虫洞存储引擎很有意思,数据的存储格式就是一段lua脚本,真是创意无限啊。
Related Articles
Author:江枫 posted on Taobao.com
MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果slave增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性。MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

MySQL Proxy是2007年6月由Jan Kneschke发布的一个项目,基于GPL,目前还处于Alpha测试阶段,最新版本0.6.1,可以从这里下载。使用MySQL Proxy需要MySQL 5.0.x以上版本,详细的安装使用手册可以参考MySQL 5.1手册第27章。
Usage:
mysql-proxy.exe [OPTION...] - MySQL Proxy
Help Options:
-?, --help Show help options
--help-all Show all help options
--help-admin Show options for the admin-module
--help-proxy Show options for the proxy-module
admin module
--admin-address=<host:port> listening address:port of internal admin-server (default:4041)
proxy-module
--proxy-address=<host:port> listening address:port of the proxy-server (default:4040)
--proxy-read-only-backend-addresses=<host:port> address:port of the remote slave-server (default: not set)
--proxy-backend-addresses=<host:port> address:port of the remote backend-servers (default: 127.0.0.1:3306)
--proxy-skip-profiling disables profiling of queries (default: enabled)
--proxy-fix-bug-25371 fix bug #25371 (mysqld > 5.1.12) for older libmysql versions
--proxy-lua-script=<file> filename of the lua script (default: not set)
--no-proxy Don't start proxy-server
Application Options:
-V, --version Show version
--daemon Start in daemon-mode
--pid-file=<file> PID file in case we are started as daemon
Author:NinGoo posted on NinGoo.net
MySQL Replication可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果slave增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性。MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

MySQL Proxy是2007年6月由Jan Kneschke发布的一个项目,基于GPL,目前还处于Alpha测试阶段,最新版本0.6.1,可以从这里下载。使用MySQL Proxy需要MySQL 5.0.x以上版本,详细的安装使用手册可以参考MySQL 5.1手册第27章。
mysql-proxy –help-all
Usage:
mysql-proxy.exe [OPTION…] - MySQL Proxy
Help Options:
-?, –help Show help options
–help-all Show all help options
–help-admin Show options for the admin-module
–help-proxy Show options for the proxy-module
admin module
–admin-address= listening address:port of internal admin-server (default:4041)
proxy-module
–proxy-address= listening address:port of the proxy-server (default:4040)
–proxy-read-only-backend-addresses= address:port of the remote slave-server (default: not set)
–proxy-backend-addresses= address:port of the remote backend-servers (default: 127.0.0.1:3306)
–proxy-skip-profiling disables profiling of queries (default: enabled)
–proxy-fix-bug-25371 fix bug #25371 (mysqld > 5.1.12) for older libmysql versions
–proxy-lua-script=
–no-proxy Don’t start proxy-server
Application Options:
-V, –version Show version
–daemon Start in daemon-mode
–pid-file=
Related Articles
最近试用了一下OCFS2,这是一个全新的集群文件系统,有自己的节点管理,心跳等集群中的概念,而且相对OCFS来说,有很大的改进,是一个全新的文件系统,支持较多的Oracle文件,包括OCR和Voting Disk等。
但是和ASM和RAW比起来,还是有一些本质的不同,在网上看到关于这几者之间的一个大讨论,特别深入,转载一下,学习之。 原文地址:http://zhouwf0726.itpub.net/post/9689/221194
先看一下Oracle OCFS2的官方定义:
WHAT IS OCFS2?
OCFS2 is the next generation of the Oracle Cluster File System for Linux. It is an extent based, POSIX compliant file system. Unlike the previous release (OCFS), OCFS2 is a general-purpose file system that can be used for shared Oracle home installations making management of Oracle Real Application Cluster (RAC) installations even easier. Among the new features and benefits are:
* Node and architecture local files using Context Dependent Symbolic Links (CDSL)
* Network based pluggable DLM
* Improved journaling / node recovery using the Linux Kernel “JBD” subsystem
* Improved performance of meta-data operations (space allocation, locking, etc).
* Improved data caching / locking (for files such as oracle binaries, libraries, etc)
这个大讨论是从一个问题引起的:200亿条数据,就是20T吧,用ASM好?还是用OCFS好?还是用RAW好?
(more…)
昨天晚上陪老婆在中山音乐堂观赏了一场意大利爵士音乐演奏会。
这是这一年中第一次去天安门广场,也是第二次去中山公园,第一次去中山公园是在1996年,那是上大学时第一次到北京,亲戚带我去那里转过一圈,那时候的门票是5毛钱,现在门票是3元,十几年间价格涨了6倍。
而CPI的增幅呢?
晚会有两个乐队演出:3 Quietmen 和 Manomanouche & Voice (马诺什乐团)。
三人行乐队的鼓手很出色,或者说鼓声的影响力更深远,然而他们乐队的灵魂却是小号手,1975年出生的小伙子,音乐的领域也是年轻人的天下:

第二支乐队有一个迷人的女歌手,所以他们从一开始就获得了全场的狂热,略带一点吉普赛风格的曲风轻快而亲切,轻易打动所有人。女歌手是唱歌剧的出身,音域宽广,表情生动,她的歌声使乐队不再单纯:

这个乐队给我最大的感受是,两个长者一直面带着微笑在演奏,他们不仅仅是在演奏,更是在享受自己的音乐,我喜欢这种感觉:

马诺什乐团谢幕的时候,老婆最后得到了女歌手抛出的唯一一朵玫瑰,幸运而快乐的Julia:

这是快乐的音乐,这是快乐的一天。
-The End-
相关文章|Related Articles
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2008/04/3quietmen_manomanouche_voice.html
手工创建RAC数据库其实和普通数据库没有太大区别,需要注意几点:
1.需要为各个接点额外创建undo tablespace,redo group
2.需要为各个接点激活日志thread
3.create database的时候cluster_database参数设置为false,创建成功后在改为true,让各个接点mount
–创建数据库
SQL> CREATE DATABASE asmrac
2 USER SYS IDENTIFIED BY a35baba
3 USER SYSTEM IDENTIFIED BY a35baba
4 controlfile reuse
5 LOGFILE
6 GROUP 1 (’+DATATOMB/redo_1_1_1.log’,'+DATATOMB/redo_1_2_1.log’) SIZE 512M REUSE,
7 GROUP 2 (’+DATATOMB/redo_2_1_1.log’,'+DATATOMB/redo_2_2_1.log’) SIZE 512M REUSE,
8 GROUP 3 (’+DATATOMB/redo_3_1_1.log’,'+DATATOMB/redo_3_2_1.log’) SIZE 512M REUSE,
9 GROUP 4 (’+DATATOMB/redo_4_1_1.log’,'+DATATOMB/redo_4_2_1.log’) SIZE 512M REUSE
10 MAXLOGFILES 64
11 MAXLOGMEMBERS 5
12 MAXLOGHISTORY 1000
13 MAXDATAFILES 3000
14 MAXINSTANCES 8
15 ARCHIVELOG
16 CHARACTER SET US7ASCII
17 NATIONAL CHARACTER SET UTF8
18 DATAFILE ‘+DATATOMB/system01.dbf’ SIZE 2048M REUSE
19 SYSAUX DATAFILE ‘+DATATOMB/sysaux01.dbf’ SIZE 2048M REUSE
20 EXTENT MANAGEMENT LOCAL
21 DEFAULT TEMPORARY TABLESPACE temp1
22 TEMPFILE ‘+DATATOMB/temp01.dbf’ SIZE 16384M REUSE
23 UNDO TABLESPACE undotbs1
24 DATAFILE ‘+DATATOMB/undotbs01.dbf’ SIZE 16384M REUSE;
Database created.
–为其他接点添加日志组
SQL> alter database add logfile
2 instance ‘asmrac2′
3 GROUP 5 (’+DATATOMB/redo_1_1_2.log’,'+DATATOMB/redo_1_2_2.log’) SIZE 512M REUSE,
4 GROUP 6 (’+DATATOMB/redo_2_1_2.log’,'+DATATOMB/redo_2_2_2.log’) SIZE 512M REUSE,
5 GROUP 7 (’+DATATOMB/redo_3_1_2.log’,'+DATATOMB/redo_3_2_2.log’) SIZE 512M REUSE,
6 GROUP 8 (’+DATATOMB/redo_4_1_2.log’,'+DATATOMB/redo_4_2_2.log’) SIZE 512M REUSE;
Database altered.
SQL> alter database add logfile
2 instance ‘asmrac3′
3 GROUP 9 (’+DATATOMB/redo_1_1_3.log’,'+DATATOMB/redo_1_2_3.log’) SIZE 512M REUSE,
4 GROUP 10 (’+DATATOMB/redo_2_1_3.log’,'+DATATOMB/redo_2_2_3.log’) SIZE 512M REUSE,
5 GROUP 11 (’+DATATOMB/redo_3_1_3.log’,'+DATATOMB/redo_3_2_3.log’) SIZE 512M REUSE,
6 GROUP 12 (’+DATATOMB/redo_4_1_3.log’,'+DATATOMB/redo_4_2_3.log’) SIZE 512M REUSE;
Database altered.
SQL> alter database add logfile
2 instance ‘asmrac4′
3 GROUP 13 (’+DATATOMB/redo_1_1_4.log’,'+DATATOMB/redo_1_2_4.log’) SIZE 512M REUSE,
4 GROUP 14 (’+DATATOMB/redo_2_1_4.log’,'+DATATOMB/redo_2_2_4.log’) SIZE 512M REUSE,
5 GROUP 15 (’+DATATOMB/redo_3_1_4.log’,'+DATATOMB/redo_3_2_4.log’) SIZE 512M REUSE,
6 GROUP 16 (’+DATATOMB/redo_4_1_4.log’,'+DATATOMB/redo_4_2_4.log’) SIZE 512M REUSE;
Database altered.
–为其他接点添加UNDO表空间
SQL> CREATE undo TABLESPACE undotbs2 DATAFILE
2 ‘+DATATOMB/undotbs2.dbf’ SIZE 16384M
3 AUTOEXTEND OFF
4 EXTENT MANAGEMENT LOCAL
5 BLOCKSIZE 16k;
Tablespace created.
SQL> CREATE undo TABLESPACE undotbs3 DATAFILE
2 ‘+DATATOMB/undotbs3.dbf’ SIZE 16384M
3 AUTOEXTEND OFF
4 EXTENT MANAGEMENT LOCAL
5 BLOCKSIZE 16k;
Tablespace created.
SQL> CREATE undo TABLESPACE undotbs4 DATAFILE
2 ‘+DATATOMB/undotbs4.dbf’ SIZE 16384M
3 AUTOEXTEND OFF
4 EXTENT MANAGEMENT LOCAL
5 BLOCKSIZE 16k;
Tablespace created.
–激活其他接点日志
SQL> alter database enable thread 2;
Database altered.
SQL> alter database enable thread 3;
Database altered.
SQL> alter database enable thread 4;
Database altered.
–建立内部视图
spool CreateDBCatalog.log
@$ORACLE_HOME/rdbms/admin/catalog.sql;
@$ORACLE_HOME/rdbms/admin/catexp7.sql;
@$ORACLE_HOME/rdbms/admin/catblock.sql;
@$ORACLE_HOME/rdbms/admin/catproc.sql;
@$ORACLE_HOME/rdbms/admin/catoctk.sql;
@$ORACLE_HOME/rdbms/admin/owminst.plb;
@$ORACLE_HOME/sqlplus/admin/plustrce.sql;
connect SYSTEM/manager
@$ORACLE_HOME/sqlplus/admin/pupbld.sql;
connect SYSTEM/manager
set echo on
@$ORACLE_HOME/sqlplus/admin/help/hlpbld.sql helpus.sql;
spool off
spool off
exit;
现在可以关闭数据库,设置cluster_database=true,到各个接点启动实例
[root@hack3 ~]# su - oracle
hack3:/home/oracle>$sqlplus “/ as sysdba”
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 12 19:07:30 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 5251268608 bytes
Fixed Size 2028088 bytes
Variable Size 939527624 bytes
Database Buffers 4294967296 bytes
Redo Buffers 14745600 bytes
Database mounted.
Database opened.
SQL> create table t as select * from dba_objects;
Table created.
SQL> exit;
–换另外的接点
hack4:/opt/oracle/products/10.2.0/db/dbs>$ sqlplus “/ as sysdba”
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 12 19:08:03 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 5251268608 bytes
Fixed Size 2028088 bytes
Variable Size 939527624 bytes
Database Buffers 4294967296 bytes
Redo Buffers 14745600 bytes
Database mounted.
Database opened.
SQL> select count(*) from t;
COUNT(*)
———-
9950
SQL> drop table t;
Table dropped.
SQL>
至此,大功告成
–编辑ASM的init.ora
myasm1.instance_number=1
myasm2.instance_number=2
myasm3.instance_number=3
myasm4.instance_number=4
myasm1.instance_name=myasm1
myasm2.instance_name=myasm2
myasm3.instance_name=myasm3
myasm4.instance_name=myasm4
instance_type=asm
cluster_database=true
asm_diskgroups=’datatomb’
asm_diskstring=’/opt/oracle/oradata/asmrac/disk*’
processes=200
large_pool_size=12M
remote_login_passwordfile=exclusive
core_dump_dest=/opt/oracle/admin/myasm/cdump
user_dump_dest=/opt/oracle/admin/myasm/udump
background_dump_dest=/opt/oracle/admin/myasm/bdump
export ORACLE_SID=myasm3
SQL> startup nomount;
ASM instance started
Total System Global Area 130023424 bytes
Fixed Size 2019032 bytes
Variable Size 102838568 bytes
ASM Cache 25165824 bytes
–ASM已经discover了指定的磁盘,状态为CANDIDATE
SQL> select header_status, path from v$asm_disk;
HEADER_ST PATH
——— ————————————————–
CANDIDATE /opt/oracle/oradata/asmrac/disk2
CANDIDATE /opt/oracle/oradata/asmrac/disk1
–创建磁盘组datatomb,不使用镜像
SQL> create diskgroup datatomb
2 external redundancy disk
3 ‘/opt/oracle/oradata/asmrac/disk1′,
4 ‘/opt/oracle/oradata/asmrac/disk2′;
Diskgroup created.
–disk状态已经是member
SQL> select header_status, path from v$asm_disk;
HEADER_ST PATH
——— ————————————————–
MEMBER /opt/oracle/oradata/asmrac/disk2
MEMBER /opt/oracle/oradata/asmrac/disk1
–1T的空间
SQL> select TOTAL_MB,free_mb from v$asm_diskgroup;
TOTAL_MB FREE_MB
———- ———-
1048570 1048467
–现在在其他接点已经可以直接启动并mount datatomb
SQL> startup;
ASM instance started
Total System Global Area 130023424 bytes
Fixed Size 2019032 bytes
Variable Size 102838568 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
oracle提供了一个命令行工具可以直接管理diskgroup里面的路径,别名等信息,类试一个小文件系统
[oracle@hack3 dbs]$ asmcmd
ASMCMD> ls -l
State Type Rebal Unbal Name
MOUNTED EXTERN N N DATATOMB/
ASMCMD> cd datatomb
ASMCMD> ls -l
ASMCMD> mkdir database
ASMCMD> mkdir archive
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N archive/
N database/
Author:NinGoo posted on NinGoo.net
有时候,我们需要在不同的库中复制用户定义,比如需要在一个测试库中创建和产品库中同名的用户,并且拥有同样的权限。或者在同一个库中创建一个不同名的用户,但是和另外一个用户拥有同样的权限等。换句话说,就是需要获得某个用户的创建和授权语句。
可以通过SQL从一些数据字典中查询到授权信息,生成授权语句:
undefine user_name
set pagesize 1000
select ‘grant ‘||tt.granted_role||’ to ‘||tt.grantee||’;’ as SQL_text
from dba_role_privs tt where tt.grantee=(upper(’&&user_name’))
union all
select ‘grant ‘||tt.privilege||’ to ‘||tt.grantee||’;’
from dba_sys_privs tt where tt.grantee=(upper(’&&user_name’))
union all
select ‘grant ‘||tt.privilege||’ on ‘||owner||’.'||table_name||’ to ‘||tt.grantee||’;’
from dba_tab_privs tt where tt.grantee=(upper(’&&user_name’))
union all
select ‘alter user ‘||tt.user_name||’ quota ‘||maxblocks*blocksize||’ on ‘||ts_name||’;’
from KU$_TSQUOTA_VIEW tt where tt.user_name=(upper(’&&user_name’));
另外,通过Oracle提供的dbms_metadata包,可以获得更加详细准确的创建用户以及授权的DDL语句,注意在9i中dbms_output.put_line中限制一行不能超过255个字符,所以如果某些授权语句超长,可能无法打印出来,折衷的办法可能,先将结果插入的临时表然后select出来,或者将一行截断循环打印,或者干脆使用前面的SQL语句直接查数字字典表就没有这个限制了:
set serveroutput on size 1000000
set verify off
undefine user_name
declare
v_name varchar2(30) := upper(’&user_name’);
no_grant exception;
pragma exception_init( no_grant, -31608 );
begin
dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM, ‘SQLTERMINATOR’, TRUE);
dbms_output.enable(1000000);
dbms_output.put_line(dbms_metadata.get_ddl(’USER’,v_name));
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl(’SYSTEM_GRANT’,v_name));
exception
when no_grant then dbms_output.put_line(’– No system privs granted’);
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl(’ROLE_GRANT’,v_name));
exception
when no_grant then dbms_output.put_line(’– No role privs granted’);
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl(’OBJECT_GRANT’,v_name));
exception
when no_grant then dbms_output.put_line(’– No object privs granted’);
end;
begin
dbms_output.put_line(dbms_metadata.get_granted_ddl(’TABLESPACE_QUOTA’,v_name));
exception
when no_grant then dbms_output.put_line(’– No tablespace quota specified’);
end;
dbms_output.put_line(dbms_metadata.get_granted_ddl(’DEFAULT_ROLE’, v_name ));
exception
when others then
if SQLCODE = -31603 then dbms_output.put_line(’– User does not exists’);
else raise;
end if;
end;
/
运行结果如下:
输入 user_name 的值: NinGoo
CREATE USER “NINGOO” IDENTIFIED BY VALUES
‘S:76033D49338E38166B0C090A4447B3D58A70B16C2001A39D7AA844B25616;DABAE35759′
DEFAULT TABLESPACE “USERS”
TEMPORARY TABLESPACE “TEMP”;
GRANT UNLIMITED TABLESPACE TO “NINGOO”;
GRANT “CONNECT” TO “NINGOO”;
GRANT “RESOURCE” TO “NINGOO”;
GRANT “DBA” TO “NINGOO”;
GRANT “PLUSTRACE” TO “NINGOO”;
GRANT SELECT ON “SYS”.”V_$PROCESS” TO “NINGOO”;
GRANT SELECT ON “SYS”.”V_$SESSION” TO “NINGOO”;
DECLARE
TEMP_COUNT NUMBER;
SQLSTR VARCHAR2(200);
BEGIN
SQLSTR :=
‘ALTER USER “NINGOO” QUOTA 1048576000 ON “USERS”‘;
EXECUTE IMMEDIATE
SQLSTR;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -30041 THEN
SQLSTR
:= ‘SELECT COUNT(*) FROM USER_TABLESPACES
WHERE TABLESPACE_NAME =
”USERS” AND CONTENTS = ”TEMPORARY”’;
EXECUTE IMMEDIATE SQLSTR INTO
TEMP_COUNT;
IF TEMP_COUNT = 1 THEN RETURN;
ELSE RAISE;
END
IF;
ELSE
RAISE;
END IF;
END;
/
ALTER USER “NINGOO” DEFAULT ROLE ALL;
PL/SQL 过程已成功完成。
Related Articles
2008-04-11 Fri
2008-04-10 Thu
2008-04-09 Wed
AnySQL.net
DBA notes
Oracle & Starcraft
eagle's home
给你点color see see
AnySQL.net English
Oracle Scratchpad
Oracle Life
OracleDBA Blog---请享受无法回避的痛苦!
Uploads from dbanotes
Chanel [K]
xzh2000的博客
Oracle Security Blog
ERN空间
Eddie Awad's Blog
MySQL Performance Blog
The Tom Kyte Blog
del.icio.us/fenng/oracle
AIXpert
O'Reilly Databases
Red Hat Magazine
DBASupport
DB2 Magazine 中文版
developerWorks : AIX 专区的文章,教程
Pythian Group Blog » Log Buffer
车东[Blog^2]
blue_prince
玉面飞龙的BLOG
此生 今世
人生就是如此
Orange Tiger 木匠 的 移民生活
生活帮-LifeBang
Hey!! Sky!
dba on unix
Oracle Notes Wiki
Brotherxiao's Home
柔嘉维则@life.oracle.eng
Fenng's shared items in Google Reader
jametong's shared items in Google Reader
缥缈游侠-logzgh
Tanel Poder's blog: Core IT for geeks and pros
DBA Tools
ilonng
yangtingkun
NinGoo@Net
Oracle & Unix
Inside the Oracle Optimizer - Removing the black magic
Ricky's Test Blog
DBA@Taobao
存储部落
Think in 88
Alibaba DBA Team
Oracle Team @SNC
淘宝数据仓库团队
OracleBlog.cn
