2010-03-15 Mon

周末去常熟,特地寻访了一趟明末清初大才子钱谦益和一代名姬柳如是的墓。钱柳虽是夫妻(严格讲来,柳是侧室),但死后并有葬在一起,两只墓地相隔大概有四五十米,位虞山脚下,坐北朝南,靠山面湖。地图上标了很清楚,但到现场却很难找到,一是没有标志,旁边都是树林,二是附近有很多名人坟墓,容易搞错。我兜了好几个圈子才找到,找到时,天色已是黄昏,树林里更是夜色深沉,说实话,蛮吓人的。更让人惊心的是,两只墓地附近居然还有一养殖场,里面养的不知道是什么东西,居然有很多狗在那里撕心裂肺地狂叫,害得和我同去的二位女性朋友都不敢下车。最后我只好硬着头皮一个人往树林里钻,都不敢多看。特别是进钱氏墓地时,发现石亭后面居然有四五只坟冢,上面的黄土有的好象还很新,这是我原先没有估计到的,会不会是因为我过度紧张而出现眼花了呢?如果不是眼花,那么,钱谦益的墓应该是哪一只呢?其他土堆下面又是什么人死在里面呢?我越想越害怕,越害怕就越是要去想,可还没想明白,却发现自己已经吓的跑到了公路上。
休息了一会,我还是决定再去看看柳如是墓,否则又会遗憾很久,并恳请朋友朋友们陪我一道去,她们可能觉得好玩,居然爽快答应了。柳墓在钱墓西面不远处,也有一座后来修的石亭,亭子的前面是一块纪念石碑,上刻“柳如是墓”四个字,怪异的是,这块碑上居然有一只猫,见我们来,也不跑,而是很好奇地看着我们。荒郊野外,哪来的猫呢?朋友说,会不会是柳小姐转世啊?这是一个美好的解释,多说美女像猫,张曼玉长了就很像猫,但我实在不敢多想,因为这只猫,本已落寞荒芜的柳墓更增了一份诡秘。一个女人死后,陪伴她的,是一只猫,这到底算是悲哀呢还是幸运?
石亭的后面便是柳如是的香冢,坟地不大,围以罗城,后面是墓碑,仗着有同伴在,我想走近看看,但由于还是太紧张,最后又弄出了一身冷汗。我看到墓碑上隐约刻有“河东君之墓”几个字,她们还没反应过来,我首先叫了起来,不对啊,河东君是谁啊,这是人的名字吗?然后就听她们两个一声尖叫,等我回头时,已不见了她们的人影,我吓坏了,比在钱谦益墓还要害怕,最后同样不知道是怎么跑出来的。
其实,我是知道“河东君”就是柳如是的,当时真的太紧张了,一紧张就给忘了。现在再看当时拍的一些照片,我就一点也不害怕了。
柳墓的石亭刻有一副对联,“浅深流水琴中听,远近青山画里看。”这联是柳如是本人的句子,原是为自己和钱谦益的爱巢拂水山庄题的,拂水山庄现在没了,后人就把这句对联移到了墓亭。据说字迹也是根据当初的拓片刻的,如果是事实的,那她的字真还可以,清朝皇室后人爱新觉罗·溥杰的字有点像她的风格。钱谦益的墓前同样也有一副对联,用的也是他自己的句子,“遗民老似孤花在,陈迹闲随旧燕寻”。
关于柳如是墓有一个传说,因为柳如是不愿意降清,所以在她死后,后人就按照她的遗愿,在安葬时,将棺材悬空架在了墓穴中,意思就是死了也不着清朝的土地。这事情现在肯定无法考证的,即便是把墓挖开来,也是不得知的,因为在其死后,虽然清政府没动她,但过了二百多年,日本人来了,日本人把她的墓给毁过一次。


