静水流深's profile静水流深PhotosBlogListsMore Tools Help

静水流深

Occupation
Location
There are no photo albums.
July 05

[转载] 高行健:我主张一种冷的文学

【 以下文字转载自 D_Chinese 讨论区 】

【 原文由 ttzhu 所发表 】

那种像革命一样闹得轰轰烈烈的文学的时代我以为已经过去了,因为这革命也已经把

自己革完了,只留下一番苦涩、一种乏味,无聊乃至于反胃。

    文学原本同政治无关,只是纯然个人的事情,一番观察,一种对经验的回顾,一些臆

想和种种感受,某种心态的表达,兼以对思考的 满足。

    其所以轰动,不幸全在于政治的需要,或受攻击,或被捧场,不由自主弄成了一种工

具、一件武器、一个靶子,以至于克丧失了文学的本性。

    所谓作家,无非是一个人自己在说话、在写作,他人可听可不听,可读可不读,既不

是为民请命的英雄,也不值得作为偶像来崇拜,更不是罪人或民众或政治势力的敌人。之

所以有时竟跟著作品受难,只因为是他人的需要。当权势者需要制造几个敌人来转移民众

的注意力的时候,作家便成为一种牺牲品。而更真不幸的是,弄晕了的作家竟也以为当祭

品是一种光荣。

    其实,作家同读者的关系无非是一个人同另一个人或若干人彼此不必见面,不必交往

,只通过作品,精神上的一种交流。作者本不对读者负有多少责任,读者也不必对作者有

所苛求,读与不读全在于自 己的选择。

    文学作为人类活动尚免除不了的一种行为,读与写双方都自觉自愿。因此,文学对于

大众或者说对于社会,不负有什么义务,伦理或道义上的是非的裁决其实都是好事的批评

家们另外加上去的,同作者 并无关系。

    这种恢复了本性的文学不妨可以称之为冷的文学,以区别于那种文以载道,抨击时政

,干预社会乃至于抒怀言志的文学。这种冷的文学自然不会有什么新闻价值,引不起公众

的注意。它所以存在仅仅是人类在追求物欲满足之外的一种纯粹的精神活动。

    这种文学自然并非始于今日,只不过以往主要得抵制政治势力和社会习俗的压迫,现

今还要对统消费社会商品价值观念的浸淫,求其生存,首先得自甘寂寞。

    诚然,这样的作家较之他的作品还更多一层困难,因为作家倘从事这种写作显然难以

谋生,不得不在写作之外另谋生计。因此,这种文学的写作就其本身而言,不能不说是一

种奢侈,一种纯然精神上的自我满足。不过,一个社会再怎样繁荣,同得有声有色,倘竟

容不下 这种个人的精神活动,又不能不令人悲哀。

    然而,历史并不在乎这种悲哀,只记录人类的活动,或者也并不留下记录。这种冷的

文学能有幸出版而流传在世,只靠作者和他们为数不多的朋友的努力。曹雪芹和卡夫卡都

是这样的例子。他们的作品生前甚至都未曾出版,更别说造成什么文学运动,或成为社会

的明星。这类作家大都生活在社会的边缘和夹缝里,埋头从事于这种当时并不指望报价的

精神活动,不求社会认可,只自得其乐。

    近一个世纪的中国文学则被政治和伦理的是非弄得疲惫不堪,又落进种种的主义,即

所谓意识形态与创作方法论争的泥坑中难以自拔,其实同文学都没多大关系。作家只有远

远逃离这些没完没了且言不及义的论战才能自救。文学创作本是一种孤独的事业,是任何

运动和集团都帮不上忙的,只倒过来遭到扼杀。作家只有作为独立不移的个人, 不隶属于

某种政见集团和运动,才能赢得彻底的自由。

    这并不是说作家就没有自己的政治态度和社会伦理的观念,总受到政治和社会挤压的

作家自然也有话说,尽可以作演说,发宣言,大可不必都搅到自己的文学创作中去。就文

学创作而言,即使言及政治与社会,我以为与其说是"干预"不如说是"逃亡"更为恰当,以

