zoukankan      html  css  js  c++  java
  • [20170728]oracle保留字.txt

    [20170728]oracle保留字.txt

    --//oracle有许多保留字,我印象最深的就是使用rman备份表空间test,test就是rman里面的保留字.
    --//还有rman也是rman里面的保留字.如果在应用中尽量规避不要使用这些保留字.

    --//探究一下,oracle内部是否也会不小心这些关键字.

    1.环境:
    SCOTT@test01p> @ ver1
    PORT_STRING                    VERSION        BANNER                                                                               CON_ID
    ------------------------------ -------------- -------------------------------------------------------------------------------- ----------
    IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

    SCOTT@test01p> @ desc v$reserved_words ;
    Name       Null?    Type
    ---------- -------- ----------------------------
    KEYWORD             VARCHAR2(30)
    LENGTH              NUMBER
    RESERVED            VARCHAR2(1)
    RES_TYPE            VARCHAR2(1)
    RES_ATTR            VARCHAR2(1)
    RES_SEMI            VARCHAR2(1)
    DUPLICATE           VARCHAR2(1)
    CON_ID              NUMBER

    SCOTT@test01p> select * from v$reserved_words where KEYWORD='TEST' or keyword='RMAN';
    KEYWORD                            LENGTH R R R R D     CON_ID
    ------------------------------ ---------- - - - - - ----------
    TEST                                    4 N N N N N          0

    2.查询看看:
    SELECT distinct owner,table_name
      FROM dba_tab_columns
     WHERE column_name IN (SELECT KEYWORD FROM v$reserved_words);

    --//输出太多,忽略.没有想到如此之多,还是我查询有问题.找其中一个视图V$RECOVER_FILE.

    SELECT  owner,table_name,column_name
      FROM dba_tab_columns
     WHERE column_name IN (SELECT KEYWORD FROM v$reserved_words) and table_name ='V_$RECOVER_FILE';

    OWNER TABLE_NAME      COLUMN_NAME
    ----- --------------- --------------------
    SYS   V_$RECOVER_FILE ONLINE
    SYS   V_$RECOVER_FILE ERROR
    SYS   V_$RECOVER_FILE TIME
    SYS   V_$RECOVER_FILE CON_ID
    --//有4个字段.

    --//官方链接:http://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_2126.htm#REFRN30204
    V$RESERVED_WORDS

    V$RESERVED_WORDS displays a list of all SQL keywords. To determine whether a particular keyword is reserved in any way,
    check the RESERVED, RES_TYPE, RES_ATTR, and RES_SEMI columns.

    Column     Datatype        Description
    KEYWORD    VARCHAR2(30)    Name of the keyword
    LENGTH     NUMBER          Length of the keyword
    RESERVED   VARCHAR2(1)     Indicates whether the keyword cannot be used as an identifier (Y) or whether the keyword is
                               not reserved (N)
    RES_TYPE   VARCHAR2(1)     Indicates whether the keyword cannot be used as a type name (Y) or whether the keyword is not
                               reserved (N)
    RES_ATTR   VARCHAR2(1)     Indicates whether the keyword cannot be used as an attribute name (Y) or whether the keyword
                               is not reserved (N)
    RES_SEMI   VARCHAR2(1)     Indicates whether the keyword is not allowed as an identifier in certain situations, such as
                               in DML (Y) or whether the keyword is not reserved (N)
    DUPLICATE  VARCHAR2(1)     Indicates whether the keyword is a duplicate of another keyword (Y) or whether the keyword is
                               not a duplicate (N)

    SELECT *
      FROM v$reserved_words
     WHERE keyword IN ('ONLINE', 'ERROR', 'TIME', 'CON_ID');

    KEYWORD LENGTH R R R R D     CON_ID
    ------- ------- - - - - - ----------
    CON_ID       6 N N N N N          0
    ERROR        5 N N N N N          0
    TIME         4 N N N N N          0
    ONLINE       6 N N N Y N          0

    SCOTT@test01p> select * from V$RECOVER_FILE;
    no rows selected

    SCOTT@test01p> select file#,ONLINE,ERROR, TIME,CON_ID from V$RECOVER_FILE;
    select file#,ONLINE,ERROR, TIME,CON_ID from V$RECOVER_FILE
                 *
    ERROR at line 1:
    ORA-00936: missing expression

    D: ools lwrap>oerr ora 00936
    00936, 00000, "missing expression"
    // *Cause:
    // *Action:

    --//出现这个提示非常具有迷惑性,不过要特别注意下面的星号的位置,指向ONLINE.
    --//规避它使用双引号,并且注意要大写:

    SCOTT@test01p> select file#,"ONLINE",ERROR, TIME,CON_ID from V$RECOVER_FILE;
    no rows selected
    --//其他字段没问题,除了ONLINE字段.

    SCOTT@test01p> select file#,"online",ERROR, TIME,CON_ID from V$RECOVER_FILE;
    select file#,"online",ERROR, TIME,CON_ID from V$RECOVER_FILE
                 *
    ERROR at line 1:
    ORA-00904: "online": invalid identifier


    SCOTT@test01p> alter database datafile 9 offline;
    Database altered.

    SCOTT@test01p> select file#,"online",ERROR, TIME,CON_ID from V$RECOVER_FILE;
    select file#,"online",ERROR, TIME,CON_ID from V$RECOVER_FILE
                 *
    ERROR at line 1:
    ORA-00904: "online": invalid identifier

    SCOTT@test01p> select file#,"ONLINE",ERROR, TIME,CON_ID from V$RECOVER_FILE;
         FILE# ONLINE  ERROR   TIME                    CON_ID
    ---------- ------- ------- ------------------- ----------
             9 OFFLINE         2017-07-27 21:01:22          3

    SCOTT@test01p> recover datafile 9;
    Media recovery complete.

    SCOTT@test01p> alter database datafile 9 online;
    Database altered.

    总之:
    --//在应用中尽量规避这些保留字,避免不必要的麻烦!!
    --//在11g下再补充一些例子:

    SCOTT@book> @ &r/ver1
    PORT_STRING                    VERSION        BANNER
    ------------------------------ -------------- --------------------------------------------------------------------------------
    x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

    SCOTT@book> alter tablespace tea rename to test;
    Tablespace altered.

    RMAN> backup tablespace test ;
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "test": expecting one of: "double-quoted-string, identifier, single-quoted-string"
    RMAN-01007: at line 1 column 19 file: standard input

    SCOTT@book> alter tablespace test rename to rman;
    Tablespace altered.

    RMAN> backup tablespace rman ;
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00558: error encountered while parsing input commands
    RMAN-01009: syntax error: found "rman": expecting one of: "double-quoted-string, identifier, single-quoted-string"
    RMAN-01007: at line 1 column 19 file: standard input

    SCOTT@book> alter tablespace rman rename to tea;
    Tablespace altered.

    RMAN> backup tablespace tea;
    Starting backup at 2017-07-28 08:42:12
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=94 device type=DISK
    allocated channel: ORA_DISK_2
    channel ORA_DISK_2: SID=106 device type=DISK
    allocated channel: ORA_DISK_3
    channel ORA_DISK_3: SID=119 device type=DISK
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    input datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbf
    channel ORA_DISK_1: starting piece 1 at 2017-07-28 08:42:14
    channel ORA_DISK_1: finished piece 1 at 2017-07-28 08:42:15
    piece handle=/u01/app/oracle/fast_recovery_area/BOOK/backupset/2017_07_28/o1_mf_nnndf_TAG20170728T084214_dqo2364j_.bkp tag=TAG20170728T084214 comment=NONE
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
    Finished backup at 2017-07-28 08:42:15
    Starting Control File and SPFILE Autobackup at 2017-07-28 08:42:15
    piece handle=/u01/app/oracle/fast_recovery_area/BOOK/autobackup/2017_07_28/o1_mf_s_950517735_dqo23786_.bkp comment=NONE
    Finished Control File and SPFILE Autobackup at 2017-07-28 08:42:16

    --//在sqlplus的命令中不是的关键字的test,rman,到了rman命令变成了关键字.

  • 相关阅读:
    8月的list
    hdu 2853
    【问题交流】JAVA 基础 switch 执行顺序的问题
    h5/css动态旋转木马源码
    javascript系列丛书之读后感
    java运行闪退,报错如下,是因为ole32.dll的问题吗?
    js
    切换为文本框编辑状态,点击空白区域保存修改
    前端工程师源码分享:html5 2d 扇子
    2017武汉马拉松4月9日开跑啦~~~
  • 原文地址:https://www.cnblogs.com/lfree/p/7273063.html
Copyright © 2011-2022 走看看