前一天通过duplicate active database 创建好standby之后,,今天简单的测试了一下active standby的apply 效率..
--Oracle文档要求standby logfile的数量至少比online logfile多一组. 所以我们在此创建4组standby logfile.
alter database add standby logfile group 4 ('+data') size 50m;
alter database add standby logfile group 5 ('+data') size 50m;
alter database add standby logfile group 6 ('+data') size 50m;
alter database add standby logfile group 7 ('+data') size 50m;
--将重启standby,并以active standby模式打开.
shutdown immediate;
startup mount;
alter database open read only;
recover managed standby database disconnect from session using current logfile;
--另外,在dbmain上将standby mode改成max protection 模式(只是为了我的测试方便,应该不是必须选项).
shutdown immediate;
startup mount;
alter database set standby database to maximize protection;
alter database open;
create table james_t3 (id number,gmt_create date);
begin
for i in 1..1000 loop
insert into james_t3 values(i,sysdate);
commit;
dbms_lock.sleep(1);
end loop;
end;
/
SQL> set time on 14:15:52 SQL> select max(gmt_create),sysdate from james_t3 a; MAX(GMT_CREATE) SYSDATE ------------------- ------------------- 2010-03-15 14:16:09 2010-03-15 14:16:09 14:16:10 SQL> / MAX(GMT_CREATE) SYSDATE ------------------- ------------------- 2010-03-15 14:16:11 2010-03-15 14:16:11 14:16:11 SQL> / MAX(GMT_CREATE) SYSDATE ------------------- ------------------- 2010-03-15 14:16:13 2010-03-15 14:16:13 14:16:13 SQL> / MAX(GMT_CREATE) SYSDATE ------------------- ------------------- 2010-03-15 14:16:14 2010-03-15 14:16:14 14:16:14 SQL> / MAX(GMT_CREATE) SYSDATE ------------------- ------------------- 2010-03-15 14:16:14 2010-03-15 14:16:15
No related posts.
周末继续看了看OCI接口的资料, 着重于以前没有搞懂的LONG/LOB类型处理接口, 写了一个DataCopy程序来作为学习的结果. DataCopy可以在两个Oracle库之间以比较快的速度拷贝数据, 这个速度至少要比EXP/IMP来迁移数据来得快, 并且支持最大100MB的LONG/LONG RAW/CLOB/BLOB值, 一般情况下够用了吧.
没有说明文档, 只有命令行帮助.
DataCopy: Fast Oracle Data Copy (Demo Version), Release 1.0.1
(c) Copyright Lou Fangxin (AnySQL.net) 2010, all rights reserved.
Usage: datacopy keyword=value [,keyword=value,...]
Valid Keywords:
user1 = username/password@tnsname for source database.
user2 = username/password@tnsname for target database.
table = table name for both source and target.
tables = table name list for both source and target.
table1 = source table name to query data from.
table2 = target table name to insert data into.
query1 = select SQL for source database.
query2 = insert SQL for target database.
wait = wait time in microsecond after each array.
read = set DB_FILE_MULTIBLOCK_READ_COUNT at session level
sort = set SORT_AREA_SIZE at session level (UNIT:MB)
hash = set HASH_AREA_SIZE at session level (UNIT:MB)
serial = set _serial_direct_read to TRUE at session level
array = array fetch size
rows = print log information for every given rows.
long = maximum size for long, long raw, CLOB, BLOB columns.
crypt = encrypt the connection info only, no data copy (YES).
parfile = read command option from parameter file
Notes:
datacopy user1=scott/tiger user2=scott/tiger table=emp
datacopy user1=scott/tiger user2=scott/tiger table1=emp table2=emp_his
数据拷贝中, 目标端数据库并不一定是INSERT操作, 也可以是UPDATE或DELETE, 或一段PL/SQL代码, 默认情况下是INSERT而已. 并且也只是实现了OCI的Array操作接口, 在真实情况下有什么实用价值, 就让各自去延伸了.
Relative Posts:
本文主要是对51CTO的两篇专访的摘录, 只是两位大师指出的内容也与我自己内心对此的理解有契合点..
摘自独家专访Fred George:架构师是使用代码作画的大师的片段
一个架构师的价值在于,他不仅能看到系统的美,而且能够在建造系统的时候能够把这些美创造出来。
在我看来,系统是一个个有机的生命。跟企业一样,系统也需要施肥浇水,需要健康的成长。与企业一样,一个系统可能会在短期内被滥用(比如在需要短期内快速盈利的驱使下),不过如果滥用的时间过长,系统最终将会无法支持。与CEO一样,一个架构师对系统的这个特性了如指掌。他们能够识别什么是滥用,系统能够承受的限度,并将系统引回到健康的道路上。
驾驭概念的技能,在我看来是每一个人最高的潜力。
最好的架构师都在写代码。Kent Beck曾经写道:“代码就是设计与残酷现实之黄昏的交汇(Code is when design meets the harsh reality of dawn.)”。他的意思是,我们画出来的设计都是美好的,但最好的设计仅仅是被翻译为优雅代码的那些。一个无法将愿景带入代码的架构师将永远无法了解我们这个急速变化的行业所展示的深度。
所以说,不编程的架构师的职业生涯是短暂的。
另一个新手架构师经常遇到的问题是“优美”以及“简约”。每次当进行决策的过程中出现这些概念的时候,项目经理往往对这样的理由不置可否。项目经理通常有短期目标要实现,而对优美还是简约这样的概念并不感冒。但事实上,他们这是对系统未来健康状况的不重视。
架构师是艺术家,他们的成就往往不会在他们活着的时候被赞赏。
摘自独家专访Randy Shoup:架构师要学会权衡取舍的片段
在产品团队开始酝酿一个新的主意的时候,架构师是产品团队第一个接触的人:架构师会帮助他们把可行性、技术需求以及权衡取舍等因素一一剖析清楚。一个架构师之后的工作可总结为以下几条:
◆设计整体的技术实现步骤
◆与开发团队一起,完成设计与实施的细节
◆与开发团队和运维团队一起,完成部署的过程
◆与运维团队一起,进行部署之后的维护和故障排除
一个架构师设立好技术风向标,并确保整个项目的进展按照这些方向进行。一个架构师不爱下达命令,他往往通过影响力来领导团队。一个架构师考虑“大的”和“长期的”,并在各个因素之间做出权衡。
条理清晰的逻辑思维能力可能是一个架构师最重要的技能了,而我们往往发现拥有这种技能的人就像稀有动物那样难找。不过,这个能力仅仅在和大量的实际开发经验、丰富的理论背景和好的领导能力相结合的时候才能体现出它的价值。
一个架构师最基本的职能是往广处思考,把系统看做一个完整的个体来思考,以维护并增强可伸缩性和可用性这些系统级的特性为目标。一个架构师不能将实施细节抛之脑后,但她最大的价值在更高的层次。
大多数成功的架构师都喜欢与其他团队成员一同完成架构和设计这一块的工作。这不仅对架构本身有利,而且会令实施过程进展的更加平滑。
按:
No related posts.
2010-03-14 Sun
0. 通过安装好数据库环境, 如果使用ASM的话, 也配置好ASM的环境.
1. 在主库与standby数据库配置好listener与tns配置.在我的环境中为dbmain与dbstby
[oracle@dbmain admin]$ cat listener.ora
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=dbmain)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dbmain)
(ORACLE_HOME=/opt/app/oracle/products/11.2.0)
)
)
[oracle@dbmain admin]$ cat tnsnames.ora
dbmain =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbmain)(PORT = 1521))
)
(CONNECT_DATA =
(SID = dbmain)
)
)
dbstby=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbstby)(PORT = 1521))
)
(CONNECT_DATA =
(SID = dbstby)
)
)
[oracle@dbstby admin]$ cat listener.ora
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=dbstby)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dbstby)
(ORACLE_HOME=/opt/app/oracle/products/11.2.0)
)
)
[oracle@dbstby admin]$ cat tnsnames.ora
dbmain =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbmain)(PORT = 1521))
)
(CONNECT_DATA =
(SID = dbmain)
)
)
dbstby=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbstby)(PORT = 1521))
)
(CONNECT_DATA =
(SID = dbstby)
)
)
2. 在备库配置一个基本的init.ora文件.并且创建对应的orapw文件(要么从主库拷贝要么使用orapwd命令创建.
[oracle@dbstby dbs]$ cat initdbstby.ora *.db_name=dbmain
3. 使用rman的duplicate 命令创建standby数据库.
rman target sys/james@dbmain auxiliary sys/james@dbstby
run {
allocate channel dbmain type disk;
allocate auxiliary channel dbstby type disk;
duplicate target database for standby from active database
spfile
set db_file_name_convert='+data/dbmain/','+data/dbstby/'
set db_unique_name='DBSTBY'
set control_files='+data'
set log_archive_dest_1='location=/data/oradata/arch/dbstby/';
}
这一步的相关注意事项:
1). standby数据库上如果已经有spfile,duplicate 命令里面就不能有spfile选项.
2). 一定要设置db_file_name_convert的转换路径, 如果主库与standby数据库的路径一致, 命令将会报错(各位同志可以自己去试试,我测试时是这样).
No related posts.
赞助的图书包含三种,一本是我们的新书《Oracle DBA手记》、一本是陈吉平的《构建Oracle高可用环境》、第三本是李笑来的《把时间当作朋友》。
Piner的书出版1年多来重印多次,是一本不可多得的好书,也是Oracle DBA们必备的案头书;而笑来的《把时间当作朋友》则是帮助我们开启心智,了解自我的一本好书。
我们的《Oracle DBA手记》则还需要时间的考验。
感谢博文视点,感谢周筠老师对我们活动的支持!
这些书会分几次在我们的活动中送出,我们也欢迎其他赞助!
-The End-
相关文章|Related Articles
- 《深入浅出Oracle》一书的电子版下载
- 《Oracle DBA手记》- 第二章PDF版本下载
- 《Oracle DBA手记》一书到货上架
- IBM小型机的内存deconfigured - 数据库之风险
- 《Oracle DBA手记》一书勘误表
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2010/03/acoug_broadview.html