此来抵制社会对自身的压迫和作为精神上的某种排遣。因此,我又以为,作家的位置最好

置身于社会的边缘,以便静观和内省,才能潜心于这种冷的文学。

    问题恰恰是,中国社会一百多年来连绵不断的战争、革命、政治运动和政治斗争,把

全民族的知识界上上下下不容分说都卷了进去,迫使作家们不是充当斗士,便是无以维生

,民也好国也好未曾救得了,却往往先把身家性命葬送掉了。而这种冷的文学则只有先逃

难政治和社会的压迫,生计得以保障,才有可能。这便是中国现当代文学难以冷下来的缘

故。所以说,冷的文学是一种逃亡而求其生存的文学,是一种不被社会扼杀而求得积神上

自救的文学。我又以为一个民族倘竟容不下这样一种非功利的文学,不仅是作家的不幸,

也表明这个民族 精神上足够贫乏的了。

    为此,我主张这样一种冷的文学。

                                                 一九九○年七月三十日于于巴黎

July 04

[转载] 推荐老片:碧海蓝天

【 以下文字转载自 Movies 讨论区 】

【 原文由 jean85 所发表 】

吕克.贝松导演。很清新的一部电影,没有任何杂质,很纯粹,看了很舒服。

碧海蓝天

附百度百科影评:

影片评价  

       作为法国人吕克.贝松的成名作,《碧海蓝天》没有任何的商业气息,她就是一部圆梦 的电影,她带着一个男人童年印迹和对大海的眷恋、对爱对生命的思考,讲述着简单而 又永恒的故事。当音乐涌动将希腊爱琴海的海水宽阔地推入眼前,我凝神屏息。在宁静的 海岛小镇上,雅克和恩佐的友谊和战争从一枚硬币开始,童年愉快地穿梭于白色和蓝色之 间,在希腊闪烁的阳光下,他们纵身一跃,各自寻找自己的梦想。   

       让·雷诺扮演了伟大的潜水员恩佐。是的,我喜欢说“伟大的恩佐”,你一定记得他 的小汽车,他滑稽的意大利潜水服,他自负的表情,他的不可一世,他的爽朗,他的柔情 ,他在海边穿一身白衣弹着钢琴,他用尚.雷诺最具有特征的嗓音说:“我要找一个人,我 要找到雅克!”。因为只有童年的伙伴雅克才是他真正的对手,只有雅克才能够明白海洋 的秘密。   

       “你知道怎么才会遇见美人鱼吗?要游到海底,那里的海更蓝,在那里蓝天变成了回 忆,躺在寂静中,你决定留在那里,抱着必死的决心,美人鱼才会出现。她们来问候你, 考验你的爱。如果你的爱够真诚,够纯洁,她们就会接受你,然后永远地带你走……”   

       雅克和恩佐就这样在蓝色的背景下,一次次的潜入深海,恩佐为了征服海洋和雅克, 而雅克,雅克无需征服,因为他本身就属于海洋,在那里他没有拘束,像逃离人类的异族 回归了故乡。任何一个女人都无法忘记雅克,他那样容易的获取了你的心。你无法忘记他 的眼神,他眸子里害羞的友善的光彩,但他不属于任何人,我们只能远远的爱着他,眷恋 他。我有时候也做点白日梦,一次次的将自己当成是乔安娜,梦想着能够被雅克抚摸一次 ,能够和他在希腊美丽的夜晚对视一回,在秘鲁那片白色冰原上,和他初次相遇,直到最 后对他说:去吧,我的爱人,去海里。   

       吕克·贝松没有让相爱的人在一起,或者说这个故事是要远远的将俗事抛开的。恩佐 在一次潜水失误中将生命交给了大海,雅克护送他的灵魂走入海底的深处;那些来自海的 声音,那些海豚伙伴们无时无刻不在另一个世界召唤雅克的归来。在寂静的夜晚,这是最 后的抉择,雅克听见了那些声音,他的灵魂告诉他要什么,他告别了他的乔安娜,潜入深 海,这是生命的回归,是永恒的大爱,纯洁的雅克拥有了一切,那些同他一同追逐嬉戏的 海豚,也许其中一个是他少年时就消失的爸爸,也许其中一个是他的乔安娜,他伟大的朋 友恩佐。   

       我们从哪里来?我们又该往哪儿去呢?在《the big blue》里,在海洋的背景下,躺 在宽大的蓝色中听一首天籁,直到光滑的海水覆盖我们,一同回归生命最初的宁静之地。

