eygle.com   eygle.com
eygle.com  
 
本站推荐: 《循序渐进Oracle》一书第一章目录
Today | 03/10 | 03/09 | 03/08 | 03/07 | 03/06 | 03/05 | 03/04 | 03/03 | 03/02 | 03/01
 123
 123

  2010-03-11 Thu

14:53 关于删除temporary tablespace的一点小建议. (1548 Bytes) » dbthink

今天有个兄弟要删除不想用的temporary tablespace,,我大概整理了下面几点意见..

  • 0. 创建好新的temporary tablespace,,修改用户的默认temporary tablespace,可能的话,,修改database的默认temporary tablespace.
    create temporary tablespace tempyyy tempfile 'path_to_tempfile_yyy' size xxx;
    alter user zzz temporary tablespace tempyyy;
    alter database default temporary tablespace tempyyy;
    
  • 1. 所有用户的default temporary tablespace不是这个.
  • select username,temporary_tablespace from dba_users where temporary_tablespace = 'tempxxx';
    
  • 2. 确认没有用户正在使用当前的temporary tablespace.
  • select username,session_num,tablespace from v$sort_usage where tablespace = 'tempxxx';
    
  • 3. 对于temporary tablespace ,,可以一个数据文件,一个数据文件的删除.
  • alter database tempfile 'tempfilexxx' drop;
    
  • 4. 再删除这个临时表空间.
    drop tablespace tempxxx;
    

    No related posts.

  • 13:52 今年几部奥斯卡电影 (4505 Bytes) » 木木:木有书读

    《无耻混蛋》海报 

    不光是中国,全世界一年到头其实也没几部好电影。对影迷来说,要想少花冤枉钱而能看到好电影,比较保险的办法就是根据各大电影节的获奖名单去买影碟。

    今年的奥斯卡前几天揭晓了,我去影碟店买了五盘片子,分别是获得最佳影片的《拆弹部队》、获最佳男主角奖的《狂野的心》,获最佳外语片的阿根廷电影《他们眼中的秘密》,还有二部是获得最佳电影提名的片子,昆汀·塔伦蒂诺导演的《无耻混蛋(Inglourious Basterds)》及法国电影《预言者A Prophet》,后者曾获2009年戛纳电影节评委会大奖。

    《拆弹部队》讲的是三个在伊拉克执行拆弹任务的美国大兵,是一部美国式的主旋律电影,一方面通过战争树立高大的美国式英雄形象,一方面又暗示观众“我们”在反思战争,这个套路和以往的好莱坞战争片没什么大的区别。我不大喜欢《拆弹部队》,但电影中有些场面还是很好看的。

    《狂野的心》则是一部生活类的主旋律电影。讲一名老歌星在遇到一位单身母亲后,因为爱情和孩子而决定改邪归正的故事。这部电影值得一赞的,不只是最佳男主演,还有电影中的乡村音乐。

    阿根廷电影《他们眼中的秘密》,我还没来得及看,比较期待。我以前曾看过几部阿根廷电影,影响比较深的是,南美人拍电影和他们写小说一样,很注重情绪和叙事的技巧,观众容易获得基于阅读本身带来的快感。

    《无耻混蛋(Inglourious Basterds)》也有翻译成《无良杂牌军》的,讲二战期间,一帮有罪的家伙,应该都算是美国人吧,得到指示可以到欧洲战场上去“戴罪立功”,最后,这帮喜欢割头皮,用球棒抽敌人脑袋,给人脸上刺字的家伙居然把希特勒给杀了,二战因为他们而结束。毫无疑问,这是一部非主流电影,一部有明显昆汀风格的电影,暴力,血腥,荒诞,无厘头式的幽默,另类的叙事方式中看不见清晰的电影主题,一如昆汀本人那张怪异的脸,我们永远不知道他在想什么。

    我不知道如果中国导演拍了一部片子,然后说希特勒是给人在电影院里杀掉的,我们会如何评价?

    这就是看外国电影的好处,很少有中国的影评家会在批评外国电影的时候去考虑故事是否真实,逻辑是否严密等等,因为我们不知道外国人到底是怎样的,反正只要是外国的,那就“一切皆有可能。”

    《预言者A Prophet》讲述了这样一种可能,一名带有阿拉伯血统的少年人在监狱中成长为法国的黑帮老大。

    这是我自《肖申克的救赎》以来,看到的最好的一部关于监狱题材的电影。虽然导演并不认为他拍的是一部监狱片,而是一部道德电影。

    导演雅克·欧迪亚说,这部电影的名字是他从鲍勃·迪伦的歌词中获得的灵感,“我们总是在不知不觉中为什么人提供什么服务”。而我们都知道,在阿拉伯人的字典里,“预言者(先知)”是安拉派到世界的使者。从这个角度讲,这也是一部关于宗教的电影。但说实话,我更希望看到阿拉伯人拍的关于阿拉伯人在西方的电影,遗憾而又无奈的是,这样的电影少之又少,我好象从来没看过。

    《预言者》海报

    12:59 Oracle手动建库的步骤 (11081 Bytes) » 半瓶

    Oracle除了用DBCA可以建库外,也可以手动来建立数据库,手动建库能够更了解数据库的一些启动过程和运作机制,对深入学习oracle 很有帮助,本文演示了10g下手动建库的流程和可能碰到的问题。

    第一步:建立参数文件,这个文件可以从其他地方已有的数据库复制过来修改,也可以从init.ora的基础上修改,主要内容如下:

    *.audit_file_dest='/u01/app/oracle/admin/erpwh/adump'
    *.background_dump_dest='/u01/app/oracle/admin/erpwh/bdump'
    *.compatible='10.2.0.1.0'
    *.control_files='+DGWH/erpwh/control01.ctl','+DGWH/erpwh/control02.ctl','+DGWH/erpwh/control03.ctl'
    *.core_dump_dest='/u01/app/oracle/admin/erpwh/cdump'
    *.db_block_size=8192
    *.db_domain=''
    *.db_file_multiblock_read_count=16
    *.db_name='erpwh'
    *.db_recovery_file_dest='+DGWH'
    *.db_recovery_file_dest_size=2147483648
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=erpoptmXDB)'
    *.job_queue_processes=10
    *.open_cursors=300
    *.pga_aggregate_target=1073741824
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.sga_target=2147483648
    *.undo_management='AUTO'
    *.undo_tablespace='UNDOTBS1'
    *.user_dump_dest='/u01/app/oracle/admin/erpwh/udump'

    可以看到参数文件主要是指定了数据库名、跟踪文件的位置、控制文件的位置、数据块大小、内存参数等。Linux 系统中,该文件位置应在$ORACLE_HOME/dbs目录下。

    第二步:建立密码文件,该文件用于sysdba远程管理登录,这里的密码可以和建立数据库脚本理的sys密码不同,如果是远程以sysdba身份登录则需要使用这里的密码。密码文件和参数文件在相同的目录下:

    [oracle@erpdevdb dbs]$ orapwd file=/u01/app/oracle/oracle/product/10.2.0/db_1/dbs/orapwerpwh password=erpwh entries=5

    第三步:建立跟踪、日志等文件的路径:

    [oracle@erpdevdb dbs]$ cd /u01/app/oracle/admin/

    [oracle@erpdevdb admin]$ mkdir erpwh
    [oracle@erpdevdb admin]$ cd erpwh
    [oracle@erpdevdb erpwh]$ ll
    total 0
    [oracle@erpdevdb erpwh]$ mkdir adump bdump udump cdump
    [oracle@erpdevdb erpwh]$ ll
    total 32
    drwxr-xr-x 2 oracle oinstall 4096 Mar 10 15:16 adump
    drwxr-xr-x 2 oracle oinstall 4096 Mar 10 15:16 bdump
    drwxr-xr-x 2 oracle oinstall 4096 Mar 10 15:16 cdump
    drwxr-xr-x 2 oracle oinstall 4096 Mar 10 15:16 udump

    第四步:启动数据库到nomount状态:

    [oracle@erpdevdb dbs]$ export ORACLE_SID=erpwh
    [oracle@erpdevdb dbs]$ sqlplus " / as sysdba"

    SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 10 15:18:09 2010

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    Connected to an idle instance.

    SQL> startup nomount
    ORA-27102: out of memory
    Linux-x86_64 Error: 28: No space left on device

    如果出现以上错误,是操作系统参数设置的内存不够,参见这篇文章修改即可:

    [root@erpdevdb ~]# vi /etc/sysctl.conf

    kernel.shmall = 4718592

    或者调小参数文件里的内存参数也可以,取决于系统资源情况。

    SQL> startup nomount
    ORACLE instance started.

    Total System Global Area 2147483648 bytes
    Fixed Size 2022144 bytes
    Variable Size 486540544 bytes
    Database Buffers 1644167168 bytes
    Redo Buffers 14753792 bytes

    第五步,运行建立数据库的脚本

    CREATE DATABASE erpwh
    USER SYS IDENTIFIED BY sys
    USER SYSTEM IDENTIFIED BY sys
    LOGFILE GROUP 1 ('+DGWH/erpwh/redo01.log') SIZE 100M,
    GROUP 2 ('+DGWH/erpwh/redo02.log') SIZE 100M,
    GROUP 3 ('+DGWH/erpwh/redo03.log') SIZE 100M
    MAXLOGFILES 16
    MAXLOGMEMBERS 5
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 2
    CHARACTER SET ZHS16GBK
    NATIONAL CHARACTER SET AL16UTF16
    DATAFILE '+DGWH/erpwh/system01.dbf' SIZE 2048M REUSE
    EXTENT MANAGEMENT LOCAL
    SYSAUX DATAFILE '+DGWH/erpwh/sysaux01.dbf' SIZE 1024M REUSE
    DEFAULT TEMPORARY TABLESPACE temptbs1
    TEMPFILE '+DGWH/erpwh/temp01.dbf'
    SIZE 2048M REUSE
    UNDO TABLESPACE undotbs1
    DATAFILE '+DGWH/erpwh/undotbs01.dbf'
    SIZE 1024M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

    脚本主要是指定sys和system的密码,redo文件,字符集,数据文件,临时表空间和回滚段等信息。

    但有时候在建库脚本里指定默认表空间DEFAULT TABLESPACE erp会报错:

    SQL> CREATE DATABASE erpwh
    2 USER SYS IDENTIFIED BY sys
    3 USER SYSTEM IDENTIFIED BY sys
    4 LOGFILE GROUP 1 ('+DGWH/erpwh/redo01.log') SIZE 100M,
    5 GROUP 2 ('+DGWH/erpwh/redo02.log') SIZE 100M,
    6 GROUP 3 ('+DGWH/erpwh/redo03.log') SIZE 100M
    7 MAXLOGFILES 16
    8 MAXLOGMEMBERS 5
    9 MAXDATAFILES 100
    10 MAXINSTANCES 8
    11 MAXLOGHISTORY 29200
    12 CHARACTER SET ZHS16GBK
    13 NATIONAL CHARACTER SET AL16UTF16
    14 DATAFILE '+DGWH/erpwh/system01.dbf' SIZE 2048M REUSE
    15 EXTENT MANAGEMENT LOCAL
    16 SYSAUX DATAFILE '+DGWH/erpwh/sysaux01.dbf' SIZE 1024M REUSE
    17 DEFAULT TABLESPACE erp
    18 DEFAULT TEMPORARY TABLESPACE temptbs1
    19 TEMPFILE '+DGWH/erpwh/temp01.dbf'
    20 SIZE 2048M REUSE
    21 UNDO TABLESPACE undotbs1
    22 DATAFILE '+DGWH/erpwh/undotbs01.dbf'
    23 SIZE 1024M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
    CREATE DATABASE erpwh
    *
    ERROR at line 1:
    ORA-01092: ORACLE instance terminated. Disconnection forced

    这种情况一般是建库脚本哪里写的不对,需要检查。从asm存储来看各种数据文件都建立了,但是数据库并没有创建成功,这时把已经建立的数据文件删掉,并删除建库脚本理的默认表空间这行就可以了:

    SQL> CREATE DATABASE erpwh
    2 USER SYS IDENTIFIED BY sys
    3 USER SYSTEM IDENTIFIED BY sys
    4 LOGFILE GROUP 1 ('+DGWH/erpwh/redo01.log') SIZE 100M,
    5 GROUP 2 ('+DGWH/erpwh/redo02.log') SIZE 100M,
    6 GROUP 3 ('+DGWH/erpwh/redo03.log') SIZE 100M
    7 MAXLOGFILES 16
    8 MAXLOGMEMBERS 5
    9 MAXDATAFILES 100
    10 MAXINSTANCES 8
    11 MAXLOGHISTORY 2
    12 CHARACTER SET ZHS16GBK
    13 NATIONAL CHARACTER SET AL16UTF16
    14 DATAFILE '+DGWH/erpwh/system01.dbf' SIZE 2048M REUSE
    15 EXTENT MANAGEMENT LOCAL
    16 SYSAUX DATAFILE '+DGWH/erpwh/sysaux01.dbf' SIZE 1024M REUSE
    17 DEFAULT TEMPORARY TABLESPACE temptbs1
    18 TEMPFILE '+DGWH/erpwh/temp01.dbf'
    19 SIZE 2048M REUSE
    20 UNDO TABLESPACE undotbs1
    21 DATAFILE '+DGWH/erpwh/undotbs01.dbf'
    22 SIZE 1024M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

    Database created.

    第六步,建立其他表空间和数据字典:

    SQL> create tablespace erp datafile '+DGWH' size 30720m;

    Tablespace created.

    SQL> @?/rdbms/admin/catalog.sql

    ......

    PL/SQL procedure successfully completed.

    SQL> @?/rdbms/admin/catproc.sql

    ......

    PL/SQL procedure successfully completed.

    第七步,建立spfile:

    SQL> create spfile='+DGWH/ERPWH/spfileerpwh.ora' from pfile;

    File created.

    要注意的是,Oracle下次启动的时候不不会默认使用这种方式建立的spfile,

    SQL> show parameter spfile

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    spfile string

    不指定spfile路径的时候就可以了:

    SQL> create spfile from pfile;

    File created.

    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.

    Total System Global Area 2147483648 bytes
    Fixed Size 2022144 bytes
    Variable Size 486540544 bytes
    Database Buffers 1644167168 bytes
    Redo Buffers 14753792 bytes
    Database mounted.
    Database opened.
    SQL> show parameter spfile

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    spfile string /u01/app/oracle/oracle/product
    /10.2.0/db_1/dbs/spfileerpwh.o
    ra

    第八步,建立用户

    SQL> create user erp identified by erp default tablespace ERP temporary tablespace temptbs1 profile DEFAULT;

    User created.

    SQL> grant dba to erp;

    Grant succeeded.

    SQL> connect erp/erp
    Error accessing PRODUCT_USER_PROFILE
    Warning: Product user profile information not loaded!
    You may need to run PUPBLD.SQL as SYSTEM
    Connected.

    出现这个错误提示并不会影响数据库的使用,手动建库一般会有这个警告出现。 PRODUCT_USER_PROFILE是SYSTEM用户的一个表,存储客户端程序执行命令方面的限制信息,可以根据提示用system用户执行脚本来消除:

    SQL> connect system/sys
    Connected.
    SQL>
    SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql

    .......

    SQL> connect erp/erp
    Connected.
    SQL>
    SQL>
    SQL> show user
    USER is "ERP"

    第九步,配置网络服务:

    [oracle@erpdevdb admin]$ vi tnsnames.ora

    ERPWH =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = erpdevdb)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = erpwh)
    )
    )

    至此手动建立数据库完成,客户端可以连接上来使用了。

      2010-03-10 Wed

    19:52 SQLULDR2从标准输入读取SQL (4097 Bytes) » AnySQL.net

        从今天开始, SQLULDR2可以从标准输入设备接受复杂的SQL语句了. 如下所示, SQL是人工输入的, 而最后一行的反斜杆用来表示输入结束.

    D:\>sqluldr2 scott/tiger file=- sql=-
    select
    *
    from tab
    /
    DBOBJECTS,TABLE,
    BLOB,TABLE,
    SPACE_DAILY,TABLE,
    SQLULDR2_LOG,TABLE,
    TRADE_MONTHLY_SUMMARY,TABLE,
    TRADE_DATA,TABLE,

        这个可以省去创建SQL文件的步骤, 更重要的是在Linux的Shell或Perl脚本中调用SQLULDR2, 并传入复杂的SQL时, 也不需要创建SQL文件了, 而且很容易使用Shell或Perl中的变量, 进行替换生成动态的SQL. 例如, 我们经常会见到如下脚本.

    sqlplus -s "/ as sysdba" << EOF
    select
    *
    from tab;
    exit
    EOF

        现在SQLULDR2也可以这样用了, 在Linux的Shell或Perl脚本中同样使用.

    sqluldr2 sys file=- sql=- << EOF
    select
    *
    from tab
    EOF

        使用这个功能, 可以使嵌入SQLULDR2的批脚本更具有通用性, 方便移值到不同的平台.

    Relative Posts:

    15:41 招聘 (14449 Bytes) » 人生就是如此
    新接手支付宝数据仓库,有致于往这个方向发展,有一定经验,或者有较强的C/C++ 开发能力的兄弟姐妹们,欢迎联系我或者发送简历给我。
     

    以下是数据仓库相关的岗位描述:

    点击流系统开发工程师:

    工作职责:

    负责alipay.com网站点击流分析系统建设,能够独立完成系统的设计和开发

    职位要求:

    计算机及相关专业本科毕业
    三年以上C/C++/JAVA开发经验、熟悉Linux环境及Shell编程
    对互联网点击流系统有一定的的了解,熟悉网站日志收集和分析原理,有点击流产品开发经验者优先
    熟练掌握两种或以上关系型数据库系统,对分布式计算服务有一定的编程开发经验
    良好的沟通能力和团队精神,具备一定的创新意识

     

    数据仓库ETL开发工程师:

    工作职责
    数据仓库项目规划、设计与程序开发
    数据仓库相关的应用系统的数据处理及模型建设,完成ETL过程的设计与实现
    职位要求

    计算机相关专业本科及以上毕业

    熟悉ORACLEDB2TERADATA等任一种主流关系型数据库,三年以上数据库开发及实施经验(OCP等相关证书优先)

    熟悉数据仓库的模型开发过程及主流的ETL工具和OLAP展现工具,能够独立承担ETL开发任务

    了解面向对象的程序设计方法,能够熟练运用一门编程语言进行程序开发

    良好的沟通能力和团队精神,具备一定的创新意识

     

    高级JAVA开发工程师

    工作职责
    负责内部数据服务平台和系统的建设,完成代码的设计和开发

    Review及评审设计过程,指导工程师进行程序开发
    职位要求

    计算机及相关专业本科毕业
    精通面向对象设计方法,三年以上Java语言开发经验 和J2EE项上目经验

    精通J2EE及其设计模式、熟悉LinuxHTMLUML

    熟悉数据库的编程开发,对主流关系型数据库有深入的了解和开发经验
    良好的沟通能力和团队意识,具备一定的创新意识

     

    JAVA开发工程师

    工作职责
    负责内部数据服务平台和系统的建设,完成代码的设计和开发
    职位要求

    计算机及相关专业本科毕业
    精通面向对象设计方法,至少两年以上J2EE项目开发经验;

    熟悉J2EE设计模式,精通JavaWeb的开发和应用;

    熟悉数据库的编程开发,对主流关系型数据库有一定的的了解和开发经验
    良好的沟通能力和团队精神,具备一定的创新意识

     

    数据仓库需求分析师:

    工作职责:

    负责管理和分析来自用户和公司内部的业务数据需求,完成需求分析说明书

    根据需求规划和设计数据仓库解决方案或产品,推动数据服务化建设

    职位要求:        

    熟悉互联网或软件产品整体项目实现过程,包括从业务调研、需求分析到产品发布
    了解数据仓库项目实践过程,对数据具备一定的业务敏感度

    有参与过大型项目或应用系统建设的经验,具有2年以上产品或项目的管理经验
    熟练掌握设计模式和UML建模知识者优先

    较强的沟通能力和团队精神

     

    高级数据仓库展现工程师:

    工作职责:

    负责各类数据业务报表的设计和开发实现
    根据需求规划和设计数据展现解决方案

    参与数据仓库相关的项目实施

    职位要求:

    熟悉主流的关系型数据库系统(ORACLE/DB2),三年或以上数据仓库开发或实施经验

    熟悉数据仓库的OLAP分析工具,对BIEEMicroStrategyBusinese Object等任一种有熟练的掌握

    熟悉数据仓库的建模型及分析过程,对电信、银行、大型网站、零售业有一定的经验者优先

    较强的沟通能力和责任心,具备一定的创新意识
    10:45 讨论: 无备份的数据库如何应对故障? (2777 Bytes) » Oracle Life

    作者:eygle 发布在 eygle.com

    近期,在为一个客户的数据库制定紧急预案,这个数据库数据量大约在1.4T左右。由于客户没有额外的存储资源用于备份,所以数据库目前存在了很大的安全风险。
    虽然存储级别有一定的安全防范,但是如果遇到数据损失、坏块、文件损坏等问题,将无法应对。
    SQL> select sum(bytes)/1024/1024/1024/1024 TB from v$datafile;

            TB
    ----------
    1.39508572
    当然我们有一些折中的手段可以采用,比如备份数据结构,系统表空间等,在故障时快速回复核心业务。同时,如果是常规的错误,可以通过一系列的内部手段进行强制恢复,当然是以损失一部分数据为代价的。

    探讨一下,哪些数据库是无备份的?无备份大家是如何应对故障的?




    相关文章|Related Articles

    评论数量(5)|Add Comments

    本文网址:

      2010-03-09 Tue

    18:09 a little experience on hacking clustering_factor (2152 Bytes) » dbthink

    有些时候,系统中会出现部分SQL语句, 由于数据分布的原因, 无法正常使用索引,,基本的情形在前面翻译的Jonathan Lewis的文章中已经有所涉及.

    下面是一个简单的Hack clustering_factor的方法(注意: 尽量不要使用,只有在正常分析表无法解决问题的时候, 又很难通过使用SPM或者SQL Profile的时候才可以考虑一试).
    这样做会有以下几个弊端:

    • 1. 这么做的结果可能导致后续的维护有困难,,因为你的后任可能根本不知道你这么处理了.
    • 2. hack 系统的信息, 不是一种好的处理方式..:-)

    下面是一个基本的处理过程

  • 1. 对于当前的SQL运行EXPLAIN PLAN, 并检查cost的大小
  • explain plan for
    select column_list
    from table_name m
    where m.column_name = ‘Y’
    and m.column_name2 in ( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9 );

  • 2. 添加使用index的提示,,运行EXPLAIN PLAN, 并检查cost的大小
  • explain plan for
    select /*+ index(m)*/column_list
    from table_name m
    where m.column_name = ‘Y’
    and m.column_name2 in ( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9 );

  • 3. 检查index segment的blocks以及当前的clustering_factor
  • select clustering_factor from dba_indexes where index_name = ‘INDEX_NAME’;
    select blocks from dba_segments where segment_name = ‘INDEX_NAME’;

  • 4. 设置clustering_factor
  • DBMS_STATS.SET_INDEX_STATS (ownname =>’OWNER’,indname => ‘INDEX_NAME’,clstfct => 100);

  • 5. 重做第1,2两步确认是否已经生效
  • No related posts.

    15:41 如何快速克隆一个Oracle数据库 (23553 Bytes) » 半瓶

    有时候为了测试方便,需要建立一个和源库一样的数据库来操作,这时候一个简单的做法是直接克隆,通过配置参数文件和直接复制数据文件来快速建立一个新的库,本文演示了基于10g版本ASM存储下的一个操作过程。

    源库SID:erptest    目标库SID:erpoptm

    第一步,首先获取源库的参数文件

    SQL> CREATE PFILE='/tmp/init_temp.ora' from spfile;

    File created.

    参照以上文件建立一个目标库的参数文件initerpoptm.ora如下:

    erptest.__db_cache_size=1828716544
    erptest.__java_pool_size=16777216
    erptest.__large_pool_size=16777216
    erptest.__shared_pool_size=268435456
    erptest.__streams_pool_size=0
    *.audit_file_dest='/u01/app/oracle/admin/erpoptm/adump'
    *.background_dump_dest='/u01/app/oracle/admin/erpoptm/bdump'
    *.compatible='10.2.0.1.0'
    *.control_files='+DGOPTM/erpoptm/control01.ctl','+DGOPTM/erpoptm/control02.ctl','+DGOPTM/erpoptm/control03.ctl'
    *.core_dump_dest='/u01/app/oracle/admin/erpoptm/cdump'
    *.db_block_size=8192
    *.db_domain=''
    *.db_file_multiblock_read_count=16
    *.db_name='erptest'
    *.db_recovery_file_dest='+DGOPTM'
    *.db_recovery_file_dest_size=2147483648
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=erpoptmXDB)'
    *.job_queue_processes=10
    *.open_cursors=300
    *.pga_aggregate_target=1073741824
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.sga_target=2147483648
    *.undo_management='AUTO'
    *.undo_tablespace='UNDOTBS2'
    *.user_dump_dest='/u01/app/oracle/admin/erpoptm/udump'

    改动的内容都是各种文件的路径,注意这里的db_name不要修改,否则无法mount数据库,因为db_name要和数据文件头记录的db_name一致。

    第二步,建立对应的日志、跟踪等文件的路径

    [oracle@erpdevdb tmp]$ cd /u01/app/oracle/admin/

    [oracle@erpdevdb admin]$ mkdir erpoptm

    [oracle@erpdevdb admin]$ cd erpoptm
    [oracle@erpdevdb erpoptm]$ ll
    total 0
    [oracle@erpdevdb erpoptm]$ mkdir adump
    [oracle@erpdevdb erpoptm]$ mkdir bdump
    [oracle@erpdevdb erpoptm]$ mkdir udump
    [oracle@erpdevdb erpoptm]$ mkdir cdump
    [oracle@erpdevdb erpoptm]$ ll
    total 32
    drwxr-xr-x  2 oracle oinstall 4096 Mar  8 11:45 adump
    drwxr-xr-x  2 oracle oinstall 4096 Mar  8 11:45 bdump
    drwxr-xr-x  2 oracle oinstall 4096 Mar  8 11:45 cdump
    drwxr-xr-x  2 oracle oinstall 4096 Mar  8 11:45 udump

    第三步,获取源库的控制文件内容并修改

    SQL> alter database backup controlfile to trace;

    Database altered.

    在udump目录下查看生成的trace文件,找到建立控制文件的部分脚本并修改如下:

    CREATE CONTROLFILE REUSE DATABASE "ERPTEST" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 29200
    LOGFILE
    GROUP 1 '+DGOPTM/erpoptm/redo01.log'  SIZE 50M,
    GROUP 2 '+DGOPTM/erpoptm/redo02.log'  SIZE 50M,
    GROUP 3 '+DGOPTM/erpoptm/redo03.log'  SIZE 50M
    -- STANDBY LOGFILE
    DATAFILE
    '+DGOPTM/erpoptm/system01.dbf',
    '+DGOPTM/erpoptm/undotbs01.dbf',
    '+DGOPTM/erpoptm/sysaux01.dbf',
    '+DGOPTM/erpoptm/users01.dbf',
    '+DGOPTM/erpoptm/datafile/erp_ht.268',
    '+DGOPTM/erpoptm/datafile/erp_ht.269',
    '+DGOPTM/erpoptm/datafile/erp_index.270',
    '+DGOPTM/erpoptm/datafile/erp_wl.271',
    '+DGOPTM/erpoptm/datafile/erp.272',
    '+DGOPTM/erpoptm/datafile/erp_sp.273',
    '+DGOPTM/erpoptm/datafile/erp_cw.274',
    '+DGOPTM/erpoptm/datafile/erp_zj.275',
    '+DGOPTM/erpoptm/datafile/erp_xm.276',
    '+DGOPTM/erpoptm/datafile/erp_ht.277'
    CHARACTER SET ZHS16GBK

    第四步,拷贝源库的数据文件到目标库的对应路径:

    先要为目标库建立好ASM磁盘组,建立的详细步骤可参考这篇文章

    [root@erpdevdb ~]# oracleasm createdisk VOL5 /dev/sda10
    Writing disk header: done
    Instantiating disk: done

    [oracle@erpdevdb ~]$ export ORACLE_SID=+ASM

    SQL> create diskgroup DGOPTM external redundancy disk 'ORCL:VOL5';

    Diskgroup created.

    [oracle@erpdevdb ~]$ asmcmd
    ASMCMD> ls
    DGDEV/
    DGOPTM/
    DGPAPER/
    DGSTUDY/
    DGTEST/
    ASMCMD> cd DGOPTM/

    ASMCMD> mkdir ERPOPTM/

    然后在源库的实例中用DBMS_FILE_TRANSFER.COPY_FILE包拷贝文件:

    SQL> create directory DGFROM as '+DGTEST/ERPTEST/DATAFILE';

    Directory created.

    SQL> create directory DGTO as '+DGOPTM/ERPOPTM/DATAFILE';

    Directory created.

    执行以下命令拷贝数据文件:

    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_ht.268.711907283','DGTO','erp_ht.268');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_ht.269.711907397','DGTO','erp_ht.269');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_ht.277.711972029','DGTO','erp_ht.277');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_index.270.711907487','DGTO','erp_index.270');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_wl.271.711907545','DGTO','erp_wl.271');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp.272.711907565','DGTO','erp.272');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_sp.273.711907695','DGTO','erp_sp.273');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_cw.274.711907757','DGTO','erp_cw.274');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_xm.276.711907831','DGTO','erp_xm.276');
    exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','erp_zj.275.711907801','DGTO','erp_zj.275');

    要注意的是,这里的目标文件名不能带有ASM自身生成的那一串数字,否则会报错如下:

    ORA-19504: failed to create file
    "+DGOPTM/ERPOPTM/DATAFILE/erp_zj.275.711907801"
    ORA-17502: ksfdcre:4 Failed to create file
    +DGOPTM/ERPOPTM/DATAFILE/erp_zj.275.711907801
    ORA-15046: ASM file name '+DGOPTM/ERPOPTM/DATAFILE/erp_zj.275.711907801' is not
    in single-file creation form
    ORA-06512: at "SYS.DBMS_FILE_TRANSFER", line 84
    ORA-06512: at "SYS.DBMS_FILE_TRANSFER", line 193
    ORA-06512: at line 1

    这是因为这串数字是ASM用来进行标识的信息,文档Doc ID: Note:452158.1中有说明。老杨的一篇文章描述了类似的问题。

    然后再拷贝system等表空间和redo等文件:

    SQL> drop directory DGFROM;

    Directory dropped.

    SQL> create directory DGFROM as '+DGTEST/ERPTEST';

    Directory created.

    SQL> drop directory DGTO;

    Directory dropped.

    SQL> create directory DGTO as '+DGOPTM/ERPOPTM';

    Directory created.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','redo01.log','DGTO','redo01.log');

    PL/SQL procedure successfully completed.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','redo02.log','DGTO','redo02.log');

    PL/SQL procedure successfully completed.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','redo03.log','DGTO','redo03.log');

    PL/SQL procedure successfully completed.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','system01.dbf','DGTO','system01.dbf');

    PL/SQL procedure successfully completed.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','undotbs01.dbf','DGTO','undotbs01.dbf');

    PL/SQL procedure successfully completed.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','sysaux01.dbf','DGTO','sysaux01.dbf');

    PL/SQL procedure successfully completed.

    SQL> exec DBMS_FILE_TRANSFER.COPY_FILE('DGFROM','users01.dbf','DGTO','users01.dbf');

    PL/SQL procedure successfully completed.

    需要注意的是,copy过来的文件并不是文件存储的实际路径,而是按原有的路径组织的,新的文件名只是一个alias而已:

    ASMCMD> cd ERPOPTM/
    ASMCMD> ls -l
    Type         Redund  Striped  Time             Sys  Name
    N    DATAFILE/
    N    control01.ctl => +DGOPTM/ERPTEST/CONTROLFILE/Current.273.713177855
    N    control02.ctl => +DGOPTM/ERPTEST/CONTROLFILE/Current.274.713177855
    N    control03.ctl => +DGOPTM/ERPTEST/CONTROLFILE/Current.275.713177855
    N    redo01.log => +DGOPTM/ERPTEST/ONLINELOG/group_0.266.713120427
    N    redo02.log => +DGOPTM/ERPTEST/ONLINELOG/group_0.267.713120435
    N    redo03.log => +DGOPTM/ERPTEST/ONLINELOG/group_0.268.713120441
    N    sysaux01.dbf => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.271.713120497
    N    system01.dbf => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.269.713120449
    N    undotbs01.dbf => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.270.713120467
    N    users01.dbf => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.272.713120509

    ASMCMD> cd DATAFILE/
    ASMCMD> ls -l
    Type      Redund  Striped  Time             Sys  Name
    N    erp.272 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.261.713119325
    N    erp_cw.274 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.263.713119613
    N    erp_ht.268 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.257.713118643
    N    erp_ht.269 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.256.713118843
    N    erp_ht.277 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.258.713119001
    N    erp_index.270 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.259.713119135
    N    erp_sp.273 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.262.713119553
    N    erp_wl.271 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.260.713119275
    N    erp_xm.276 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.264.713119665
    N    erp_zj.275 => +DGOPTM/ERPTEST/DATAFILE/COPY_FILE.265.713119693

    至此文件拷贝完成。

    第五步,建立密码文件

    [oracle@erpdevdb dbs]$ orapwd file=/u01/app/oracle/oracle/product/10.2.0/db_1/dbs/orapwerpoptm password=erpoptm entries=5

    第六步,启动数据库

    先启动到nomount状态,这时会用到参数文件:

    [oracle@erpdevdb dbs]$ sqlplus " / as sysdba"

    SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 8 14:01:08 2010

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected to an idle instance.

    SQL> startup nomount
    ORACLE instance started.

    Total System Global Area 2147483648 bytes
    Fixed Size                  2022144 bytes
    Variable Size             486540544 bytes
    Database Buffers         1644167168 bytes
    Redo Buffers               14753792 bytes
    SQL>
    SQL> alter database mount
    2  /
    alter database mount
    *
    ERROR at line 1:
    ORA-00205: error in identifying control file, check alert log for more info

    oracle会先找spfile,然后找pfile,找若没有参数文件,则会报错:

    [oracle@erpdevdb dbs]$ export ORACLE_SID=erpoptm
    [oracle@erpdevdb dbs]$ sqlplus " / as sysdba"

    SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 8 14:00:10 2010

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected to an idle instance.

    SQL> startup nomount
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/oracle/product/10.2.0/db_1/dbs/initerpoptm.ora'

    mount时会找控制文件,没有则会出现如上所示的错误,可以在nomount阶段来建立控制文件,先关闭源库,然后在目标库启动到nomount阶段来建立控制文件:

    SQL> CREATE CONTROLFILE REUSE DATABASE "ERPTEST" NORESETLOGS  NOARCHIVELOG
    2      MAXLOGFILES 16
    3      MAXLOGMEMBERS 3
    4      MAXDATAFILES 100
    5      MAXINSTANCES 8
    6      MAXLOGHISTORY 29200
    7  LOGFILE
    8    GROUP 1 '+DGOPTM/erpoptm/redo01.log'  SIZE 50M,
    9    GROUP 2 '+DGOPTM/erpoptm/redo02.log'  SIZE 50M,
    10    GROUP 3 '+DGOPTM/erpoptm/redo03.log'  SIZE 50M
    11  -- STANDBY LOGFILE
    12  DATAFILE
    13    '+DGOPTM/erpoptm/system01.dbf',
    14    '+DGOPTM/erpoptm/undotbs01.dbf',
    15    '+DGOPTM/erpoptm/sysaux01.dbf',
    16    '+DGOPTM/erpoptm/users01.dbf',
    17    '+DGOPTM/erpoptm/datafile/erp_ht.268',
    18    '+DGOPTM/erpoptm/datafile/erp_ht.269',
    19    '+DGOPTM/erpoptm/datafile/erp_index.270',
    20    '+DGOPTM/erpoptm/datafile/erp_wl.271',
    21    '+DGOPTM/erpoptm/datafile/erp.272',
    22    '+DGOPTM/erpoptm/datafile/erp_sp.273',
    23    '+DGOPTM/erpoptm/datafile/erp_cw.274',
    24    '+DGOPTM/erpoptm/datafile/erp_zj.275',
    25    '+DGOPTM/erpoptm/datafile/erp_xm.276',
    26    '+DGOPTM/erpoptm/datafile/erp_ht.277'
    27  CHARACTER SET ZHS16GBK
    28  /

    Control file created.

    为什么要先关闭源库呢,这是因为二者有相同的db_name,oracle通过一个lk开头的文件来在运行阶段lock某个库,如果不关闭会在alert日志中看到以下错误:

    Tue Mar  9 08:53:20 2010
    sculkget: failed to lock /u01/app/oracle/oracle/product/10.2.0/db_1/dbs/lkERPTEST exclusive
    sculkget: lock held by PID: 29747
    Tue Mar  9 08:53:21 2010
    ORA-09968: unable to lock file
    Linux-x86_64 Error: 11: Resource temporarily unavailable
    Additional information: 29747
    Tue Mar  9 08:53:21 2010
    Errors in file /u01/app/oracle/admin/erpoptm/udump/erpoptm_ora_26143.trc:
    ORA-01158: database  already mounted

    由于现在在同一个主机上有两个相同db_name的数据库,那么如何能同时启动呢,这需要指定参数db_unique_ name来区分开来,这个参数在standby环境也是必须设置的。

    修改源库的db_unique_name如下:

    SQL> alter system set db_unique_name=erptest scope=spfile;

    System altered.

    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.

    SQL> startup
    ORACLE instance started.

    回到正题,在创建控制文件的过程中会验证数据文件是否存在,如果不存在则报以下错误:

    ERROR at line 1:
    ORA-01503: CREATE CONTROLFILE failed
    ORA-01565: error in identifying file '+DGOPTM/erpoptm/system01.dbf'
    ORA-17503: ksfdopn:2 Failed to open file +DGOPTM/erpoptm/system01.dbf
    ORA-15173: entry 'system01.dbf' does not exist in directory 'erpoptm'

    也会检查参数文件中的db_name和数据文件头的db_name是否相同,否则报以下错误:

    ERROR at line 1:
    ORA-01503: CREATE CONTROLFILE failed
    ORA-01161: database name ERPTEST in file header does not match given name of
    ERPOPTM
    ORA-01110: data file 1: '+DGOPTM/erpoptm/system01.dbf'

    接着打开数据库:

    SQL> alter database open
    2  /
    alter database open
    *
    ERROR at line 1:
    ORA-01113: file 1 needs media recovery
    ORA-01110: data file 1: '+DGOPTM/erpoptm/system01.dbf'

    这说明需要介质恢复,可以一个一个数据文件的来recover,也可以直接recover database:

    SQL> recover database;
    Media recovery complete.
    SQL> alter database open;

    Database altered.

    SQL> show parameter db_name

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_name                              string      erptest
    SQL> show parameter instance_name

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    instance_name                        string      erpoptm

    注意这种情况下启动的数据库会做实例恢复,因为redo和数据文件等都是copy过来的。这样就建立了一个db_name为erptest,而instance_name和SID为erpoptm的数据库。

    然后要马上建立临时表空间:

    SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '+DGOPTM/erpoptm/temp01.dbf' SIZE 8192M REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

    Tablespace altered.

    但是事情并没有结束,很快就发些这个新搭建的库会很快死掉,alert日志记录了如下的信息:

    Tue Mar  9 10:11:24 2010
    Errors in file /u01/app/oracle/admin/erpoptm/bdump/erpoptm_mmon_30564.trc:
    ORA-00600: internal error code, arguments: [504], [0x06000AD18], [1], [0], [ksv instance], [0], [0], [0x0DCFCE590]
    Tue Mar  9 10:11:26 2010
    Errors in file /u01/app/oracle/admin/erpoptm/bdump/erpoptm_mmon_30564.trc:
    ORA-00600: internal error code, arguments: [504], [0x06000AD18], [1], [0], [ksv instance], [0], [0], [0x0DCFCE590]
    Tue Mar  9 10:11:26 2010
    Errors in file /u01/app/oracle/admin/erpoptm/bdump/erpoptm_mmon_30564.trc:
    ORA-00600: internal error code, arguments: [4193], [2887], [2890], [], [], [], [], []

    碰到很多4193的600错误,这种一般和undo有关,重建一下undo即可:

    SQL> show parameter  undo

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_management                      string      AUTO
    undo_retention                       integer     900
    undo_tablespace                      string      UNDOTBS1

    SQL> create undo tablespace undotbs2 datafile '+DGOPTM/ERPOPTM/undotbs2.dbf' size 1024m;

    Tablespace created.

    SQL> alter system set undo_tablespace=undotbs2;

    System altered.

    SQL> show parameter undo

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    undo_management                      string      AUTO
    undo_retention                       integer     900
    undo_tablespace                      string      UNDOTBS2

    再修改一下参数文件initerpoptm.ora,修改这里的undo:

    *.undo_tablespace='UNDOTBS2'

    重新启动数据库,设置db_unique_name和spfile:

    SQL> show parameter spfile

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string
    SQL>
    SQL> create spfile from pfile;

    File created.

    SQL> shutdown immediate

    SQL> startup
    ORACLE instance started.
    Database mounted.
    Database opened.
    SQL> show parameter spfile

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                               string      /u01/app/oracle/oracle/product
    /10.2.0/db_1/dbs/spfileerpoptm
    .ora
    SQL> alter system set db_unique_name=erpoptm scope=spfile;

    System altered.

    SQL> shutdown immediate
    SQL> startup
    SQL>
    SQL> show parameter db_name

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_name                              string      erptest
    SQL>
    SQL>
    SQL>
    SQL> show parameter instance_name;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    instance_name                        string      erpoptm
    SQL>
    SQL>
    SQL>
    SQL> show parameter db_unique_name

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_unique_name                       string      ERPOPTM

    可以看到spfile默认会放到dbs目录下。至此这个数据库应该是可用了,当然还要配置一下网络监听等服务:

    [oracle@erpdevdb admin]$ vi tnsnames.ora

    ERPOPTM =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = erpdevdb)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = erpoptm)
    )
    )

    [oracle@erpdevdb admin]$ lsnrctl

    LSNRCTL> help
    The following operations are available
    An asterisk (*) denotes a modifier or extended command:

    start               stop                status
    services            version             reload
    save_config         trace               spawn
    change_password     quit                exit
    set*                show*

    LSNRCTL> reload
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
    The command completed successfully

    [oracle@erpdevdb admin]$ vi /etc/oratab

    erpoptm:/u01/app/oracle/oracle/product/10.2.0/db_1:Y

    13:44 有些话要看是谁说的、怎么说的 (2718 Bytes) » 木木:木有书读

    “感谢你爹你妈没问题,首先还是要感谢国家。”

    如果这话不是于再清说的,而是丁俊辉对周洋说的,甚至都不一定要是丁俊辉,而就是一普通老百姓说的,都不会引起任何争议。如果周洋只是因为他爸妈生了他就能夺得奥运冠军,那就让他爸妈再生个奥运冠军看看。在我们这里,运动员几乎都是国家培养的,而所谓国家的培养,其实都是用老百姓的钱培养的。要周洋谢谢国家的实质就是要他谢谢其他老百姓,谢谢人民,而不是只谢自己的父母。所以,如果于再清说,“感谢你爹你妈没问题,首先还是要感谢纳税人,”这话就漂亮了。问题的关键是,我们的官员大多没有这样的概念,也不愿意有这样的想法,因为一旦把国家和纳税人联系在一起,也就意味着他们和运动员一样,也是纳税人培养的,也要谢谢老百姓。而说“国家”二个字,不但避免了这个问题,而且显得很抽象,很大气,甚至还很爱国。

     “你究竟是代表老百姓说话,还是代表党说话?”

    如果这话不是河南某官员对记者说的,而是记者反过来责问某官员的,那就犀利了。也不一定要是记者,任何一位普通老百姓说出这样的话,都会引起我们的共鸣。问题就出在,说这话的,同样是一名官员。而官员们说出这样的话,其实也不奇怪,因为这确实很符合当下的官话逻辑,在我党的官话系统里,党和老百姓确实是两个不同的团体,否则也就不会有这样的话,“我们的党员干部应该经常听取老百姓的呼声”“我们的党员干部应该经常到老百姓中间走走。”如果我们的党员和老百姓真属同一团体,真代表了老百姓,那就不可能说要听取老百姓的呼声,因为你的话就是老百姓的话,也不存在说要去老百姓中间走走的讲法,因为你就是老百姓。有趣的是,后面两句话说了这么多年,并没有引起任何争议,大家都觉得很对。所以,如果河南那官员能换一种方式和记者说,“你究竟是代表老百姓说话呢,还是代表代表老百姓的党说话?”这话就真高级了,即便有错,那也是语文没学好,口齿不清,而不是政治上的错误。

     

    10:36 新房已好 (1038 Bytes) » 柔嘉维则@life.oracle.eng
    历经整1年时间,我们家自己设计和建造的 未来的新房子 终于完工,并且装修完毕。
    正月28开拆,正月22(3月7号)办的上梁酒,那天亲戚朋友们共聚一堂,办了19桌酒。最辛苦的是妈妈和爸爸,劳心劳力整一年。
    我最喜欢的是大面弧形落地玻璃窗,想象着冬天的午后,买个吊椅,泡一杯茶,享受一段温暖的阳光;还有东面长长的走廊,看风看风景。总的来说基本没有超出预算,但是超出想象的好。
    我们家面积很大,现在想想镇上的 小蜗居 还是差远了,太冲动,要是能涨一点就卖掉吧。我们家出入杭州还是比较近和方便的。我以后下班了回家吃饭都可以,早上再来上班。也欢迎大家常来玩。

      2010-03-08 Mon

    20:59 ACOUG » Focus on Oracle