赞美大地的美德,她哺育了新的生命,创造了新的价值。

发布新日志

  • oracle10g recyclebin 详解

    2010-06-08 17:49:30

     
     
        oracle10g 提供了类似操作系统中的回收站功能。当drop table的时候,实际上只是将其重命名,并将table以及相关联的对象如index,constraint等放到回收站(RecycleBin)中,后续如果发现drop错了table,可以使用flashback table命名将回收站中的table还原,这就是oracle10g的Flashback Drop功能。
        1.什么是Recycle Bin
        实际上,Recycle Bin只是一个保存被drop的对象的一个数据字典表。所以,可以通过如下语句查询回收站中的信息:select * from recyclebin
        除非拥有sysdba权限,每个用户只能看到属于自己的对象。所以,对于用户来说,好像每个人都拥有自己的回收站。即使用户有删除其他schema对象的权限,也只能在recyclebin中看到属于自己的对象。
    SQL> conn hr/hr
    已连接。
    SQL> drop table test;
    表已删除。
    SQL> conn test/test
    已连接。
    SQL> drop table test;
    表已删除。
    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ --------------------------------
    BIN$a5ZBzpZWTQ2TNYt7SOzUFQ==$0 TEST
    SQL> conn hr/hr
    已连接。
    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ --------------------------------
    BIN$HX/8VbJARoea6Eckpactvg==$0 TEST

    注意:两个对象名是不一样的。
     以下几种drop不会将相关对象放进RecycleBin:
    * drop tablespace:会将RecycleBin中所有属于该tablespace的对象清除
    * drop user:会将RecycleBin中所有属于该用户的对象清除
    * drop cluster:会将RecycleBin中所有属于该cluster的成员对象清除
    * drop type:会将RecycleBin中所有依赖该type的对象清除
        RecycleBin中的对象会被系统自动按照规则重命名,这是为了防止命名冲突。命名格式为:BIN$unique_id$version
        其中unique_id是26个字符的对象唯一标识符,version则是对象在数据库中的版本号。

    SQL> conn test/test
    已连接。
    SQL> create table t(id int);
    表已创建。
    SQL> drop table t;
    表已删除。
    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ -------------------------------
    BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T
    BIN$a5ZBzpZWTQ2TNYt7SOzUFQ==$0 TEST

    SQL> create table t(id int);
    表已创建。
    SQL> drop table t;
    表已删除。
    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ -------------------------------
    BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T
    BIN$a5ZBzpZWTQ2TNYt7SOzUFQ==$0 TEST
    BIN$to91fMaiSSCcj2eI36eDyQ==$0 T
       可以看到,删除table t后,重建一个名为t的table,再次删除,其unique_id是不一样的。
       
       这时,做一个还原看看:

    SQL> flashback table t to before drop rename to t;
    闪回完成。
    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ -------------------------------
    BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T

    这里,Oracle选择了最后一次删除的T表还原。

    再次删除
    SQL> drop table t;
    表已删除。
    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ --------------------------------
    BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T
    BIN$aafxCq9gTbGMvrqnLMP69A==$0 T
        可以看到unique_id又变了。所以,通过这种命名方式,避免了对于删除table后又重建了同名table的情况可能造成的命名冲突。

    2.如何启用/禁用RecycleBin

    可以通过参数禁用或启用recyclebin这个特性
    在Oracle 10gR1中,通过修改一个隐含_recyclebin为False可以禁
    用这个特性,

    在Oracle 10gR2中,recyclebin变成了一个常规参数,可以在session/
    system级动态修改
     :
    SQL> show parameter recyclebin
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------
    recyclebin                           string      on
    SQL> 
    alter session set recyclebin=off;
    会话已更改。
    SQL> alter session set recyclebin=on;
    会话已更改。
    SQL> alter system set recyclebin=off;
    系统已更改。
    SQL> alter system set recyclebin=on;
    系统已更改。

    3.如何查看RecycleBin中的信息
        前面已经提到,用户可以通过查询recyclebin来查看属于自己的被drop的对象。

     SQL> select object_name,object_type from dba_objects where object_name='RECYCLEBIN';

    OBJECT_NAME
    --------------------------------------------------------------------------------
    OBJECT_TYPE
    -------------------
    RECYCLEBIN
    SYNONYM


    SQL> select owner,synonym_name,table_owner,table_name from dba_synonyms where synonym_name='RECYCLEBIN';

    OWNER                          SYNONYM_NAME
    ------------------------------ ------------------------------
    TABLE_OWNER                    TABLE_NAME
    ------------------------------ ------------------------------
    PUBLIC                         RECYCLEBIN
    SYS                            USER_RECYCLEBIN

    可以发现,实际上recyclebin是user_recyclebin的一个公共同义词。还可以通过dba_recyclebin查看系统中所有被drop的对象,但这里没有all_recyclebin视图。
     另外,Sqlplus也提供了一个专门的命令
    SQL> show recyclebin
    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
    T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13

        但该命令只能看到被drop的table,该table对应的index等只能通过查询获取。
    SQL> create table t(id int);
    表已创建。
    SQL> create index ix_t on t(id);
    索引已创建。
    SQL> alter table t add constraint con_t_pk primary key(id) using index ix_t;
    表已更改。
    SQL> drop table t;
    表已删除。
    SQL> show recyclebin;
    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    T                BIN$Lw6h3tI8SjirrzY38PbKZA==$0 TABLE        2008-09-27:16:41:51
    T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
    T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13

     4.如何清除RecycleBin中的对象
        回收站中的东西多了,自然要清除。Oracle10g增加了一个新的关键字purge来执行清除recyclebin的功能。
        purge table table_name可以清除指定的table,这里的table_name既可以是table原来的名字,也可以是回收站中按规则自动命名的名字。
    SQL> show recyclebin;
    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    T                BIN$Lw6h3tI8SjirrzY38PbKZA==$0 TABLE        2008-09-27:16:41:51
    T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
    T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13

    1)SQL> purge table test;
        表已清除。
    2)SQL> purge table "BIN$Lw6h3tI8SjirrzY38PbKZA==$0";
    表已清除。
    SQL> show recyclebin;
    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
    T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13
    3) SQL> purge tablespace users;
    表空间已清除。
    4) SQL> purge tablespace users user hr;
    表空间已清除。
     Purge recyclebin可以清除执行该命令的用户所能看到的所有recyclebin对象。也就是普通用户能清除属于自己的对象,而sysdba用户则能清除所有recyclebin中的对象。
    5)purge index可以清除index对象。
    SQL> create table t1(id int);
    表已创建。
    SQL> create index ix_t1 on t1(id);
    索引已创建。
    SQL> drop table t1;
    表已删除。
    SQL> select object_name,original_name,type from recyclebin;
    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ --------------------------------
    TYPE
    -------------------------
    BIN$lTA1iH/bTzqqe4/qmpBeJw==$0 T
    TABLE

    BIN$6G08DJvESIyFDrYA9nO24Q==$0 IX_T1
    INDEX

    BIN$El5FGgr8RF6MY6HiHlnoRw==$0 T1
    TABLE
    SQL> purge index ix_t1;

    索引已清除。

    SQL> select object_name,original_name,type from recyclebin;

    OBJECT_NAME                    ORIGINAL_NAME
    ------------------------------ --------------------------------
    TYPE
    -------------------------
    BIN$lTA1iH/bTzqqe4/qmpBeJw==$0 T
    TABLE

    BIN$El5FGgr8RF6MY6HiHlnoRw==$0 T1
    TABLE
    SQL>
    5.如何还原RecycleBin中的对象
        前面的试验中已经使用Flashback table来还原过被删除的table.
    SQL> show recyclebin
    ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
    ---------------- ------------------------------ ------------ -------------------
    T                BIN$lTA1iH/bTzqqe4/qmpBeJw==$0 TABLE        2008-09-27:17:02:16
    T1               BIN$El5FGgr8RF6MY6HiHlnoRw==$0 TABLE        2008-09-27:17:03:25
    SQL> flashback table t to before drop rename to t;

    闪回完成。

    SQL>
     SQL> desc test名称 是否为空? 类型
    ----------------------------------------- -------- ----------------------------
        ID NUMBER(38)
        如果多次删除同名的table,则使用上面的语句还原的是最后一个被删除的test表,这里也可以使用RecycleBin给table的名字来做还原。
        SQL> flashback table "BIN$GoZUqZ6GS222JZdcCtFlHQ==$0" to before drop rename to test;
        闪回完成。
  • ORACLE中查看执行计划plan

    2010-05-21 15:04:49

    ORACLE中查看执行计划plan一:执行形式
    通常我们在sql*plus中就可以执行了。在形式上,如果按照输出结果方式主要有两个不同,按照执行方式也有两个不同。
    至于如何使用dbms_xplan包裹,不在此详述,我自己一般也不用。
    1)执行方式1 -- set autotrace traceonly..
    sql>set serveroutput on
    sql>set autotrace traceonly
    完整格式是:
    SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
    然后运行即可直接的查看结果,如例子(已经手工删除一些空白):
    SQL> select * from tab;
    已选择442行。
    执行计划
    ----------------------------------------------------------
    Plan hash value: 457676135
    --------------------------------------------------------------------------------
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    --------------------------------------------------------------------------------
    | 0 | SELECT STATEMENT | | 1066 | 90610 | 204 (4)| 00:00:03 |
    | 1 | NESTED LOOPS OUTER | | 1066 | 90610 | 204 (4)| 00:00:03 |
    |* 2 | TABLE ACCESS FULL | OBJ$ | 1066 | 83148 | 152 (5)| 00:00:02 |
    | 3 | TABLE ACCESS CLUSTER| TAB$ | 1 | 7 | 1 (0)| 00:00:01 |
    |* 4 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 0 (0)| 00:00:01 |
    --------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------

    2 - filter("O"."TYPE#"<=5 AND "O"."OWNER#"=USERENV('SCHEMAID') AND
    "O"."TYPE#">=2 AND "O"."LINKNAME" IS NULL)
    4 - access("O"."OBJ#"="T"."OBJ#"(+))
    统计信息
    ----------------------------------------------------------
    8 recursive calls
    0 db block gets
    1684 consistent gets
    0 physical reads
    0 redo size
    11810 bytes sent via SQL*Net to client
    704 bytes received via SQL*Net from client
    31 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    442 rows processed
    (注:墨绿色部分是EXPLAIN PLAN输出所不具有的)
    该命令参考见<<sql * plus user's guide and reference release 10.2>> B14357-01.
    如果想不起来,可以用sql> help set来查看可用SET命令。
    2)EXPLAIN PLAIN FOR
    直接执行EXPLAIN PLAN FOR SELECT * FROM TAB;
    SQL> set autotrace off;
    SQL> explain plan for select * from tab;
    已解释。
    SQL> select * from table(dbms_xplan.display);
    具体结果略。
    该命令必须参考<<Oracle Database SQL Reference 10g Release 2 (10.2) >>B14200-02
    其它的可以参考视图:V$SQL_WORKAREA,V$SQL_PLAN,V$SQL_PLAN_STATISTICS,V$SQL_PLAN_STATISTICS_ALL。
    可以参考的其它书籍是: Oracle Database Performance Tuning Guide (有关explain输出),Oracle Database Reference(前面提到的动态性能视图,那几个v$开头的).
     3)两种方式的比较
    a) 前面一种方式更加简单,而且只有一次设置,次次有效(SQL*PLUS环境下),输出的结果也更详细,缺点
    是输出结果必须用spool才可以保存。
    b)后面一种方式稍微麻烦一些,需要为每个独立的SQL执行,但优点是输出的结果可以存储到表格中,因为
    dbms_xplan.display是一个管道表函数,输出的每一行都是varchar2类型。
    综合而言,我还是更喜欢用set的方式。
    它们的共同点在于,都需要用到表格plan_table ,有关plan_Table的脚本执行脚本ORACLE_HOME\RDBMS\ADMIN\UTLXPLAN.SQL

    二:可用的参考书籍
    1)sql * plus user's guide and reference release 10.2
    2)Oracle Database SQL Reference 10g Release 2 (10.2)
    3)Oracle Database Performance Tuning Guide
    4)Oracle Database Reference

  • windows 7 64bit 下安装oracle client 俺的 plsqlDEV

    2010-05-13 16:52:41

    在WINDOWS7 RTM 7600 X64下安装oracle客户端和PLSQL DEVELOPER成功经历
    这几天装了WIN7 X64 ,由于工作需要,必须安装JAVA,ORACLE CLIENT,PLSQLDEV之类的东西
    2天了,一直都是PLSQLDEV不能连接ORACLE的问题,下载了4个版本的客户端最后都不能使用PLSQLDEV .
    网上搜索了很多资料也不行,很零碎. 自己琢磨了半天终于搞懂了
    下面给出一些方法大家参考.有什么问题可以提


    只写客户端,不写服务端,我想没人会在WIN7上做服务吧,最多开发而已

    1 当前任何版本的ORACLE客户端在任何版本的WINDOWS7上都无法正常完成安装.
      主要是因为ORACLE安装的先决条件里操作系统版本不符合,但是这个问题可以修改refhost.xml解决, 具体是在refhost.xml中添加
      <!--Microsoft Windows 7-->
      <OPERATING_SYSTEM>
        <VERSION VALUE="6.1"/>
      </OPERATING_SYSTEM>
      即可,不需要添加X32或者X64,注意ORACLE10G 或者11 有可能有多个refhost.xml文件,都需要修改(好像部分版本需要修改oraparam.ini文件 自己搜索一下吧)
      这样可以在检查操作系统的时候绕过检查.
      无论是oracle client for Windows , vista ,2k8 server 的X32或者X64版本都可以通过这个方法在WIN7 X64下安装
     
     
    2 如果你要不使用PLSQL DEVELOPER 可以不用看2,3 只看1就能成功安装.
      如果你要用,那么你必须安装ORACLE 32位的版本,安装方法类似上面
      (如果安装64位版本,PLSQLDEV是没法配置好OCI的,总是会提示操作系统不对应)
      注意,我在安装的时候网上看到了类似下面这种内容:
      "选择安装路径时,不要放在Program Files (x86) 这样的文件夹里"
     
      所以我把客户端装在了E:\ORACLE\***XX 这种目录,我想大家一般也是这么安装的吧
      我不知道如果放在 Program Files (x86) 中会出什么问题,但事实是总有一些文件会放在里面,这个不用管,后面还是可以用
     
     
    3 按照2的方法装好后,CMD  SQLPLUS测试没问题
      但是打开PLSQL DEVELOPER 7.1.5.1399 会出问题,提示OCI的错误
      然后 不登录ORACLE进PLSQLDEV 依次选择tools--preferences,配置下面的东西 路径大家自己改
      oraclehome : E:\oracle\product\10.2.0\client_1\BIN
      oci library : E:\oracle\product\10.2.0\client_1\BIN\oci.dll
     
      这样oracle client 和 plsqldev 就都可以用了


    接着到了“产品特定的先决条件检查”时,报正在检查操作系统的要求时,未通过验证,这个修改以下两个文件即可解决:
    1.client\stage\prereq\client\refhost.xml
    2.client\stage\prereq\client_prereqs\client\refhost.xml
    找到以下内容:
    <!--Microsoft Windows Vista-->
    <OPERATING_SYSTEM>
      <VERSION VALUE="6.0"/>
    </OPERATING_SYSTEM>
    在其后面追加以下内容:
    <!--Microsoft Windows 7-->
    <OPERATING_SYSTEM>
      <VERSION VALUE="6.1"/>
    </OPERATING_SYSTEM>
    即可解决问题.
    如果安装的是oracle 10g database,则修改以下两个文件:
    1、db\Disk1\stage\prereq\db\refhost.xml
    2、db\Disk1\stage\prereq\db_prereqs\db\refhost.xml
    向其增加以下内容即可:
    <!--Microsoft Windows 7-->
    <OPERATING_SYSTEM>
      <VERSION VALUE="6.1"/>
    </OPERATING_SYSTEM>

    PLSQL DEVELOPER都已安装,但是打开PLSQL DEVELOPER 8时会出问题,提示OCI的错误,然后不登录ORACLE进PLSQLDEV 依次选择tools--preferences,配置下面的东西: 路径自己改
    oraclehome : D:\temp\oracle\product\10.2.0\client_1\BIN
    oci library : D:\temp\oracle\product\10.2.0\client_1\BIN\oci.dll

    最近笔者换了WIN7系统,在装oracle时遇到总总问题,其主要是WIN7不兼容oracle10g。

    经过搜索和研究,终于得到解决方案。

    过程:

    1.在磁盘下建一个文件夹,注意不要有空格,否则oracle安装时会出现警告。

    2.修改oracle安装文件下install的oraparam.ini文件,修改如下

    [Oracle]
    DISTRIBUTION=TRUE
    SOURCE=../stage/products.xml
    LICENSE_LOCATION=
    JRE_LOCATION=../stage/Components/oracle.swd.jre/1.4.2.14.0/1/DataFiles
    JRE_MEMORY_OPTIONS=" -mx96m"
    DEFAULT_HOME_LOCATION=oracle\product\10.2.0\db
    DEFAULT_HOME_NAME=OraDb10g_home
    NO_BROWSE=/net
    NLS_ENABLED=TRUE
    BOOTSTRAP=TRUE
    OUI_VERSION=10.2.0.3.0
    ## JRE_VERSION is only for Windows. This is to copy accessbridge dlls
    JRE_VERSION=1.4.2
    #SHOW_HOSTNAME=ALWAYS_SHOW shows the hostname panel always
    #SHOW_HOSTNAME=NEVER_SHOW does not the hostname panel
    #SHOW_HOSTNAME=CONDITION_SHOW shows the hostname panel on condition
    SHOW_HOSTNAME=NEVER_SHOW
    #THIN_JDBC_FILENAME is optional and defaults to classes12.jar
    #The value specified for this should be packaged with OUI, and should
    #be relative to <OUI expanded stagedir>/jlib/
    THIN_JDBC_FILENAME=classes12.jar
    #RUN_OUICA specifies the batch script. name that needs to be run
    #The script. is ouica.bat for win32, and ouica.sh for solaris.
    #If the value is not specified, then the OUICA script. is not run
    RUN_OUICA=ouica.bat
    CLUSTERWARE={"oracle.crs","10.1.0.2.0"}
    SILENT_VARIABLE_VALIDATION=TRUE

    [Certified Versions]
    #You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE
    Windows=5.0,5.1,5.2,6.0,6.1

    [Windows-6.1-required]
    #Minimum display colours for OUI to run
    MIN_DISPLAY_COLORS=256
    #Minimum CPU speed required for OUI
    #CPU=300

    [Windows-6.1-optional]

    #Windows 2000 use winver.exe to find version
    #[Windows-5.0-required]
    #Minimum display colours for OUI to run
    MIN_DISPLAY_COLORS=256
    #Minimum CPU speed required for OUI
    #CPU=300

    #[Windows-5.0-optional]

    #Windows XP use winver.exe to find version
    #[Windows-5.1-required]
    #Minimum display colours for OUI to run
    MIN_DISPLAY_COLORS=256
    #Minimum CPU speed required for OUI
    #CPU=300

    #[Windows-5.1-optional]

    #Windows .net use winver.exe to find version
    #[Windows-5.2-required]
    #Minimum display colours for OUI to run
    MIN_DISPLAY_COLORS=256
    #Minimum CPU speed required for OUI
    #CPU=300

    #[Windows-5.2-optional]

    [Windows-6.0-optional]
    #Minimum display colours for OUI to run
    MIN_DISPLAY_COLORS=256
    #Minimum CPU speed required for OUI
    #CPU=300


    [IMAGES]
    FILE1=images/rdbms_1.gif
    FILE2=images/rdbms_2.gif
    FILE3=images/rdbms_3.gif
    FILE4=images/rdbms_4.gif
    FILE5=images/rdbms_5.gif
    FILE6=images/rdbms_6.gif
    FILE7=images/rdbms_7.gif
    FILE8=images/rdbms_8.gif

    LICENSE_LOCATION=license.txt
  • ORA-01855: 要求 AM/A.M. 或 PM/P.M.

    2010-05-13 09:57:40

    1.【问题现象】
    在中文Windows环境的SQL*Plus中使用如下日期操作SQL时报错。具体报错信息如下:
    SQL> insert into t values (TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'));
    insert into t values (TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM'))
                                   *
    第 1 行出现错误:
    ORA-01855: AM/A.M. or PM/P.M. required

    SQL> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;
    select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual
                    *
    第 1 行出现错误:
    ORA-01855: AM/A.M. or PM/P.M. required

    2.【问题原因】
    在本地NLS_DATE_LANGUAGE参数指定的语言中没有找到“AM”这样的时间定义,也就是说在具体的国家语言下此类“AM”的定义是不相同的,比如,在中文“SIMPLIFIED CHINESE”中就应该指定为“上午/下午”,在美国的语言中就应该指定为“A.M. / P.M.”,在英国语言或西欧语言中就要指定为“AM/PM”。注意其中的区别。

    这里给出一种查询NLS_DATE_LANGUAGE参数的方法:
    SQL> col PARAMETER for a30
    SQL> col VALUE for a30
    SQL> select * from v$nls_parameters;

    PARAMETER                      VALUE
    ------------------------------ ------------------------------
    NLS_LANGUAGE                   SIMPLIFIED CHINESE
    NLS_TERRITORY                  CHINA
    NLS_CURRENCY                   ¥
    NLS_ISO_CURRENCY               CHINA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
    NLS_CHARACTERSET               AL32UTF8
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              ¥
    NLS_NCHAR_CHARACTERSET         UTF8
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE

    已选择19行。

    3.【问题处理】 方法很简单,第一类处理方法就是严格按照具体国家语言的定义格式书写特定的时间字符串,另一类处理方法是修改NLS_DATE_LANGUAGE参数以便适应某一种日期字符串的写法。下面从这两类处理思想出发,给出三种可行的处理方法。
    1)第一种方法:将原字符串中的“AM”修改为中国特色的的“上午”
    SQL> select TO_Date( '22/10/2009 12:00:00 上午', 'DD/MM/YYYY HH:MI:SS AM') from dual;

    TO_DATE('22/10
    --------------
    22-10月-09

    SQL> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';

    会话已更改。

    SQL> select TO_Date( '22/10/2009 12:00:00 上午', 'DD/MM/YYYY HH:MI:SS AM') from dual;

    TO_DATE('22/10/200912:00
    ------------------------
    10/22/2009 12:00:00 上午

    2)第二种处理方法:直接在session中修改NLS_DATE_LANGUAGE参数,即刻生效。
    (1)修改NLS_DATE_LANGUAGE为“AMERICAN”
    SQL> alter session set NLS_DATE_LANGUAGE = 'AMERICAN';

    会话已更改。

    (2)再一次尝试查询,此时已经不再报错
    SQL> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

    TO_DATE('10/
    ------------
    22-OCT-09

    (3)格式化一下日期格式,以便更加清晰的查看结果。
    SQL> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';

    会话已更改。

    SQL> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

    TO_DATE('10/22/200912:
    ----------------------
    10/22/2009 12:00:00 AM

    3)第三种方法:修改Windows注册表中的NLS_LANG参数,以便达到迂回的修改NLS_DATE_FORMAT参数的目的
    (1)进入Windows注册表方法
    点击Windows操作系统的左下角的“开始”(“start”),然后点击“运行”(Run),最后输入“regedit”回车后便可进入到注册表界面。

    (2)在注册表中按照下面的过程导航,即可定位到NLS_LANG变量
    “My Computer” --> “HKEY_LOCAL_MACHINE” --> “SOFTWARE” --> “ORACLE” --> “KEY-OraDb10g_home1”
    此时在注册表的右侧就能发现“NLS_LANG”的身影了

    (3)双击“NLS_LANG”,把内容替换为“AMERICAN_AMERICA.ZHS16GBK”或“AMERICAN_CHINA.ZHS16GBK”即可(NLS_LANG的第一部分“语言”起作用)。

    (4)验证查询
    SQL> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

    TO_DATE('10/
    ------------
    22-OCT-09

    SQL> alter session set NLS_DATE_FORMAT='MM/DD/YYYY HH:MI:SS AM';

    Session altered.

    SQL> select TO_Date( '10/22/2009 12:00:00 AM', 'MM/DD/YYYY HH:MI:SS AM') from dual;

    TO_DATE('10/22/200912:
    ----------------------
    10/22/2009 12:00:00 AM

    4.小结
    Oracle的日期操作本身相对其他数据类型操作来说复杂很多,在日常的使用过程中要多加总结与记录。
    鉴于本文中提到的问题,在书写脚本的时候或使用工具生成脚本的时候,一定要注意脚本中日期类字符串的书写格式。以防因此导致数据无法录入。
  • ORA-12518 TNS:监听程序无法分发客户机连接

    2009-12-02 18:07:42

    ORA-12518: TNS:listener could not hand off client connection
    2008-06-23 08:57
    ORA-12518: TNS:listener could not hand off client connection
    Cause: The process of handing off a client connection to another process failed.
    Action: Turn on listener tracing and re-execute the operation. Verify that the listener and database instance are properly configured for direct handoff. If problem persists, call Oracle Support.

    先试试 connect / as sysdba,看行不行,如果行的话,
    再试试connect / @ as sysdba看看监听配置是否有问题。
    如果这一步有问题,说明监听这块有问题。

    1.cmd
    2.sqlpls /nolog
    3.connect sys/test as sysdba
    没有问题
    1.cmd
    2.sqlplus /nolog
    3.connect sys/test@test as sysdba
    ORA-12518: TNS:listener could not hand off client connection
    说明监听有问题

    查到了相关资料如下:
    http://www.dba-oracle.com/sf_ora_12518_tns_listener_could_not_hand_off_client_connection.htm

    The reason ORA-12518 is being throw may be because of DEDICATED connections because Oracle 10g has a value of PROCESSES is defaulted at 150 which can be lower than necessary in a production system. Also, in pre-9i MTS, ORA-12518 may be thrown in SHARED SERVER because the dispatcher may have reached the maximum connection value, so it denies all other.

    There are two solutions for ORA-12518 depending on which symptom you may be experiencing.
    a.For the DEDICATED occurrence of ORA-12518, you would need to try increasing the PROCESSES parameter so that it can handle the needed number of processes. You can ensure that you have the needed value by monitoring the listener log for ORA-12518. Also, note that because the PROCESSES parameter is static, the database will need to be bounced.
    b.If you are experiencing ORA-12518 because of a shared server issue, you first would need to use the command below to shutdown the dispatcher:
    SQL> alter system shutdown immediate 'D001';
    Then, add on new dispatchers:
    SQL> alter system set DISPATCHERS = '(protocol=tcp)(dispatchers=3)';

    通过以上资料分析得出可能出现问题的原因有两种:一是processes值设的过小,二是需要增加参数DISPATCHERS。

    考虑到之前经常遇到ora-00020超出最大进程数的问题在安装数据库的时候已经把processes设到800了,为保险起见再show parameter processes

    SQL> show parameter process;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- -----
    aq_tm_processes                      integer     0
    db_writer_processes                  integer     1
    gcs_server_processes                 integer     0
    job_queue_processes                  integer     10
    log_archive_max_processes            integer     2
    processes                            integer     1000

    再查进程数

    SQL> select count(*) from v$session;

      COUNT(*)
    ----------
           224

    所以最后得出结论应该不是processes的问题,应该用b方法来解决
    1.connect sys/test as sysdba
    2.show parameters dispatchers;
    NAME                TYPE             VALUE
    dispatchers         string           (protocol=tcp)(service=oracle10xdb)
    max_dispatchers      integer 
    5.SQL>alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
    system altered
    问题解决。
    当然根据实际情况你也可以用a方法解决,

    可以用show parameters processes;

    命令查看processes的值,数据库在安装时默认为150,对于大型应用,32位的oracle一定要注意这个问题

  • 希伯来文

    2009-10-13 11:36:48

     

      [EN] Hebrew

     
      希伯来文是闪语(Semitic)的一支。闪语是古时米索波大米亚(Mesopotamia)、叙利亚、巴勒斯坦和阿拉伯这片广大地区民族的日常用语。按地区,我们可以将闪语分成三支:
      A。东闪语(East Semitic)
      B。西北闪语(Northwest Semitic)
      C。西南闪语(Southwest Semitic)
      其中西北闪语(Northwest Semitic):分为两支:
      1。亚兰语(Aramaic)
      2。迦南闪语(Canaanite)
      (a)摩押(Moabic)
      (b)腓利基(Phoenician)
      (c)希伯来文(Hebrew)
      (d)乌加列文(Ugaritic)
      希伯来文(Hebrew):这是迦南地的通用语言。据创十:15 - 18,“迦南生长子西顿,又生赫和耶布斯人、亚摩利人、革加撒人、希未人、亚基人。。。”这些居住在迦南地人的语言就是以后踏足在巴勒斯坦地的以色列民先祖如亚伯拉罕、以撒、雅各所学习和使用的语言。我们称为希伯来文,所以在创四十:15 ,约瑟说:“我实在是从希伯来人之地被拐来的。。”虽然那时以色列民还没有进入迦南地。我们可以说,亚伯拉罕从米索波大米亚迁移至迦南时,迦南居民的语言对他们绝对不会很陌生,经过不断的适应、改进、发展,迦南地的语言就被称为希伯来文。
      希伯来文缺乏形容词
      他们在描写的过程中就用比喻的方式,比如:你的爱情比洒更美;你的唇好像一条朱红线;我的良人在男子中,如同苹果树在树林中。
      在叙事的情景里,他们就用更简单的方式,比如:他们在那里的时候,马利亚的产期到了,就生了头胎的儿子,布包起来,放在马槽里,因为客店里没有地方;到了一个地方,名叫髑髅地,就在那里把耶稣钉在十字架上,又钉了两个犯人,一个在左边,一个在右边。
      这样,很象一个人把随手摘下的一个苹果、一片树叶或者一束鲜花不声不响地递给你。他们的文字习惯和他们的建筑习惯非常相似。以色列人筑祭坛不允在筑坛的石头上动一点点工具。
      希伯来文虽然简单,用起来却要十分谨慎。据说一个小点也是一个字的。这可能是为维持语言文字在运行中保持自然、纯朴、神圣。
      希伯来语“sabra”意为“土生土长的以色列人”,是犹太人的民族语言,是世界上最古老的语言之一。它属于中东闪含语系闪语族的一个分支,没有元音字母,只有22个辅音字母,其文字从右往左书写。许多文学作品和文献是用这种语言创造出来的,今日则主要保留在《圣经》、死海古卷和大量犹太教法典及文献之中。
      起源
      希伯来语(Hebrew):这是迦南地的通用语言。据《创世记》10:15-18,“迦南生长子西顿,又生赫和耶布斯人、亚摩利人、革加撒人、希未人、亚基人。。。”这些居住在迦南地人的语言就是以后踏足在巴勒斯坦地的以色列民先祖如亚伯拉罕、以撒、雅各所学习和使用的语言。我们称为希伯来文,所以在创四十:15 ,约瑟说:“我实在是从希伯来人之地被拐来的。。”虽然那时以色列民还没有进入迦南地。我们可以说,亚伯拉罕从米索波大米亚迁移至迦南时,迦南居民的语言对他们绝对不会很陌生,经过不断的适应、改进、发展,迦南地的语言就被称为希伯来文。
      希伯来语属于亚非语系闪米特语族(或属闪含语系闪语族),为犹太教的宗教语言。过去的二千五百年,“希伯来语”主要用于《圣经》与相关宗教方面的研究,自从20世纪特别是以色列复国以来,“希伯来语”作为口语在犹太人中重新复活,渐渐取代阿拉伯语、犹太西班牙语和意第绪语(或称为“依地语”,犹太人使用的国际交流语),以色列建国后将“希伯来语”定为官方语言之一,目前(2004年)使用人口约510万,另一种官方语言是阿拉伯语。
      闪语是古时米索波大米亚(Mesopotamia)、叙利亚、巴勒斯坦和阿拉伯这片广大地区民族的日常用语。按地区,我们可以将闪语分成三支:
      A. 东闪语(East Semitic)
      B. 西北闪语(Northwest Semitic)
      C. 西南闪语(Southwest Semitic)
      其中西北闪语(Northwest Semitic):分为两支:
      1. 亚兰语(Aramaic)
      2. 迦南闪语(Canaanite)
      (a) 摩押(Moabic)
      (b) 腓利基(Phoenician)
      (c) 希伯来文(Hebrew)
      (d) 乌加列文(Ugaritic)
      犹太人原来是居住在阿拉伯半岛的一个游牧民族,最初被称为希伯来人,意思是“游牧的人”。根据记载他们历史的圣经传说,他们的远祖亚伯拉罕(阿拉伯发音为易卜拉辛)原来居住在苏美尔人的乌尔帝国附近,后来迁移到巴勒斯坦,他的后代分为两支:犹太人和阿拉伯人。古兰经中也承认亚伯拉罕是阿拉伯人的祖先。
      犹太人到世界各地后,语言、风俗逐渐和当地居民同化,但他们坚持信仰本民族的宗教,以此维持民族的独立性,仍然用自己的希伯来字母书写文字,在意大利、西班牙的犹太人,语言被同化,用希伯来字母书写的叫“拉丁诺文”;在德国、波兰的犹太人语言为“依地文”;在中国的犹太人,由于他们的宗教信仰也不吃猪肉,逐渐和回族混淆。因为他们信仰不同,在基督教国家受到歧视,不得拥有土地,只好经商,逐渐积累商业经验,基督教徒不允许放高利贷,而犹太人的信仰不禁止,可以从事信贷活动,逐渐成为欧洲的著名商人和银行家,更为低层平民所憎恶,不时发生打击犹太人事件。终于导致在希特勒德国发生迫害、消灭整个民族的事件。 第二次世界大战后,犹太人大量移居美国和巴勒斯坦,在巴勒斯坦重建以色列国,重新人为恢复希伯来语言,导致和当地定居已久的阿拉伯人的矛盾斗争,使中东成为世界的热点地区。
      语音、语法
      希伯来语共有22个字母,他们皆为辅音字母。但事实上,任何一门用口表述的语言,若没有元音,根本就不可能藉声带发出声音来,希伯来语自然也不例外。希伯来语的元音就包含在其辅音中。希伯来语除了22个字母外,还有词尾发生形状变化的5个字母。伯莱文的行文和阿拉伯文相同,都是从右到左书写。
      希伯来文缺乏形容词
      他们在描写的过程中就用比喻的方式,比如:你的爱情比洒更美;你的唇好像一条朱红线;我的良人在男子中,如同苹果树在树林中。
      在叙事的情景里,他们就用更简单的方式,比如:他们在那里的时候,马利亚的产期到了,就生了头胎的儿子,布包起来,放在马槽里,因为客店里没有地方;到了一个地方,名叫髑髅地,就在那里把耶稣钉在十字架上,又钉了两个犯人,一个在左边,一个在右边。
      这样,很象一个人把随手摘下的一个苹果、一片树叶或者一束鲜花不声不响地递给你。他们的文字习惯和他们的建筑习惯非常相似。以色列人筑祭坛不允在筑坛的石头上动一点点工具。
      希伯来文虽然简单,用起来却要十分谨慎。据说一个小点也是一个字的。这可能是为维持语言文字在运行中保持自然、纯朴、神圣。
      希伯来语复活记
      公元前70年,罗马人毁掉了犹太人的都城耶路撒冷。犹太人被逐出家园流落世界各地。他们使用寄居国的语言,致使希伯来语作为口语逐渐消失(但作为书面语继续存在)。
      19世纪后半叶,有一个犹太人决心复活希伯来语。他是立陶宛犹太青年埃里泽•本•耶胡达。1879年,耶胡达发表论文《事关大局的问题》,认为在现代世俗世界同化的压力下,犹太民族作为一个**民族而生存面临大问题,而共同的语言和共同的家园,是犹太民族存在的必要条件。为了保证民族延续和民族复兴,犹太人必须重说希伯来语。
      耶胡达决心在与其他犹太人交往时只说希伯来语。他的第一个孩子成了近2000 年来第一个把希伯来语当做母语来说的孩子。1884年,他开始编辑一份周报,进一步宣传他的思想;同时,为了证明古语能够新生,供现代社会使用,他着手编纂一部字典,并积极扩展词汇量。1890年12月,他组建了一个希伯来语委员会(即今希伯来语研究院)以发展这项事业。
      后来,耶胡达找到了一些愿意实践他语言思想的志同道合之士。他不仅要求他们积极使用希伯来语,还坚持要这批拓荒者的子女把它当做母语来学。不错,当时巴勒斯坦地区的犹太学校都讲授希伯来语,但是仅作为一种了解宗教和经书的古语来讲授。所以,耶胡达的要求对于祖居圣地的犹太人和定居多年的拓荒者来说,影响甚微。不过,年轻的移民们急于开创一种崭新的生活,许多人乐于让孩子去学这种未曾实践过的语言。
      在这个萌芽的教育体系中,建立希伯来语的尝试所遇到的困难不难想像,正如当时的老师所言:“气氛浓重压抑。难以想像和描述第一颗种子是怎么种下去的。我们像哑巴,结结巴巴的,要手和眼来帮忙。”
      经过艰苦的摸索,到第一次世界大战时,巴勒斯坦地区全部使用希伯来语的幼儿园、中小学和专业学校已达64所。
      终于,入学的儿童把自己看成了希伯来语事业的拥护和保卫者。曾有这样一个报道:有人从一个小女孩手中抢走一个布娃娃。才上学一个月的女孩吃了一惊,抓住那人的衣袖,用希伯来语叫道:“还给我!还给我!”那人装作听不懂,要女孩说意第绪语,但女孩坚持说希伯来语,宁可因此失去布娃娃。
      第一次世界大战前夕,德国的犹太人慈善机构出资在海法市筹建一所技术学院 (即后来的海法理工大学)。规划者认为,由于德语是国际公认的语言,新学院中讲课要用德语。消息披露后,巴勒斯坦地区犹太人举行了一系列的示威、罢工、罢课和抗议集会,开学典礼被迫推迟。
      同样,其他学校也开始用希伯来语讲授全部课程。到第一次世界大战末,技术 学院以希伯莱语为唯一授课语言;第一代说希伯来语的家庭也出现了。1925年,希伯来大学的创办成了全民族的大事。
      据1916-1917年间统计,巴勒斯坦地区8.5万犹太人中有3.4万人把希伯来语当做第一用语或日常用语。有意义的是,其中农业定居村和特拉维夫市75%的儿童及33%的成年人说希伯来语。希伯来语的延续得到了保证。
      1923年9月29日,英国托管当局承认了希伯来语的地位:“阿拉伯语、英语和希伯来语为该地区的官方语言。”
      虽然希伯来语在1948年5月以色列国建立前后还经受了多次挑战,移民数往往超过了原有居民数,然而希伯来语作为存活语言的地位从未动摇。

    希伯来语奇迹

      随着犹太人流浪到世界各地,希伯来语灭亡了两千年,但以色列建国后,希伯来语人为地复活。这在世界语言历史上是属于绝无仅有的奇迹。今天的希伯来语,和两千年前的希伯来语是相通的。如果时光可以倒流到古以色列大卫王的年代。现代的以色列人可以听懂两千年前人们的对话。现代的言语能够做到与两千年前的语言相通这在世界上也是属于绝无仅有的奇迹。

    希伯来语拼写规则

      希伯来语共有二十二个辅音字母,没有元音字母,拼写的时候用四个辅音字母Alef, He, Vav, Yud当作元音来拼写单词,也就是说这四个辅音字母Alef, He, Vav, Yud身兼两职,既做辅音字母又做元音字母,这四个字母也同样可以互相组合成为复合元音。现代的希伯来语拼写是相当规则和准确的。
  • ORA-12528问题解决

    2009-09-29 12:26:59

    ORA-12528问题解决!----可不可以设置为精华啊!嘿嘿!
    lsnrctl status
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lypch)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROCipc)))
    Services Summary...
    Service "LSExtProc" has 1 instance(s).
      Instance "LSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "ammicly" has 1 instance(s).
      Instance "ammicly", status BLOCKED, has 1 handler(s) for this service...
    The command completed successfully

    这个问题说明数据库没有Mount
    连接数据库,发现:
    ORA-12528: TNS:listener: all appropriate instances are blocking new connections
    用sqlplus /nolog
    sql>connect [email=sys/ammic@amicly]sys/ammic@amicly[/email] as sysdba
    ORA-12528: TNS:listener: all appropriate instances are blocking new connections

    连接的问题可以通过修改listener.ora的参数,把动态的参数设置为静态的参数,红色标注部分,然后从新启动监听,就OK
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oracle\product\10.1.0\db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (GLOBAL_DBNAME = ammicly)
          (ORACLE_HOME = c:\oracle\product\10.1.0\db_1)
          (SID_NAME = ammicly)
        )
      )
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = lypch )(PORT = 1521))
          )
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
          )
        )
      )

    通过修改tnsnames.ora的参数,红色表注部分
    # tnsnames.ora Network Configuration File: C:\oracle\product\10.1.0\db_1
    \network\admin\tnsnames.ora
    # Generated by Oracle configuration tools.
    AMMICLY =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = lypch )(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ammicly)
          (UR=A)
        )
      )
    EXTPROC_CONNECTION_DATA =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
      )

    然后 sqlplus /nolog
    SQL>alter database mount;
    SQL>alter database open;

    这样就可以启动数据库了;

    或者用Oradim -shutdown -sid ammicly -shuttype srvc,inst -shutmode immediate -syspwd ammic;关闭数据库
    在用oradim -startup -sid ammicly -starttype srvc,inst -syspwd ammic;启动数据库解决;也可以在截面上从启动数据库服务来解决;

    总结oRA-12528问题是因为监听中的服务使用了动态服务,系统启动后,数据库没有正常的MOUNT,因此在动态模式下,就会出现这个问题,用静态的就不会有这个问题,因此上面的方法就是把监听设置为静态,或者在tnsnames.ora中追加(UR=A)或者从启动服务,三种方法解决问题;
  • 日志不归档

    2009-06-03 19:18:34

    sqlplus sys/system@server as sysdba;

    archive log list;

    shutdown immediate;

    startup mount;

    alter database noarchivelog;

    alter database open;

    archive log list;

    --unable

     

  • ORA-00257故障解决过程

    2009-05-08 10:58:45

    概述

      Oracle数据库是目前业界最常用的大型数据库系统,我在实际项目中遇到出现ORA-00257错误(空间不足错误),通过查找资料,绝大部分说这是由于归档日志太多,占用了全部的硬盘剩余空间导致的,通过简单删除日志或加大存储空间就能够解决。但是我在Oracle 10g上发现,存储空间还有很大,却也报这个错误。原来是Oracle 10g中新的特性,对Flash Recovery的管理导致的。

      1、软硬件环境

      服务器HP Proliant DL580G4(Intel Xeon 3.16GHz/4GB/ 72.8*4/RAID4)

      操作系统Red Flag DC Server release 5.0 (Trinity) for x86-64 Linux

      数据库Oracle 10.2.0.1.0

      2、问题现象

      数据库系统已经试运行了半个多月,在7月24日晚上连接数据库后做数据更新时出现ORA-00257错误,如下图。


      提示归档错误,通过查找ORACLE错误代码,解释为硬盘空间不足,需要删除归档日志增加空间,但是服务器可用空间200GB,目前只用了10GB左右,这是为什么呢?

      3、诊断过程

      1)查看ORACLE数据库归档日志情况

    [root@hrmsdb /]# cd /oracle/flash_recovery_area/HKCHR/archivelog

    [root@hrmsdb archivelog]# ls

    2006_07_04 2006_07_13 2006_07_17 2006_07_20 2006_07_23

    2006_07_11 2006_07_14 2006_07_18 2006_07_21 2006_07_24

    2006_07_12 2006_07_15 2006_07_19 2006_07_22 2006_07_25

    [root@hrmsdb archivelog]# cd 2006_07_25

    [root@hrmsdb 2006_07_25]# ls

    [root@hrmsdb 2006_07_25]# cd ../2006_07_24

    [root@hrmsdb 2006_07_24]# ls

    o1_mf_1_92_2d933vgb_.arc o1_mf_1_96_2d954ns7_.arc o1_mf_1_98_2d969d5h_.arc

    o1_mf_1_95_2d9537cs_.arc o1_mf_1_97_2d956km0_.arc

      说明在出现问题之前数据库归档处理一直是正常的。

      2)查看数据库REDOLOG情况

    [oracle@hrmsdb ~]$ sqlplus /nolog

    SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 7月 25 10:44:18 2006

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

    SQL> connect / as sysdba

    已连接。

    SQL> select * from v$log;

    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME

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

    1 1 101 52428800 1 NO CURRENT 3621973 24-7月 -06

    2 1 99 52428800 1 NO INACTIVE 3600145 24-7月 -06

    3 1 100 52428800 1 NO INACTIVE 3611932 24-7月 -06

      发现ARC状态为NO,表示系统没法自动做归档。

      3)手工切换日志

    SQL> alter system switch logfile;

    alter system switch logfile

    *
    第 1 行出现错误:

      ORA-01013: 用户请求取消当前的操作

      在等待长时间没反应后,中断操作,手工切换日志没有成功。

      4)查看Oracle数据库后台归档服务进程

    [oracle@hrmsdb ~]$ ps -ef|grep oracle

    oracle 4601 1 0 Jul11 ? 00:00:04 /oracle/product/10.2.0/db_1/bin/

    tnslsnr LISTENER -inherit

    oracle 5025 1 0 Jul11 ? 00:00:00 /usr/bin/ssh-agent -s

    oracle 20923 1 0 Jul24 ? 00:00:01 ora_pmon_hkchr

    oracle 20925 1 0 Jul24 ? 00:00:00 ora_psp0_hkchr

    oracle 20927 1 0 Jul24 ? 00:00:00 ora_mman_hkchr

    oracle 20929 1 0 Jul24 ? 00:00:01 ora_dbw0_hkchr

    oracle 20931 1 0 Jul24 ? 00:01:07 ora_lgwr_hkchr

    oracle 20933 1 0 Jul24 ? 00:00:05 ora_ckpt_hkchr

    oracle 20935 1 0 Jul24 ? 00:00:01 ora_smon_hkchr

    oracle 20937 1 0 Jul24 ? 00:00:00 ora_reco_hkchr

    oracle 20939 1 0 Jul24 ? 00:00:00 ora_cjq0_hkchr

    oracle 20941 1 0 Jul24 ? 00:00:01 ora_mmon_hkchr

    oracle 20943 1 0 Jul24 ? 00:00:05 ora_mmnl_hkchr

    oracle 20945 1 0 Jul24 ? 00:00:00 ora_d000_hkchr

    oracle 20947 1 0 Jul24 ? 00:00:00 ora_s000_hkchr

    oracle 20953 1 0 Jul24 ? 00:09:41 ora_arc0_hkchr

    oracle 20955 1 1 Jul24 ? 00:10:29 ora_arc1_hkchr

    oracle 20959 1 0 Jul24 ? 00:00:00 ora_qmnc_hkchr

    oracle 20967 1 0 Jul24 ? 00:00:00 ora_q000_hkchr

    oracle 20969 1 0 Jul24 ? 00:00:00 ora_q001_hkchr

    oracle 21715 1 0 Jul24 ? 00:00:19 oraclehkchr (LOCAL=NO)

    oracle 21765 1 0 Jul24 ? 00:00:00 ora_j000_hkchr

    oracle 21816 1 0 Jul24 ? 00:00:00 ora_j001_hkchr

    oracle 21832 1 0 Jul24 ? 00:00:00 ora_j002_hkchr

    oracle 21839 1 0 Jul24 ? 00:00:00 ora_j003_hkchr

    oracle 21859 1 0 Jul24 ? 00:00:00 ora_j004_hkchr

    oracle 21861 1 0 Jul24 ? 00:00:00 ora_j005_hkchr

    oracle 21886 1 0 Jul24 ? 00:00:00 ora_j006_hkchr

    oracle 21888 1 0 Jul24 ? 00:00:00 ora_j007_hkchr

    root 23187 23186 0 10:39 ? 00:00:00 login -- oracle

    oracle 23188 23187 0 10:39 pts/0 00:00:00 -bash

    oracle 23216 23188 0 10:39 pts/0 00:00:00 sqlplus

    oracle 23217 23216 0 10:39 ? 00:00:00 oraclehkchr (DESCRIPTION=(LOCAL=

    YES)(ADDRESS=(PROTOCOL=beq)))

    root 23224 23223 0 10:40 ? 00:00:00 login -- oracle

    oracle 23225 23224 0 10:40 pts/1 00:00:00 -bash

    oracle 23310 23225 0 10:46 pts/1 00:00:00 ps -ef

    oracle 23311 23225 0 10:46 pts/1 00:00:00 grep oracle

    [oracle@hrmsdb ~]$

    后台进程都正常运行。

      5)查看FLASH_RECOVERY_AREA空间使用情况

    [root@hrmsdb /]# cd /oracle

    [root@hrmsdb oracle]# ls

    admin flash_recovery_area oraInventory product

    [root@hrmsdb oracle]# du -a -k flash_recovery_area

    4 flash_recovery_area/HKCHR/onlinelog

    42456 flash_recovery_area/HKCHR/archivelog/2006_07_15/o1_mf_1_74_2cj1h1jz_.arc

    ……………….

    42448 flash_recovery_area/HKCHR/archivelog/2006_07_14/o1_mf_1_68_2cfzwwvt_.arc

    512560 flash_recovery_area/HKCHR/archivelog/2006_07_14

    1469224 flash_recovery_area/HKCHR/archivelog

    6988 flash_recovery_area/HKCHR/backupset/2006_07_04/o1_mf_ncsnf_TAG20060704T1

    74229_2bng1o0b_.bkp

    876916 flash_recovery_area/HKCHR/backupset/2006_07_04/o1_mf_nnndf_TAG20060704T1

    74229_2bng0cx4_.bkp

    883908 flash_recovery_area/HKCHR/backupset/2006_07_04

    883912 flash_recovery_area/HKCHR/backupset

    2353144 flash_recovery_area/HKCHR

    2353148 flash_recovery_area

    [root@hrmsdb oracle]#


    FLASH_RECOVERY_AREA空间使用了2.35GB

      6)查看FLASH_RECOVERY_AREA空间中各部分使用情况

    SQL> select * from v$recovery_file_dest;

    NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

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

    /oracle/flash_recovery_area 2147483648 2134212608 0 35

    SQL> select * from v$flash_recovery_area_usage;

    FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

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

    CONTROLFILE 0 0 0

    ONLINELOG 0 0 0

    ARCHIVELOG 69.97 0 40

    BACKUPPIECE 30.01 0 2

    IMAGECOPY 0 0 0

    FLASHBACKLOG 0 0 0

    已选择6行。


      发现ARCHIVELOG占近70%,BACKUPPIRCR占了30%,这样FLASH_RECOVERY_AREA空间的空间已经被完全占据了。

    4、解决过程

      根据数据库目前可用存储空间为200GB、FLASH_RECOVERY_AREA空间为2GB的实际情况,把FLASH_RECOVERY_AREA的空间修改为20GB。

    SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=20g;

    系统已更改。

    SQL> select * from v$recovery_file_dest;

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

    NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

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

    /oracle/flash_recovery_area 2.1475E+10 2264587776 0 38

      这时再查看日志的状态,发现REDO LOG处于正常的归档状态。

    SQL> select * from v$log;

    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME

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

    1 1 101 52428800 1 YES ACTIVE 3621973 24-7月 -06

    2 1 102 52428800 1 NO CURRENT 3650399 25-7月 -06

    3 1 100 52428800 1 YES INACTIVE 3611932 24-7月 -06

    SQL> select * from v$flash_recovery_area_usage;

    FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

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

    CONTROLFILE 0 0 0

    ONLINELOG 0 0 0

    ARCHIVELOG 7.6 0 43

    BACKUPPIECE 4.21 0 2

    IMAGECOPY 0 0 0

    FLASHBACKLOG 0 0 0

    已选择6行。

    SQL>

      5、小结

      造成本次故障的原因由两方面同时发生所造成的:

      ·其一是Flash_Recovery_Area空间缺省安装时比较小,只有2GB,容易用完;

      ·其二是由于采用归档方式通过Veritas备份,由于备份软件没有运行,造成归档日志没有及时删除。

      从本次故障解决处理中,我们可以得出经验教训:

      ·Oracle 10g数据库物理空间管理方式与以前Oracle发生了变化,对归档日志所在的Flash_Recovery_Area空间进行了另外限制;
     
      ·对数据库系统管理员要对Oracle数据库归档日志、备份软件运行状况定期检查,提前发现、处理可能发生的故障。

     
     
    正好以前研究过

    SQL> create table test.test as select * from all_objects ;
    Table created.
    SQL> insert into test.test select * from test.test ;
    49840 rows created.
    SQL> /      
    99680 rows created.
    SQL> /
    199360 rows created.
    SQL> commit;
    Commit complete.
    SQL> drop table test.test ;
    Table dropped.
    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE                   0                         0               0
    ONLINELOG                     0                         0               0
    ARCHIVELOG                   .1                         0               1
    BACKUPPIECE                   0                         0               0
    IMAGECOPY                     0                         0               0
    FLASHBACKLOG                  0                         0               0
    6 rows selected.
    SQL> alter system switch logfile ;  
    System altered.
    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE                   0                         0               0
    ONLINELOG                     0                         0               0
    ARCHIVELOG                  2.3                         0               2
    BACKUPPIECE                   0                         0               0
    IMAGECOPY                     0                         0               0
    FLASHBACKLOG                  0                         0               0
    6 rows selected.
    SQL> select owner,object_name,ts_name from dba_recyclebin order by droptime ;
    OWNER                          OBJECT_NAME
    ------------------------------ ------------------------------
    TS_NAME
    ------------------------------
    TEST                           BIN$MJyuu8o5ZxvgQAB/AQAOxA==$0
    TEST
    TEST                           BIN$MJyuu8o6ZxvgQAB/AQAOxA==$0
    TEST
    TEST                           BIN$MJyuu8pAZxvgQAB/AQAOxA==$0
    TEST

    SQL> exit
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    [oracle@test02 u02]$
    [oracle@test02 u02]$ rman target sys/oracle@db002
    Recovery Manager: Release 10.2.0.1.0 - Production on Thu May 17 05:48:31 2007
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    connected to target database: DB002 (DBID=908667212)
    RMAN> backup database ;
    Starting backup at 17-MAY-07
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=133 devtype=DISK
    channel ORA_DISK_1: starting full datafile backupset
    channel ORA_DISK_1: specifying datafile(s) in backupset
    input datafile fno=00001 name=/opt/oracle/oradata/db002/system01.dbf
    input datafile fno=00003 name=/opt/oracle/oradata/db002/sysaux01.dbf
    input datafile fno=00002 name=/opt/oracle/oradata/db002/undotbs01.dbf
    input datafile fno=00005 name=/opt/oracle/oradata/db002/example01.dbf
    input datafile fno=00006 name=/opt/oracle/oradata/db002/test01.dbf
    input datafile fno=00004 name=/opt/oracle/oradata/db002/users01.dbf
    channel ORA_DISK_1: starting piece 1 at 17-MAY-07
    channel ORA_DISK_1: finished piece 1 at 17-MAY-07
    piece handle=/u02/recovery/DB002/backupset/2007_05_17/o1_mf_nnndf_TAG20070517T054843_34pz1wmp_.bkp tag=TAG20070517T054843 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:01:48
    channel ORA_DISK_1: starting full datafile backupset
    channel ORA_DISK_1: specifying datafile(s) in backupset
    including current control file in backupset
    including current SPFILE in backupset
    channel ORA_DISK_1: starting piece 1 at 17-MAY-07
    channel ORA_DISK_1: finished piece 1 at 17-MAY-07
    piece handle=/u02/recovery/DB002/backupset/2007_05_17/o1_mf_ncsnf_TAG20070517T054843_34pz5cbx_.bkp tag=TAG20070517T054843 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
    Finished backup at 17-MAY-07
    RMAN> exit

    Recovery Manager complete.
    [oracle@test02 u02]$
    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE                   0                         0               0
    ONLINELOG                     0                         0               0
    ARCHIVELOG                  2.3                       2.3               2
    BACKUPPIECE                  43                         0               2
    IMAGECOPY                     0                         0               0
    FLASHBACKLOG                  0                         0               0
    6 rows selected.
    SQL>
    backup use rman again ;
    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE                   0                         0               0
    ONLINELOG                     0                         0               0
    ARCHIVELOG                  2.3                       2.3               2
    BACKUPPIECE                  86                        43               4
    IMAGECOPY                     0                         0               0
    FLASHBACKLOG                  0                         0               0
    6 rows selected.
    SQL>

    SQL> SELECT substr(name, 1, 30) name, space_limit AS quota,space_used AS used,
    space_reclaimable AS reclaimable,number_of_files AS files
    FROM  v$recovery_file_dest ;
      2    3  
    NAME                                QUOTA       USED RECLAIMABLE      FILES
    ------------------------------ ---------- ---------- ----------- ----------
    /u02/recovery                  2147483648 1896140288   972746240          6
    SQL>
    [oracle@test02 u02]$ rman target sys/oracle@db002
    Recovery Manager: Release 10.2.0.1.0 - Production on Thu May 17 06:06:45 2007
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    connected to target database: DB002 (DBID=908667212)
    RMAN> crosscheck archivelog all;
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=153 devtype=DISK
    ..............................................
    archive log filename=/u02/recovery/DB002/archivelog/2007_05_17/o1_mf_1_27_34px7p7g_.arc recid=26 stamp=622790264
    Crosschecked 26 objects

    RMAN>
    RMAN> delete expired archivelog all;
    released channel: ORA_DISK_1
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=153 devtype=DISK
    specification does not match any archive log in the recovery catalog
    RMAN> delete noprompt obsolete ;
    delete expired backup;
    RMAN retention policy will be applied to the command
    RMAN retention policy is set to redundancy 1
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=159 devtype=DISK
    RMAN> exit

    Recovery Manager complete.
    [oracle@test02 u02]$
    SQL> SELECT substr(name, 1, 30) name, space_limit AS quota,space_used AS used,
    space_reclaimable AS reclaimable,number_of_files AS files
    FROM  v$recovery_file_dest ;  2    3  
    NAME                                QUOTA       USED RECLAIMABLE      FILES
    ------------------------------ ---------- ---------- ----------- ----------
    /u02/recovery                  2147483648  923394048           0          2
    SQL>
    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE                   0                         0               0
    ONLINELOG                     0                         0               0
    ARCHIVELOG                    0                         0               0
    BACKUPPIECE                  43                         0               2
    IMAGECOPY                     0                         0               0
    FLASHBACKLOG                  0                         0               0
    6 rows selected.
    SQL>


     

  • EMAIL

    2009-05-08 10:10:03

    接收邮件自动保存至本地接收数据夹  
      Outlook→工具→规则和通知→电子邮件规则→新建规则→由空白开始→下一步→步骤1中   不选择→下一步→跳出来对话框选择是→步骤1中勾选将它移动到指定活页夹中→步骤2中指定活页夹(事先建立好的个人数据夹,用来存放接收到的邮件)→完成  
       
      发送邮件自动保存至本地发送数据夹  
      Outlook→工具→规则和通知→电子邮件规则→新建规则→由空白开始→下一步→步骤1中勾选   发件人为   个人或通讯组列表→   步骤2种   点击   通讯簿选取人员账号(输入自己的邮件名称)→下一步→步骤1中   勾选   将它移动到指定活页夹中→步骤2中   点击指定的活页夹(事先建立好的个人数据夹,用来存放已发邮件)→完成
  • Ora-12638解决之道

    2009-04-27 18:16:50

       
      Ora-12638   error:  
      错误解决   修改如下目录文件内容  
      $oracle_home$\network\admin\sqlnet.ora  
      把下面一行注释掉(在前面加#号):  
      SQLNET.AUTHENTICATION_SERVICES=   (NTS)  
      然后重新启动OracleService(name)服务。其中name为你的instance_name.  
  • Oracle 学习笔记

    2009-04-23 16:01:17

    一、主键和外键的关系
    表A主键为name,表B外键为name。
    在表A中为主键,在表B中为外键,那么A表是主表,B表是从表。
    对表B的name字段进行修改或者添加记录,必须要参考表A的name列。假如插入jim值到表B的name字段,而表A的name列没有这个值,那么就会插入失败,这就是外键约束。如果表B的name列允许为空,那么可以插入空记录。因为可能这一行记录可以不关联表A的记录。
    外键的值可以相同,因为从表有些行的记录可能都要关联父表某行的记录。

    二、oracle远程连接
    客户端
    命令: sqlplus username/password@HOST:port/SERVICE_NAME [as sysdba]
    用sysdba权限用户远程连就必须要加上as sysdba选项。

    服务端
    1.打开监听,命令为lsnrctl start.
    2.查看$ORACLE_HOME/network/admin/下的sqlnet.ora和tnsname.ora
       [oracle@oracle admin]$ cat sqlnet.ora
    # sqlnet.ora Network Configuration File: /xinying/oracle/app/oracle/product/11.1.0/db_1/network/admin/sqlnet.ora
    # Generated by Oracle configuration tools.

    NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
    SQLNET.AUTHENTICATION_SERVICES = (ALL) #用户认证模式,操作系统认证和密码文件认证混合模式。

    [oracle@oracle admin]$ cat tnsnames.ora
    # tnsnames.ora Network Configuration File: /xinying/oracle/app/oracle/product/11.1.0/db_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.
    #客户端的命令选项根据以下的参数来设置
    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.252)(PORT = 1521))#网络监听服务主机端口。
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)#网络服务名
        )
      )



    2.设置初始化参数 REMOTE_LOGIN_PASSWORDFILE :
        在 Oracle 数据库实例的初始化参数文件中,此参数控制着密码文件的使用及其状态。它可以有以下几个选项:

    NONE :指示 Oracle 系统不使用密码文件,特权用户的登录通过操作系统进行身份验证;

    EXCLUSIVE :指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除 INTERNAL / SYS 以外的用户信息,即允许将系统权限 SYSOPER / SYSDBA 授予除 INTERNAL / SYS 以外的其他用户。

    SHARED :指示可有多个数据库实例可以使用此密码文件。在此设置下只有 INTERNAL / SYS 帐号能被密码文件识别,即使文件中存有其他用户的信息,也不允许他们以 SYSOPER / SYSDBA 的权限登录。此设置为缺省值。

    SQL> show parameter remote_login_passwordfile

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ----------
    remote_login_passwordfile            string      EXCLUSIVE

    3.创建密码文件,文件路径在$ORACLE_HOME/dbs/,文件名为orapwORACLE_SID.
      命令:[oracle@oracle admin]$ orapwd --help
    Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

      where
        file - name of password file (required), 创建文件的路径
        password - password for SYS (optional),  密码
        entries - maximum number of distinct DBA (required),允许多少人远程访问
        force - whether to overwrite existing file (optional), 覆盖当前的密码文件
        ignorecase - passwords are case-insensitive (optional),
        nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).

      There must be no spaces around the equal-to (=) character.

    orapwd file="/xinying/oracle/app/oracle/product/11.1.0/db_1/dbs/orapwORACLE_SID" password=test entries=10 force=y

    4.查看sysdba权限远程连接的用户
    SQL> select * from v$pwfile_users;

    USERNAME                       SYSDB SYSOP SYSAS
    ------------------------------ ----- ----- -----
    SYS                            TRUE  TRUE  FALSE


    三、修改oracle本地监听端口
    编辑$ORACLE_HOME/network/admin/下的listener.ora。

  • Oracle的同义词(synonyms)总结

    2009-04-22 15:58:58

     oracle的同义词总结:

      从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。

      1.创建同义词语句:

      create public synonym table_name for user.table_name;


      其中第一个user_table和第二个user_table可以不一样。

      此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;

      当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

      2.删除同义词:

      drop public synonym table_name;


      3.查看所有同义词:

     

      select * from dba_synonyms


      同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。

     

  • 删除Oracle数据库10g垃圾表的最新方法

    2009-04-21 18:02:36

    经常使用oracle10g,我们可以发现以前删除的表在数据库中出现了特别多的垃圾表,如下例:

    BINjR8PK5HhrrgMK8KmgQ9nw==


    这一类的表通常无法删除,并且无法用"delete"删除,这种情况的出现,


    一般不会影响正常的使用,但是有遇到以下几种情况时则必须删掉它。


    ◆1.这些表占用空间


    ◆2.如果使用Middlegen-Hibernate-r5的朋友会发现一些问题,不你象以前用oracle9时那么顺的生成hibernate配置文件,原因就在这里将它删除就没有问题了.

     


    BINjR8PK5HhrrgMK8KmgQ9nw==


    这一类的表是是10g 的新特性。


    Drop Table 后,没有真正的删除表,而是在“垃圾站”中了。可以通过下面看到。


    SQL> SHOW RECYCLEBIN


    如果要彻底删除,可以使用:


    SQL> PURGE TABLE "BINjR8PK5HhrrgMK8KmgQ9nw==";


    删除这一个或删除全部。


    SQL> PURGE RECYCLEBIN;

     

  • install oracle 10g2 client under Vista environment

    2009-04-03 10:57:56

    i setup a vista environment with oracle 10gr2 client, it made me terribly defeated a whole day. in the end i understood that install oracle 10g2 client under Vista environment must be close vista UAC, than installed by default mode.

    and the following is another ways to install seccessfully:

    首先、确保你有该文件夹的完全控制权。(修改:文件夹点右键 属性-〉安全-〉高级-〉所有者-〉改为自己。接着编辑自己的权限为完全控制)
    其次、将setup.exe的兼容性改为windows server 2003(server pack 1)。就是右键属性-〉兼容性-〉兼容模式中。
    接着、右键,以管理员身份运行。
    最后、会出现兼容性问题的提示框。选择运行程序

  • 如何关闭Windows Vista系统中的UAC

    2009-04-03 10:40:44

     

    众所周知,微软在Windows Vista中引入名为UAC (User Account Control : 用户帐户近控制)的新特性以提高系统的安全性。UAC通过强制所有授权用户在标准用户权限下运行,限制权限,来降低恶意软件对系统的危害。

    但是,UAC在提高系统安全性的同时,相应地也使用户的操作不可避免地变得繁琐,在有些情况下这种繁琐甚至到了让人难以忍受的地步,许多人被没完没了弹出的UAC提示窗口搞得头大。那么,有没有办法来避免这种繁琐呢?

    要实现这一点,有两个途径,一是直接赋予操作用户系统管理员权限,这在绕开UAC开启超级管理员的方法已做过介绍;二是想办法关闭Windows Vista中的UAC特性,回到传统的Windows 2000 /Xp /2003下用户权限的管理模式,下面介绍关闭UAC的几种实现方法。

    强烈提示:除非您对Windows Vista中的系统进程与权限管理十分熟悉,确保这样不会造成系统安全性的大幅下降,不然,不建议关闭UAC功能,毕竟,与繁琐相比,系统的安全应该是更重要的。

    使用MSCONFIG关闭UAC

    依次点击“开始 > 运行”,输入MSCONFIG,打开系统配置实用程序

    选择Tools(工具)选项卡,向下滚动找到”Disable UAP” (目前的Windows Vista Beta 2中如此,至于以后的测试及正式版本中是否仍存在该项则不得而知),选中该行。

    点击“Launch”按钮

    一个CMD窗口将会打开,当运行完毕后,将其关闭。

    退出MSCONFIG,重启系统即可。

    如果您以后想要重新开启UAC功能,只需选中”Enable UAP”行,同样进行操作一次即可开启。

    使用Regedit关闭UAC

    注册表是Windows系统的核心,其中包括与系统有关的各项设置,当然也可以通过使用Regedit编辑注册表来达到关闭UAC的目的。

    注意: 在对注册表进行操作之前,应先备份注册表,将要修改的注册表分枝导出到文本文件或以.reg为扩展名的注册表文件中,以防因操作失误导致系统不可用。

    打开注册表编辑器RegEdit。

    在注册表中找到如下的registry key:

    HKEY_LOCAL_MACHINE \Software \Microsoft \Windows \CurrentVersion \Policies \System

    将名为EnableLUA的注册表项之值改为0

    关闭注册表编辑器,重启系统以应用更改。

    如果需要重新开启UAC功能,只需将该项值改为“1”即可。

    使用组策略关闭UAC

    要关闭UAC,同样也可以通过设置相应的组策略实现。

    如果您的Windows Vista系统没有连入基于活动目录(Active Directory)的本地网络,可使用组策略编辑器,具体步骤为:

    开始(Start) > Run (运行) > gpedit.msc

    如果您的Windows Vista系统连入了基于活动目录(Active Directory)的本地网络,则需要使用组策略管理控制台,具体步骤为:

    开始(Start) > Run (运行) > gpmc.msc

    在组策略管理控制台窗口中,找到您的Windows Vista系统所属的域或OU,编辑其属性。

    依次打开 Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.

    在右方面板中找到User Access Control policies ,需要对如下各项策略加以设定。

    当然,修改完成后也需要重启系统以应用更改。

    使用控制面板关闭UAC

    打开控制面板

    在“User Account and Family settings(用户帐户与家庭设置)”中点击”Add or remove user account”

    选中某一个用户帐户,如Guest。

    在该用户帐户的属性页中,点击”Go to the main User Account page”链接。

    在”Make changes to your user account” 页中,点击”Change security settings” 链接,以更改安全设置

    在”Turn on User Account Control (UAC) to make your computer more secure”页中,去除”Use User Account Control (UAC) to help protect your computer”项的选择,然后按“Ok”按钮。

    同样地,您需要重新启动系统。

    要重新启动UAC功能,同样进行此过程,选中”Use User Account Control (UAC) to help protect your computer”项并重启系统即可。

  • ORA-28547的解决之道

    2009-03-25 16:27:16

    ORA-28547的解决之道

    1. 修改oracle的网络配置文件,具体做法是:在oracle安装目录下搜索sqlnet.ora文件,一般在$\NETWORK\ADMIN目录下,
    用记事本打开把文件中的一行:
    SQLNET_AUTHENTICATION_SERVICES= (NTS)
    修改为:
    SQLNET_AUTHENTICATION_SERVICES= (NONE)

    2. 同时修改监听器配置文件,具体做法是:  在oracle安装目录下搜索listener.ora文件,一般在$\NETWORK\ADMIN目录下,把主机名用ip地址代替,例如(ADDRESS = (PROTOCOL = TCP)(HOST = HBONLINE1)(PORT = 1523))改为(ADDRESS = (PROTOCOL = TCP)(HOST = 168.168.168.42)(PORT = 1523))。
  • ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务_焦头烂额一整天

    2009-03-24 20:16:47

    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 问题解决
     

        近日在配置Oracle 10G的流复制环境时,遇到一个问题,关闭数据库(shutdown immediate)后,通过SQL Plus连接数据库:conn sys/his@orc0 as sysdba,出现如下错误:

        ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

    通过重启服务的方式启动数据库,再次连接却能成功登录,也就是说在关闭数据库状态下无法连接服务器。

        开始以为是系统环境变量Oracle_SID的配置问题,因为机器有多个实例,一阵折腾后还是不能连接。后来查资料得知:

        Oracle9i以后,后台进程PMON自动在监听器中注册在系统参数SERVICE_NAMES中定义的服务名,SERVICE_NAMES默认为DB_NAME+DOMAIN_NAME。监听配置文件listener.ora中可以不必指定监听的服务名。但是,当数据库处于关闭状态下PMON进程没有启动,也就不会自动注册监听的实例名,所以使用sqlplus sys/his@orc0 as sysdba 会出现ORA-12514错误。

    如果在listener.ora文件中指定监听的实例名,则即使数据库处于关闭状态,仍然可以连接。

    listener.ora

    SID_LIST_LISTENER =

      (SID_LIST =

        (SID_DESC =

          (SID_NAME = PLSExtProc)

          (ORACLE_HOME = G:\oracle\product\10.2.0\db_1)

          (PROGRAM = extproc)

        )

       (SID_DESC =

        (GLOBAL_DBNAME = ORCL)

        (ORACLE_HOME = G:\oracle\product\10.2.0\db_1)  

        (SID_NAME = ORCL)

        )

      )

    LISTENER =

      (DESCRIPTION_LIST =

        (DESCRIPTION =

          (ADDRESS = (PROTOCOL = TCP)(HOST = zyk)(PORT = 1521))

        )

      )

     

    以上粗体部件为增加的内容,修改后重启监听服务后即可。

    附:通过在lsnrctl中输入set display verbose,然后再通过命令service查看,服务状态为READY表示PMON自动注册的服务名,而UNKNOWN则表示该服务是手工在LISTENER.ORA中配置的数据库服务。

  • Oracle常用命令集

    2009-03-10 16:18:00

    第一章:日志管理

    1.forcing log switches
    sql> alter system switch logfile;

    2.forcing checkpoints
    sql> alter system checkpoint;

    3.adding online redo log groups
    sql> alter database add logfile [group 4]
    sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m;

    4.adding online redo log members
    sql> alter database add logfile member
    sql> '/disk3/log1b.rdo' to group 1,
    sql> '/disk4/log2b.rdo' to group 2;

    5.changes the name of the online redo logfile
    sql> alter database rename file 'c:/oracle/oradata/oradb/redo01.log'
    sql> to 'c:/oracle/oradata/redo01.log';

    6.drop online redo log groups
    sql> alter database drop logfile group 3;

    7.drop online redo log members
    sql> alter database drop logfile member 'c:/oracle/oradata/redo01.log';

    8.clearing online redo log files
    sql> alter database clear [unarchived] logfile 'c:/oracle/log2a.rdo';

    9.using logminer analyzing redo logfiles

    a. in the init.ora specify utl_file_dir = ' '
    b. sql> execute dbms_logmnr_d.build('oradb.ora','c:\oracle\oradb\log');
    c. sql> execute dbms_logmnr_add_logfile('c:\oracle\oradata\oradb\redo01.log',
    sql> dbms_logmnr.new);
    d. sql> execute dbms_logmnr.add_logfile('c:\oracle\oradata\oradb\redo02.log',
    sql> dbms_logmnr.addfile);
    e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>'c:\oracle\oradb\log\oradb.ora');
    f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters
    sql> v$logmnr_logs);
    g. sql> execute dbms_logmnr.end_logmnr;

    第二章:表空间管理
    1.create tablespaces
    sql> create tablespace tablespace_name datafile 'c:\oracle\oradata\file1.dbf' size 100m,
    sql> 'c:\oracle\oradata\file2.dbf' size 100m minimum extent 550k [logging/nologging]
    sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)
    sql> [online/offline] [permanent/temporary] [extent_management_clause]

    2.locally managed tablespace
    sql> create tablespace user_data datafile 'c:\oracle\oradata\user_data01.dbf'
    sql> size 500m extent management local uniform. size 10m;

    3.temporary tablespace
    sql> create temporary tablespace temp tempfile 'c:\oracle\oradata\temp01.dbf'
    sql> size 500m extent management local uniform. size 10m;

    4.change the storage setting
    sql> alter tablespace app_data minimum extent 2m;
    sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);

    5.taking tablespace offline or online
    sql> alter tablespace app_data offline;
    sql> alter tablespace app_data online;

    6.read_only tablespace
    sql> alter tablespace app_data read only|write;

    7.droping tablespace
    sql> drop tablespace app_data including contents;

    8.enableing automatic extension of data files
    sql> alter tablespace app_data add datafile 'c:\oracle\oradata\app_data01.dbf' size 200m
    sql> autoextend on next 10m maxsize 500m;

    9.change the size fo data files manually
    sql> alter database datafile 'c:\oracle\oradata\app_data.dbf' resize 200m;

    10.Moving data files: alter tablespace
    sql> alter tablespace app_data rename datafile 'c:\oracle\oradata\app_data.dbf'
    sql> to 'c:\oracle\app_data.dbf';

    11.moving data files:alter database
    sql> alter database rename file 'c:\oracle\oradata\app_data.dbf'
    sql> to 'c:\oracle\app_data.dbf';

    第三章:表

    1.create a table
    sql> create table table_name (column datatype,column datatype]....)
    sql> tablespace tablespace_name [pctfree integer] [pctused integer]
    sql> [initrans integer] [maxtrans integer]
    sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)
    sql> [logging|nologging] [cache|nocache]

    2.copy an existing table
    sql> create table table_name [logging|nologging] as subquery

    3.create temporary table
    sql> create global temporary table xay_temp as select * from xay;
    on commit preserve rows/on commit delete rows

    4.pctfree = (average row size - initial row size) *100 /average row size
    pctused = 100-pctfree- (average row size*100/available data space)

    5.change storage and block utilization parameter
    sql> alter table table_name pctfree=30 pctused=50 storage(next 500k
    sql> minextents 2 maxextents 100);

    6.manually allocating extents
    sql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');

    7.move tablespace
    sql> alter table employee move tablespace users;

    8.deallocate of unused space
    sql> alter table table_name deallocate unused [keep integer]

    9.truncate a table
    sql> truncate table table_name;

    10.drop a table
    sql> drop table table_name [cascade constraints];

    11.drop a column
    sql> alter table table_name drop column comments cascade constraints checkpoint 1000;
    alter table table_name drop columns continue;

    12.mark a column as unused
    sql> alter table table_name set unused column comments cascade constraints;
    alter table table_name drop unused columns checkpoint 1000;
    alter table orders drop columns continue checkpoint 1000
    data_dictionary : dba_unused_col_tabs

     

    第四章:索引

    1.creating function-based indexes
    sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);

    2.create a B-tree index
    sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace
    sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
    sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0
    sql> maxextents 50);

    3.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows

    4.creating reverse key indexes
    sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k
    sql> next 200k pctincrease 0 maxextents 50) tablespace indx;

    5.create bitmap index
    sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k
    sql> pctincrease 0 maxextents 50) tablespace indx;

    6.change storage parameter of index
    sql> alter index xay_id storage (next 400k maxextents 100);

    7.allocating index space
    sql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');

    8.alter index xay_id deallocate unused;

    第五章:约束

    1.define constraints as immediate or deferred
    sql> alter session set constraint[s] = immediate/deferred/default;
    set constraint[s] constraint_name/all immediate/deferred;

    2. sql> drop table table_name cascade constraints
    sql> drop tablespace tablespace_name including contents cascade constraints

    3. define constraints while create a table
    sql> create table xay(id number(7) constraint xay_id primary key deferrable
    sql> using index storage(initial 100k next 100k) tablespace indx);
    primary key/unique/references table(column)/check

    4.enable constraints
    sql> alter table xay enable novalidate constraint xay_id;

    5.enable constraints
    sql> alter table xay enable validate constraint xay_id;

    第六章:LOAD数据

    1.loading data using direct_load insert
    sql> insert /*+append */ into emp nologging
    sql> select * from emp_old;

    2.parallel direct-load insert
    sql> alter session enable parallel dml;
    sql> insert /*+parallel(emp,2) */ into emp nologging
    sql> select * from emp_old;

    3.using sql*loader
    sql> sqlldr scott/tiger \
    sql> control = ulcase6.ctl \
    sql> log = ulcase6.log direct=true

    第七章:reorganizing data

    1.using expoty
    $exp scott/tiger tables(dept,emp) file=c:\emp.dmp log=exp.log compress=n direct=y

    2.using import
    $imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y

    3.transporting a tablespace
    sql>alter tablespace sales_ts read only;
    $exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts
    triggers=n constraints=n
    $copy datafile
    $imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2
    /sles02.dbf)
    sql> alter tablespace sales_ts read write;

    4.checking transport set
    sql> DBMS_tts.transport_set_check(ts_list =>'sales_ts' ..,incl_constraints=>true);
    在表transport_set_violations 中查看
    sql> dbms_tts.isselfcontained 为true 是, 表示自包含

    第八章: managing password security and resources

    1.controlling account lock and password
    sql> alter user juncky identified by oracle account unlock;

    2.user_provided password function
    sql> function_name(userid in varchar2(30),password in varchar2(30),
    old_password in varchar2(30)) return boolean

    3.create a profile : password setting
    sql> create profile grace_5 limit failed_login_attempts 3
    sql> password_lock_time unlimited password_life_time 30
    sql>password_reuse_time 30 password_verify_function verify_function
    sql> password_grace_time 5;

    4.altering a profile
    sql> alter profile default failed_login_attempts 3
    sql> password_life_time 60 password_grace_time 10;

    5.drop a profile
    sql> drop profile grace_5 [cascade];

    6.create a profile : resource limit
    sql> create profile developer_prof limit sessions_per_user 2
    sql> cpu_per_session 10000 idle_time 60 connect_time 480;

    7. view => resource_cost : alter resource cost
    dba_Users,dba_profiles

    8. enable resource limits
    sql> alter system set resource_limit=true;

    第九章:Managing users

    1.create a user: database authentication
    sql> create user juncky identified by oracle default tablespace users
    sql> temporary tablespace temp quota 10m on data password expire
    sql> [account lock|unlock] [profile profilename|default];

    2.change user quota on tablespace
    sql> alter user juncky quota 0 on users;

    3.drop a user
    sql> drop user juncky [cascade];

    4. monitor user
    view: dba_users , dba_ts_quotas

     

    第十章:managing privileges

    1.system privileges: view => system_privilege_map ,dba_sys_privs,session_privs

    2.grant system privilege
    sql> grant create session,create table to managers;
    sql> grant create session to scott with admin option;
    with admin option can grant or revoke privilege from any user or role;

    3.sysdba and sysoper privileges:
    sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,
    alter tablespace begin/end backup,recover database
    alter database archivelog,restricted session
    sysdba: sysoper privileges with admin option,create database,recover database until

    4.password file members: view:=> v$pwfile_users

    5.O7_dictionary_accessibility =true restriction access to view or tables in other schema

    6.revoke system privilege
    sql> revoke create table from karen;
    sql> revoke create session from scott;

    7.grant object privilege
    sql> grant execute on dbms_pipe to public;
    sql> grant update(first_name,salary) on employee to karen with grant option;

    8.display object privilege : view => dba_tab_privs, dba_col_privs

    9.revoke object privilege
    sql> revoke execute on dbms_pipe from scott [cascade constraints];

    10.audit record view :=> sys.aud$

    11. protecting the audit trail
    sql> audit delete on sys.aud$ by access;

    12.statement auditing
    sql> audit user;

    13.privilege auditing
    sql> audit select any table by summit by access;

    14.schema object auditing
    sql> audit lock on summit.employee by access whenever successful;

    15.view audit option : view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba_obj_audit_opts

    16.view audit result: view=> dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_session,dba_audit_statement

    第十一章: manager role

    1.create roles
    sql> create role sales_clerk;
    sql> create role hr_clerk identified by bonus;
    sql> create role hr_manager identified externally;

    2.modify role
    sql> alter role sales_clerk identified by commission;
    sql> alter role hr_clerk identified externally;
    sql> alter role hr_manager not identified;

    3.assigning roles
    sql> grant sales_clerk to scott;
    sql> grant hr_clerk to hr_manager;
    sql> grant hr_manager to scott with admin option;

    4.establish default role
    sql> alter user scott default role hr_clerk,sales_clerk;
    sql> alter user scott default role all;
    sql> alter user scott default role all except hr_clerk;
    sql> alter user scott default role none;

    5.enable and disable roles
    sql> set role hr_clerk;
    sql> set role sales_clerk identified by commission;
    sql> set role all except sales_clerk;
    sql> set role none;

    6.remove role from user
    sql> revoke sales_clerk from scott;
    sql> revoke hr_manager from public;

    7.remove role
    sql> drop role hr_manager;

    8.display role information
    view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sys_privs,role_tab_privs,session_roles

    第十二章: BACKUP and RECOVERY

    1. v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat

    2. Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size

    3. Monitoring Parallel Rollback
    > v$fast_start_servers , v$fast_start_transactions

    4.perform. a closed database backup (noarchivelog)
    > shutdown immediate
    > cp files /backup/
    > startup

    5.restore to a different location
    > connect system/manager as sysdba
    > startup mount
    > alter database rename file '/disk1/../user.dbf' to '/disk2/../user.dbf';
    > alter database open;

    6.recover syntax
    --recover a mounted database
    >recover database;
    >recover datafile '/disk1/data/df2.dbf';
    >alter database recover database;
    --recover an opened database
    >recover tablespace user_data;
    >recover datafile 2;
    >alter database recover datafile 2;

    7.how to apply redo log files automatically
    >set autorecovery on
    >recover automatic datafile 4;

    8.complete recovery:
    --method 1(mounted databae)
    >copy c:\backup\user.dbf c:\oradata\user.dbf
    >startup mount
    >recover datafile 'c:\oradata\user.dbf;
    >alter database open;
    --method 2(opened database,initially opened,not system or rollback datafile)
    >copy c:\backup\user.dbf c:\oradata\user.dbf (alter tablespace offline)
    >recover datafile 'c:\oradata\user.dbf' or
    >recover tablespace user_data;
    >alter database datafile 'c:\oradata\user.dbf' online or
    >alter tablespace user_data online;
    --method 3(opened database,initially closed not system or rollback datafile)
    >startup mount
    >alter database datafile 'c:\oradata\user.dbf' offline;
    >alter database open
    >copy c:\backup\user.dbf d:\oradata\user.dbf
    >alter database rename file 'c:\oradata\user.dbf' to 'd:\oradata\user.dbf'
    >recover datafile 'e:\oradata\user.dbf' or recover tablespace user_data;
    >alter tablespace user_data online;
    --method 4(loss of data file with no backup and have all archive log)
    >alter tablespace user_data offline immediate;
    >alter database create datafile 'd:\oradata\user.dbf' as 'c:\oradata\user.dbf''
    >recover tablespace user_data;
    >alter tablespace user_data online
    5.perform. an open database backup
    > alter tablespace user_data begin backup;
    > copy files /backup/
    > alter database datafile '/c:/../data.dbf' end backup;
    > alter system switch logfile;
    6.backup a control file
    > alter database backup controlfile to 'control1.bkp';
    > alter database backup controlfile to trace;
    7.recovery (noarchivelog mode)
    > shutdown abort
    > cp files
    > startup
    8.recovery of file in backup mode
    >alter database datafile 2 end backup;

    9.clearing redo log file
    >alter database clear unarchived logfile group 1;
    >alter database clear unarchived logfile group 1 unrecoverable datafile;

    10.redo log recovery
    >alter database add logfile group 3 'c:\oradata\redo03.log' size 1000k;
    >alter database drop logfile group 1;
    >alter database open;
    or >cp c:\oradata\redo02.log' c:\oradata\redo01.log
    >alter database clear logfile 'c:\oradata\log01.log';

  • 在oracle数据库中,我们如何增加表空间的大小?

    2009-03-09 16:55:16



    在开发oracle数据库中,我们有两种方法增加表空间的大小:

      1.增加额外的数据文件到表空间中

      例如:alter tablespace users add datafile '/u01/oradata/orcl/users02.dbf' size 25m;

      2.修改表空间当前的数据文件

      例如:alter database datafile

      '/u01/oradata/orcl/users01.dbf' resize 50m;
361/212>
Open Toolbar