March 06

zz软件学院创建记事

昨天中午睡醒后,惯例在百合上逛。
无意中看到一人blog里有《南京大学软件学院创建记事》。
立即查看院版,看到记事系列的三篇帖子,jabbar转了骆院的新浪blog


比较无聊的是五分钟不到,那四篇帖子都被删了,搞不懂某些人怎么想的。


一、起步的艰难——南京大学软件学院创建记事
二、筹建的艰辛——南京大学软件学院创建记事
三、创建的愉悦——南京大学软件学院创建记事

December 30

一次ORA-01000: maximum open cursors exceeded处理过程

用户A邮件上报问题:

主题: 关于stag1数据库报错的问题

下发生产时候没有问题,

在同步stag2数据库时候也是OK的

但在同步stag1库时候就一直报这个问题:

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

declare

*

ERROR at line 1:

ORA-01000: maximum open cursors exceeded

ORA-06512: at line 31

SQL> show err

No errors.

SQL> rollback;

脚本的执行方式,用过并行也用过串行,都还是包这个错误

刚才查了查数据,发现一条数据都没有同步过去。

会否是环境问题呢?

请DBA查查原因。谢谢

 

解决过程:

该问题用户报了多次,第一次同事调大open_cursors,结果仍然报错。

第二次通过重启库,暂时锁定其他使用cursor过多的用户,让该用户执行脚本,依然报错。

第三次同事发现控制用户脚本中循环计数可以避免该问题发生,建议用户修改脚本,减少循环计数。

用户修改脚本后,虽然成功执行,但是并未达到要求的效果。

经过多次试验,测试发现:

stag1上缺少一个序列:DATA1.SEQ_TAB1 该序列在生产库上存在

在用户的同步脚本003.sql中

下面语句调用pub_seq_package.fetch_seq去获得主键值:

v_pk_serial#:=pub_seq_package.fetch_seq( 'TAB1', 'PK_SERIAL#', 'DATA1')

方法pub_seq_package.fetch_seq又调用方法get_seq。

在get_seq中如下代码:

--这部分根据输入的参数取得对应表的序列名:SEQ_TAB1

select seq_name,

         is_new_created

    into v_seq_name,

         v_is_new_created

    from pub_seq_info

   where table_name=upper(p_table_name)

     and column_name=upper(p_column_name)

     and table_owner=upper(p_table_owner)

     and rownum=1;

  …..

---这里通过cursor取出SEQ_TAB1的next值,可以看到cursor使用后就关闭。

     v_cursor:=sys.dbms_sql.open_cursor;

     v_sqlstr:='select '||v_seq_name||'.nextval '||' from '||' dual';

     dbms_sql.parse(v_cursor, v_sqlstr,1);

     ........

     v_temp := dbms_sql.execute( v_cursor);

     ........

     dbms_sql.close_cursor(v_cursor);

 

而实际上stag1上该sequence不存在,生产库prd上存在。

SQL> conn dba@stag1

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0

Connected as dba

SQL>

SQL> select seq_name, is_new_created

  2    from PUB_SEQ_CONFIG_INFO

  3   where table_name = 'TAB1'

  4     and column_name = 'PK_SERIAL#'

  5     and table_owner = 'DATA1'

  6     and rownum = 1;

SEQ_NAME                       IS_NEW_CREATED

------------------------------ --------------

SEQ_TAB1      Y

SQL> select owner, object_name, object_type, created

  2    from dba_objects

  3   where object_name = 'SEQ_TAB1';

OWNER      OBJECT_NAME                         OBJECT_TYPE     CREATED

---------- ----------------------------------- --------------- -----------

PUBLIC     SEQ_TAB1           SYNONYM         12/10/2008

