开始在自己的网站上发布自己的东西了,可以好好的总结下学习的东西,也好与大家一起分享和讨论,欢迎大家提出宝贵意见

预览模式: 普通 | 列表
ORA-31600: invalid input value table for parameter OBJECT_TYPE in function GET_DDL

我们想要查看某个表或者是表空间的DDL的时候,我们就可以利用dbms_metadata.get_ddl这个包来查看。
可是很容易出现ORA-31600: invalid input value table for parameter OBJECT_TYPE in function GET_DDL的错误
在这给大家用实例的方法来解答。

首先我们先做个实验
SQL> select dbms_metadata.get_ddl('table','
table_dbms') from dual;
ERROR:
ORA-31600: invalid input value table for parameter OBJECT_TYPE in function GET_DDL
ORA-06512: at "SYS.DBMS_METADATA", line 2682
ORA-06512: at "SYS.DBMS_METADATA", line 2733
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

no rows selected

Elapsed: 00:00:00.07

SQL>
这里我们发现我们重现了这个错误,究竟是为什么呢?根据提示我们知道是由于参数的问题导致的。
我们知道我们要查的东西是没有写错的,就是改个大小写吧,我们改了我们要查的表名。结果呢?

SQL> select dbms_metadata.get_ddl('table','TABLE_DBMS') FROM DUAL;
ERROR:
ORA-31600: invalid input value table for parameter OBJECT_TYPE in function GET_DDL
ORA-06512: at "SYS.DBMS_METADATA", line 2682
ORA-06512: at "SYS.DBMS_METADATA", line 2733
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

no rows selected

Elapsed: 00:00:00.04

SQL>
结果还是不对。我们继续做实验,把TABLE改了。
SQL> select dbms_metadata.get_ddl('TABLE','table_dbms') from dual;
ERROR:
ORA-31603: object "
table_dbms" of type TABLE not found in schema "ORACTL"
ORA-06512: at "SYS.DBMS_METADATA", line 1548
ORA-06512: at "SYS.DBMS_METADATA", line 1585
ORA-06512: at "SYS.DBMS_METADATA", line 1902
ORA-06512: at "SYS.DBMS_METADATA", line 2793
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

no rows selected

Elapsed: 00:00:00.02

SQL>
问题依旧,我们最后把所有的参数都改成了大写,现在是什么结果呢,让我们都很高兴的,我们看到了我们想要的东西了^_^
SQL> select dbms_metadata.get_ddl('TABLE','TABLE_DBMS') FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','TABLE_DBMS')
--------------------------------------------------------------------------------

  Create TABLE "ORACTL"."TABLE_DBMS"
   (    "ID" NUMBER(*,0),
        "NAME" CHAR(10)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "ORACTL_DB"

Elapsed: 00:00:00.33

SQL>
DBMS_METADATA.GET_DDL默认的是查看当前用户的信息,如果你以用户A来查看用户B的表要在dbms_metadata.get_ddl的第三个参数里加上表/表空间的属主,否则就会报ORA-31603: object "TABLE_DBMS" of type TABLE not found in schema "ORACTL"的错误。
下面的例子就是我们在SYSDBA下看用户ORACTL表TABLE_DBMS的DDL结果
SQL> conn /as sysdba
Connected.
SQL> select dbms_metadata.get_ddl('TABLE','TABLE_DBMS','ORACTL') from dual;

DBMS_METADATA.GET_DDL('TABLE','TABLE_DBMS','ORACTL')
--------------------------------------------------------------------------------

  Create TABLE "ORACTL"."TABLE_DBMS"
   (    "ID" NUMBER(*,0),
        "NAME" CHAR(10)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "ORACTL_DB"

SQL>

有的时候你会发现得到的结果明显是有问题,少了很多想要的信息,这时候就改动下你的显示长度,因为SQL * PLUS 默认的long是80。所以你要用set long 9999来设置你要显示的长度,上面的例子是set long 10000的结果,下面是set long 100 的例子。
SQL> set long 100
SQL> select dbms_metadata.get_ddl('TABLE','TABLE_DBMS','ORACTL') from dual;

DBMS_METADATA.GET_DDL('TABLE','TABLE_DBMS','ORACTL')
--------------------------------------------------------------------------------

  Create TABLE "ORACTL"."TABLE_DBMS"
   (    "ID" NUMBER(*,0),
        "NAME" CHAR(10)
   ) PCTFREE 10 PCTUSE

SQL>

在这总结下
1)dbms_metadata.get_ddl()包()内的参数都要大写
2)是否查的当前用户的DDL,不是要加上对象的属主信息。
3)看得到的信息是否都显示出来了?看看你的终端设置是否正确,set long 9999(随便设置他的大小,就是为了完全显示查找的结果)

Tags: ORA-31600 ORA-31603 invalid input value

分类:Oracle | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 16

TNS-12541: TNS:no listener

TNS-12541: TNS:no listener

Envoriment: Linux AS4 oracle 10.2.0.1 (rac1, standby1)
Today I want to through my test program to link rac1 on standby1 by oracle client, it prompt
ORA-12541: TNS no listener

The offical explanation is:

ORA-12541: TNS:no listener
Cause: The connection request could not be completed because the listener is not running.
Action: Ensure that the supplied destination address matches one of the addresses used by the listener - compare the TNSNAMES.ORA entry with the appropriate LISTENER.ORA file (or TNSNAV.ORA if the connection is to go by way of an Interchange). Start the listener on the remote machine.

I think there are four possibilities for this case

查看更多...

Tags: TNS-12541 TNS:no listener

分类:Oracle | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 19

Linux Unix 屏幕记录

Linux Unix 屏幕记录

在Linux或者Unix终端下,尤其是在我们测试的时候,总是想把操作日志记录下来。
在这给大家介绍几种方法。常用的命令有screen、script、tee等等。

我实验的平台是Linux AS4、OpenBSD和Solaris,命令后的系统是说明在这个系统上是好用的。就测试了这3个系统。我想这也能够很有代表性了吧。

No.1
screen:Linux AS4
screen:screen manager with VT100/ANSI terminal emulation

查看更多...

Tags: Linux Unix 屏幕记录

分类:Liunx/Unix | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 35

今天收到了UC的ipod nano好激动啊

今天收到了5月份在UC网站的中奖奖品,呵呵,是个ipod nano ,开始说是个shuffle来,后来换成nano了,还是个4G的,开心,呵呵

分类:Life | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 41

ORA-12547:TNS:lost contact

ORA-12547: TNS:lost contact

我的环境是:
OS:RHEL4
Oralce:10.2.0.1

这个系统是使用了一段时间后停下来了,现在要用下。当我sqlplus /as sysdba 来连接数据库的时候就是出现了

ORA-12547:TNS:lost contact
可是我的lsnrctl status 还是正常的,需要的服务业都起来了。

查看更多...

Tags: ORA-12547 TNS:lost contact

分类:Oracle | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 111