静水流深's profile静水流深PhotosBlogListsMore ![]() | Help |
|
July 04 [转载] 推荐老片:碧海蓝天【 以下文字转载自 Movies 讨论区 】 【 原文由 jean85 所发表 】 吕克.贝松导演。很清新的一部电影,没有任何杂质,很纯粹,看了很舒服。 附百度百科影评: 影片评价 作为法国人吕克.贝松的成名作,《碧海蓝天》没有任何的商业气息,她就是一部圆梦 的电影,她带着一个男人童年印迹和对大海的眷恋、对爱对生命的思考,讲述着简单而 又永恒的故事。当音乐涌动将希腊爱琴海的海水宽阔地推入眼前,我凝神屏息。在宁静的 海岛小镇上,雅克和恩佐的友谊和战争从一枚硬币开始,童年愉快地穿梭于白色和蓝色之 间,在希腊闪烁的阳光下,他们纵身一跃,各自寻找自己的梦想。 让·雷诺扮演了伟大的潜水员恩佐。是的,我喜欢说“伟大的恩佐”,你一定记得他 的小汽车,他滑稽的意大利潜水服,他自负的表情,他的不可一世,他的爽朗,他的柔情 ,他在海边穿一身白衣弹着钢琴,他用尚.雷诺最具有特征的嗓音说:“我要找一个人,我 要找到雅克!”。因为只有童年的伙伴雅克才是他真正的对手,只有雅克才能够明白海洋 的秘密。 “你知道怎么才会遇见美人鱼吗?要游到海底,那里的海更蓝,在那里蓝天变成了回 忆,躺在寂静中,你决定留在那里,抱着必死的决心,美人鱼才会出现。她们来问候你, 考验你的爱。如果你的爱够真诚,够纯洁,她们就会接受你,然后永远地带你走……” 雅克和恩佐就这样在蓝色的背景下,一次次的潜入深海,恩佐为了征服海洋和雅克, 而雅克,雅克无需征服,因为他本身就属于海洋,在那里他没有拘束,像逃离人类的异族 回归了故乡。任何一个女人都无法忘记雅克,他那样容易的获取了你的心。你无法忘记他 的眼神,他眸子里害羞的友善的光彩,但他不属于任何人,我们只能远远的爱着他,眷恋 他。我有时候也做点白日梦,一次次的将自己当成是乔安娜,梦想着能够被雅克抚摸一次 ,能够和他在希腊美丽的夜晚对视一回,在秘鲁那片白色冰原上,和他初次相遇,直到最 后对他说:去吧,我的爱人,去海里。 吕克·贝松没有让相爱的人在一起,或者说这个故事是要远远的将俗事抛开的。恩佐 在一次潜水失误中将生命交给了大海,雅克护送他的灵魂走入海底的深处;那些来自海的 声音,那些海豚伙伴们无时无刻不在另一个世界召唤雅克的归来。在寂静的夜晚,这是最 后的抉择,雅克听见了那些声音,他的灵魂告诉他要什么,他告别了他的乔安娜,潜入深 海,这是生命的回归,是永恒的大爱,纯洁的雅克拥有了一切,那些同他一同追逐嬉戏的 海豚,也许其中一个是他少年时就消失的爸爸,也许其中一个是他的乔安娜,他伟大的朋 友恩佐。 我们从哪里来?我们又该往哪儿去呢?在《the big blue》里,在海洋的背景下,躺 在宽大的蓝色中听一首天籁,直到光滑的海水覆盖我们,一同回归生命最初的宁静之地。 March 06 zz软件学院创建记事昨天中午睡醒后,惯例在百合上逛。
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 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: 再用其它用户执行,还是hang. 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 *** 2008-10-06 23:40:55.619 在网上及metalink上查找相关资料,没有头绪。 原来的数据库迁移前移前版本大多数是9206,9207的,迁移后要统一升级到9208。 在迁移的库上实施该实验,无报错。猜想可能是9208的库有些组件创建未能更新到正确的版本上。 于是在opensuse上实施升级过程(如下),升级后,600错误不再出现。 cd $ORACLE_HOME/rdbms/admin September 14 无聊时分--说说房子今天和朋友聊天时,提到cctv6正在直播金鸡百花奖。就去客厅看电视,没找到cctv6,却找到凤凰卫视。 正在直播牛刀博客中提到那期和邹涛PK的关于房市的节目,比较感兴趣看了下。 其中来自北京的嘉宾老刘提到目前房市是四方博弈:政府、银行、开发商、老百姓,前面三者都是获利的,买单的自然是老百姓。 本来,政府出让部分土地,将获得的资金为低收入者提供住房,分解部分买房需求。这样正好对房价有个制约,使之不致于过高。但政府也不能过多的分流买房需求,这样开发商无利益驱动,自然政府无法获得满足民生的资金。这里需要一个平衡。 1,在GDP的驱动下,地方政府以卖地为荣,将卖地所得用于建自己的办公大楼。并没有用于低收入者的住房需求上。几乎将所有的住房需求全部推向市场,人为的加剧了住房供需矛盾。 2,土地价格长期看是涨,房价也是如此。开发商为了获取暴利,囤积部分土地,减少房子供应。政府出台了限制政策:两年内没有开发完毕的土地要强制收回。但是政府的监察力度不够,来自北京的嘉宾指出北京有很多这种土地却没有被回收。而且在征地过程中,政府扮演了错误的角色,更降低开发商的成本。 3,房地产业的过高利润使得其他行业资金更多流入,造成其他行业开工不足,加剧就业矛盾。 4,为了普通民众能买房子,国家出台了住房贷款政策。本来这是一个利好政策,由于银行没有严格的审核,给炒房者提供了资金来源,加剧了房价的高企。(这里多说一句,很BS炒房者,虽然从商业行为,这是正常的。但是道义上无法接受。毕竟他们的参与认为的加剧需求矛盾,让别人为他们当奴隶)而政府又没有很好的政策来限制炒房。炒房使房价像气球一样越吹越大。 而目前政府严格控制贷款,缩紧银根,控制了买房的资金来源,直接打击房市。需求暂时抑制,炒房行为被压制,房价慢慢止升回跌。跌市更是抑制需求,买涨不买跌大家都清楚。这个一刀切的方式也影响了其他行业。 老刘说现在是买单的老百姓不陪那三家玩了,他们就干瞪眼了。他就不相信房地产商能把房子当面包吃了。
如果政府能够更加理智的关注民生,分离部分需求;加大监察力度,严厉打击土地囤积行为;银行加强住房贷款审核,控制炒房行为。房地产才是合理、理性的市场。 不过个人对前景并不看好,除非北京为全国做个示范:政府的归政府,市场的归市场。 PS:对于治安不好的地方,我不吝惜一个词来评价:官匪勾结。而目前的房市,用“官商勾结”最恰当。 |
||||
|
|