SQL>  select * from dba_synonyms where synonym_name='SEQ_TAB1';

OWNER                          SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME                     DB_LINK

------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------

PUBLIC                         SEQ_TAB1      DATA1                       SEQ_TAB1     

SQL>

SQL> disconn

Not logged on

SQL> conn user1@prd

SQL>

SQL> select seq_name, is_new_created

  2    from PUB_SEQ_CONFIG_INFO

  3   where table_name = 'TAB1'

  4     and column_name = 'PK_SERIAL#'

  5     and table_owner = 'DATA1'

  6     and rownum = 1;

SEQ_NAME                       IS_NEW_CREATED

------------------------------ --------------

SEQ_TAB1      Y

SQL> select owner, object_name, object_type, created

  2    from dba_objects

  3   where object_name = 'SEQ_TAB1';

OWNER      OBJECT_NAME                         OBJECT_TYPE     CREATED

---------- ----------------------------------- --------------- -----------

PUBLIC     SEQ_TAB1           SYNONYM         12/10/2008

DATA1   SEQ_TAB1           SEQUENCE        12/10/2008

SQL>  select * from dba_synonyms where synonym_name='SEQ_TAB1';

OWNER                          SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME                     DB_LINK

------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------

PUBLIC                         SEQ_TAB1      DATA1                       SEQ_TAB1     

SQL> disconn

Not logged on

SQL>

 

正是缺少该sequence,导致ora-01000.下面试验过程找出该问题所在:

cursor_test2.sql是测试所用的脚本。

test_fetch_seq是在用户dba下复制用户user2的pub_seq_pkg.get_seq方法,只是把参数换成具体值了。

test_pub_seq_pkg是在用户dba下复制用户user2的包pub_seq_pkg的全部内容。

在cursor_test2.sql中对方法test_fetch_seq,test_pub_seq_pkg.test_fetch_seq,pub_seq_pkg.fetch_seq

分别进行测试:循环1009次(stag1上参数open_cursors改为和生产一致)

declare

  count_no     integer := 0;

  v_pk_serial# tab1.pk_serial#%type;

  -- 使用rowid进行修改                   

  v_rowid urowid;

  cursor cur_big_table is

    select rowid from big_table where rownum < 1010;

begin

open cur_big_table;

  loop

    v_rowid := null;

    fetch cur_big_table

      into v_rowid;

    exit when cur_big_table%NOTFOUND;

  ---测试三种情况:

    v_pk_serial# :=test_fetch_seq;

    --v_pk_serial# :=test_pub_seq_pkg.test_fetch_seq('TAB1','PK_SERIAL#','DATA1');

    --v_pk_serial# :=pub_seq_pkg.fetch_seq('TAB1','PK_SERIAL#','DATA1');

    count_no := count_no + 1;

    dbms_output.put_line('rowid->' || v_rowid);

    dbms_output.put_line('count_no->' || count_no);

    dbms_output.put_line('v_pk_serial->' || v_pk_serial#);

  end loop;

  close cur_big_table;

没有seq: SEQ_TAB1情况下

A、测试:v_pk_serial# :=test_fetch_seq;

SQL> conn dba @stag1

Connected.

SQL> set serveroutput on size 999999

SQL> @cursor_test2.sql

declare

*

ERROR at line 1:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

ORA-06512: at "DBA.TEST_FETCH_SEQ", line 57

ORA-02289: sequence does not exist

ORA-06512: at line 20

SQL>

B、测试:v_pk_serial# :=test_pub_seq_pkg.test_fetch_seq('TAB1','PK_SERIAL#','DATA1');

在下面可以看到循环进行了1009次,v_pk_serial没有取得值。

在exit时报错:ORA-01000: maximum open cursors exceeded

SQL> conn dba@stag1

Connected.

SQL> set serveroutput on size 999999

SQL> @cursor_test2.sql

…….

rowid->AAANebAATAABgQ4AAD

count_no->1006

v_pk_serial->

rowid->AAANebAATAABgQ4AAE

count_no->1007

v_pk_serial->

rowid->AAANebAATAABgQ4AAF

count_no->1008

v_pk_serial->

rowid->AAANebAATAABgQ4AAG

count_no->1009

v_pk_serial->

PL/SQL procedure successfully completed.

SQL> exit

ERROR:

ORA-02002: error while writing to audit trail

ORA-00604: error occurred at recursive SQL level 1

ORA-01000: maximum open cursors exceeded

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP and Data Mining options (with complications)

检查该测试打开的cursor (这一步在上面未exit时执行,exit后会话消失,看不到)

发现最大值:1000

SQL> conn dba@stag1

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0

Connected as dba

SQL>

SQL> select b.SID, c.NAME, c.CLASS, b.VALUE

  2    from v$session a, v$sesstat b, v$statname c

  3   where a.sid = b.SID

  4     and b.STATISTIC# = c.STATISTIC#

  5     --and a.OSUSER = 'osuser'

  6     and a.PROGRAM='sqlplus.exe'

  7     and a.USERNAME = 'DBA'

  8     and c.name like '%cursor%'

  9  /

SID NAME                                                    CLASS  VALUE

---- -------------------------------------------------- ---------- ------

333 opened cursors cumulative                                   1   1045

333 opened cursors current                                      1   1000

333 session cursor cache hits                                  64     21

333 session cursor cache count                                 64     16

333 cursor authentications                                    128      0

SQL>

C、测试:v_pk_serial# := pub_seq_pkg.fetch_seq('TAB1','PK_SERIAL#','DATA1');

情况同B;

SQL> conn dba@stag1

Connected.

SQL> set serveroutput on size 999999

SQL> @cursor_test2.sql

v_pk_serial->

rowid->AAANebAATAABgQ4AAF

count_no->1008

v_pk_serial->

rowid->AAANebAATAABgQ4AAG

count_no->1009

v_pk_serial->

PL/SQL procedure successfully completed.

SQL> exit

ERROR:

ORA-02002: error while writing to audit trail

ORA-00604: error occurred at recursive SQL level 1

ORA-01000: maximum open cursors exceeded

检查打开的cursor:(这一步在上面未exit时执行,exit后会话消失,看不到)

SQL> select b.SID, c.NAME, c.CLASS, b.VALUE

  2    from v$session a, v$sesstat b, v$statname c

  3   where a.sid = b.SID

  4     and b.STATISTIC# = c.STATISTIC#

  5     --and a.OSUSER = 'osuser'

  6     and a.PROGRAM='sqlplus.exe'

  7     and a.USERNAME = 'DBA'

  8     and c.name like '%cursor%'

  9  /

SID NAME                                                    CLASS  VALUE

---- -------------------------------------------------- ---------- ------

351 opened cursors cumulative                                   1   1047

351 opened cursors current                                      1   1000

351 session cursor cache hits                                  64     21

351 session cursor cache count                                 64     17

351 cursor authentications                                    128      1

SQL>

创建seq: SEQ_TAB1后

在dba下创建seq:

SQL> create sequence SEQ_TAB1

  2  minvalue 1

  3  maxvalue 99999999999999

  4  start with 123

  5  increment by 1

  6  nocache

  7  cycle;

Sequence created

SQL> select SEQ_TAB1.Currval from dual;

   CURRVAL

----------

       123

SQL> select owner, object_name, object_type, created

  2    from dba_objects

  3   where object_name = 'SEQ_TAB1';

OWNER                          OBJECT_NAME                         OBJECT_TYPE     CREATED

------------------------------ ----------------------------------- --------------- -----------

PUBLIC                         SEQ_TAB1           SYNONYM         12/10/2008

DBA                          SEQ_TAB1           SEQUENCE        12/30/2008

SQL>

A、   测试:v_pk_serial# :=test_fetch_seq;

这次v_pk_serial有结果,exit时也未报错。

SQL> conn dba@stag1

Connected.

SQL> set serveroutput on size 999999

SQL> @cursor_test2.sql

….

count_no->1008

v_pk_serial->00200800000000001130

rowid->AAANebAATAABgQ4AAG

count_no->1009

v_pk_serial->00200800000000001131

PL/SQL procedure successfully completed.

SQL> exit

B、  测试:v_pk_serial# :=test_pub_seq_pkg.test_fetch_seq('TAB1','PK_SERIAL#','DATA1');

v_pk_serial有值,且exit时未报错。

SQL> conn dba@stag1

Connected.

SQL> set serveroutput on size 999999

SQL> @cursor_test2.sql

….

count_no->1008

v_pk_serial->00200800000000002140

rowid->AAANebAATAABgQ4AAG

count_no->1009

v_pk_serial->00200800000000002141

PL/SQL procedure successfully completed.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

检查打开的cursor,很少:

SQL> select b.SID, c.NAME, c.CLASS, b.VALUE

  2    from v$session a, v$sesstat b, v$statname c

  3   where a.sid = b.SID

  4     and b.STATISTIC# = c.STATISTIC#

  5     --and a.OSUSER = 'osuser'

  6     and a.PROGRAM='sqlplus.exe'

  7     and a.USERNAME = 'DBA'

  8     and c.name like '%cursor%'

  9  /

SID NAME                                                    CLASS  VALUE

---- -------------------------------------------------- ---------- ------

104 opened cursors cumulative                                   1   2071

104 opened cursors current                                      1     11

104 session cursor cache hits                                  64   2037

104 session cursor cache count                                 64     20

104 cursor authentications                                    128      2

SQL>

C、测试:v_pk_serial# := pub_seq_pkg.fetch_seq('TAB1','PK_SERIAL#','DATA1');

注意:此时user2对seq:SEQ_TAB1没有查询权限

rowid->AAANebAATAABgQ4AAF

count_no->1008

v_pk_serial->

rowid->AAANebAATAABgQ4AAG

count_no->1009

v_pk_serial->

PL/SQL procedure successfully completed.

SQL> exit

ERROR:

ORA-02002: error while writing to audit trail

ORA-00604: error occurred at recursive SQL level 1

ORA-01000: maximum open cursors exceeded

对user2用户授权,并修改公共同义词指向:

SQL> grant select on  SEQ_TAB1 to user2;

Grant succeeded

SQL> create or replace public SYNONYM SEQ_TAB1 for dba.SEQ_TAB1;

Synonym created

SQL>  select * from dba_synonyms where synonym_name='SEQ_TAB1'

  2  ;

OWNER                          SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME                     DB_LINK

------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------

PUBLIC                         SEQ_TAB1      DBA                          SEQ_TAB1     

SQL>

再次测试:v_pk_serial# := pub_seq_pkg.fetch_seq('TAB1','PK_SERIAL#','DATA1');

v_pk_serial有值,exit未报错:

……

count_no->1008

v_pk_serial->00200800000000005167

rowid->AAANebAATAABgQ4AAG

count_no->1009

v_pk_serial->00200800000000005168

PL/SQL procedure successfully completed.

SQL> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

检查打开的cursor,仍然很少:

SQL> select b.SID, c.NAME, c.CLASS, b.VALUE

  2    from v$session a, v$sesstat b, v$statname c

  3   where a.sid = b.SID

  4     and b.STATISTIC# = c.STATISTIC#

  5     --and a.OSUSER = 'osuser'

  6     and a.PROGRAM='sqlplus.exe'

  7     and a.USERNAME = 'DBA'

  8     and c.name like '%cursor%'

  9  /

SID NAME                                                    CLASS  VALUE

---- -------------------------------------------------- ---------- ------

105 opened cursors cumulative                                   1   2070

105 opened cursors current                                      1     11

105 session cursor cache hits                                  64   2034

105 session cursor cache count                                 64     20

105 cursor authentications                                    128      1

最后,回收权限,恢复同义词指向:

SQL> create or replace public SYNONYM SEQ_TAB1 for DATA1.SEQ_TAB1;

Synonym created

SQL> revoke select on  SEQ_TAB1 from user2;

Revoke succeeded

SQL>

 

November 27

感恩节及oca考试

今天下班后参加oca考试,没有一点悬念。

自从做了决定,就感觉给自己下了套。打印600多页的英文教材,工作之余就去图书馆看书。

10月,11月几乎每个周末都有项目。上周末容灾演习--本年度最后一个项目结束。

意味着可以轻松下了。就决定本周三考试,周四是感恩节可以找同事庆贺下。

 

上周末夜班结束后连续休息四天。周二上午起床不久,接到同事电话:领导让去公司参加RAC培训。

于是牺牲休息时间去公司参加两天的培训,这样周三的考试计划再次被推迟。

今天早班,下午4点就可以走人。临下班前还有人报p1事件,没时间处理,电话不接,邮件不回。

 

下楼取钱,直接去公司附近的考点。

考试题目没有意外。sybex的教材比oracle官方的workshop详细,workshop更像是老师讲课用的ppt。

大部分问题都是工作中经常遇到的,rman除外。看完教材正好将概念重新理一遍,理解得更加深刻。

itpub上有题库,昨晚又看了一遍。我是那种不记答案的人,以前做错的题目,如果没有理解的话,

这次还是一如既往的错。

虽然两天的RAC培训耽误了第二遍看书,培训课上跟oracle工程师讨论了一些疑点。对该次考试也有帮助。

 

考试完毕后看到成绩太兴奋以至于取包时把手机摔到地上,拿起手机,键盘被锁。解锁键按不动。

重新开机后仍然锁定键盘,nokia太智能了。琢磨诺黑不至于这么挫吧?研究下键盘构造。

原来解锁键被摔得翘起来了,用力按下去恢复正常。

 

这门课结束,目标完成了一步,接下来要准备明年的ocp考试。

暂时轻松下,理发。

从头做起!

October 14

oca 要加课了

上周听同事说oca从12月起要加一门课,本打算明年考的。

看来得提前了,一门考试费1000多呢。

今天上午去公司对面的考点报名了,得益于rmb升值,考试费比以前便宜些。

这个月项目比较多,周末总是要加班配合,下月搞定它。

ps:

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=231

Oracle Certification Program

Announcing new SQL exam requirement for the Oracle Database 10g OCA track

June 06, 2008
On December 1, 2008, Oracle Certification Program will introduce an additional SQL exam requirement for the Oracle Database 10g Administrator Certified Associate certification track.
In addition to the existing exam, Oracle Database 10g: Administration I (1Z0-042), candidates will also be required to pass any one of the three following Oracle SQL exams to earn the certification:
Introduction to Oracle: SQL® and PL/SQL™ (1Z0-001) or,
Introduction to Oracle9i: SQL (1Z0-007) or,
Oracle Database 11g: SQL Fundamentals I (1Z1-051) or,
Oracle Database SQL Expert (1Z0-047)
Please note that there are no compulsory training requirements for the OCA certification path.

October 08

一次ora-600 [17095]错误处理过程

最近部门有个项目,将sz的所有开发测试库集中到几个服务器上。

我顺便借用多余的存储建了几个库:ubuntu(8.1.7),debian(9.2.0.8),opensuse(9.2.0.8),hdsuse(10.2.0.3).留作试验用。

建库时都选择默认的方式。

去年买了本ttom的《oracle 高效设计》,边看边做实验。

在下面的实验中,deian和opensuse上遇到了该死的ora-600 [17095]

实验步骤如下:

1,执行下面的sql:
Conn scott@debian
create user a identified by a;
grant create session to a;
grant create table to a;
create user b identified by b;
grant create session to b;
grant create table to b;
create user c identified by c;
grant create session to c;
grant create table to c;
create user d identified by d;
grant create session to d;
grant create table to d;
alter user a default tablespace users;
alter user b default tablespace users;
alter user c default tablespace users;
alter user d default tablespace users;
alter user a quota unlimited on users;
alter user b quota unlimited on users;
alter user c quota unlimited on users;
alter user d quota unlimited on users;
create public synonym emp for d.emp;
alter system flush shared_pool;
conn a/a@debian
select * from emp;
conn b/b@debian
select * from emp;
conn d/d@debian
grant select on emp to c;
select * from emp;
conn c/c@debian
select * from emp;
2,scott用户执行该sql,得到三条记录
select address,executions,sql_text
from v$sql
where upper(sql_text) like 'SELECT * FROM EMP%';
3,scott用户执行该sql,hang住,长久无结果;用sys用户执行该sql,很快就返回。

再用其它用户执行,还是hang.
select kglhdpar, address,
       auth_check_mismatch, translation_mismatch
  from v$sql_shared_cursor
  where kglhdpar in
  (select address
from v$sql
where upper(sql_text) like 'SELECT * FROM EMP%'
);
4,查看步骤3等待事件,latch free
执行下面的sql:可以看到步骤3对应的sql记录中vsersion_count列数字不断增加,最后到32767时报ora-600错误。
vsersion_count本来应该是1:明显的是sql共享失败。

select sql_text,version_COUNT,loads,first_load_time from v$sqlarea
where version_count > 1000 order by first_load_time desc;

alert log里信息:

Errors in file /paic/g2bh8040/soft/9i/app/oracle/admin/debian/udump/debian_ora_18449.trc:
ORA-00600: internal error code, arguments: [17059], [0xC0000002C3F30CE0], [], [], [], [], [], []

trc文件中部分信息:

Oracle process number: 18
Unix process pid: 1244, image: oracle@g2bh8040 (TNS V1-V3)

*** 2008-10-06 23:40:55.619
*** SESSION ID:(12.41213) 2008-10-06 23:40:55.618
LIBRARY OBJECT HANDLE: handle=c0000002c1b5a118
name=select kglhdpar, address,
       auth_check_mismatch, translation_mismatch
  from v$sql_shared_cursor
  where kglhdpar in
  (select address
from v$sql
where upper(sql_text) like 'SELECT * FROM EMP%'
)
hash=2ff48c73 timestamp=10-06-2008 22:30:42
namespace=CRSR flags=RON/KGHP/TIM/OBS/PN0/MED/[50410000]
kkkk-dddd-llll=0000-0001-0001 lock=N pin=S latch#=4
lwt=c0000002c1b5a148[c0000002c1b5a148,c0000002c1b5a148] ltm=c0000002c1b5a158[c0000002c1b5a158,c0000002c1b5a158]
pwt=c0000002c1b5a178[c0000002c1b5a178,c0000002c1b5a178] ptm=c0000002c1b5a208[c0000002c1b5a208,c0000002c1b5a208]
ref=c0000002c1b5a128[c0000002c1b5a128, c0000002c1b5a128] lnd=c0000002c1b5a220[c0000002c1b5a220,c0000002c1b5a220]
  LOCK OWNERS:
      lock     user  session count mode flags
  -------- -------- -------- ----- ---- ------------------------
  c0000002c0bdc8e8 c0000002bf2d56e0 c0000002bf2d56e0     1 N   PNC/[04]
  PIN OWNERS:
       pin     user  session     lock count mode mask
  -------- -------- -------- -------- ----- ---- ----
  c0000002c0bddb28 c0000002bf2d56e0 c0000002bf2d56e0 c0000002c0bdc8e8     1 S    0001
  LIBRARY OBJECT: object=c0000002c496a440
  type=CRSR flags=EXS[0001] pflags= [00] status=VALD load=0

 
CHILDREN: size=32768-- 这里达到数据库的限制32767
  child#    table reference   handle
  ------ -------- --------- --------
       0 c0000002c496a6a0 c0000002c496a370 c0000002c4969f58
       1 c0000002c496a6a0 c0000002c1dc8758 c0000002c4969aa0

在网上及metalink上查找相关资料,没有头绪。

原来的数据库迁移前移前版本大多数是9206,9207的,迁移后要统一升级到9208。

在迁移的库上实施该实验,无报错。猜想可能是9208的库有些组件创建未能更新到正确的版本上。

于是在opensuse上实施升级过程(如下),升级后,600错误不再出现。

cd $ORACLE_HOME/rdbms/admin
SQL> startup migrate
SQL>@catpatch.sql;
SQL> shutdown immediate
SQL> startup
SQL>@utlrp.sql
SQL>@utlrcmp.sql