ITPub博客

首页 > 应用开发 > IT综合 > db_name和SID的长度限制

db_name和SID的长度限制

原创 IT综合 作者:warehouse 时间:2010-03-03 08:19:40 0 删除 编辑
数据库的db_name和sid是有长度限制的...[@more@]

先看一下数据字典:

SQL> desc v$database
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

DBID NUMBER
NAME VARCHAR2(9)
............................

SQL> desc v$instance
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

INSTANCE_NUMBER NUMBER
INSTANCE_NAME VARCHAR2(16)
.......................

SQL>

在讲课的时候我经常强调db_name的长度不能超过8位,小于等于9位,尽管数据字典v$database里面记录的是9位,在10g以前的版本超过8位通过dbca建库时会有错误提示,尽管10g没有了提示,不过在建库之后会截断,从而会导致网络配置等引起的一系列问题(如果sid和db_name使用的是相同的名字);提到db_name顺便也介绍下SID,sid其实也有限制,在windows下它只能是由字母和数字组成,并且字母打头,不能有任何特殊字符,包括下划线。unix/linux下有没有此限制没太注意,另外通过查看数据字典发现SID的长度应该不能超过16位,不过没有测试过...有机会留意一下就是...v$instance的instance_name真实的记录的是SID而不是instance_name。有关这些名字的区别可以参考我之前写的一篇文章:

http://www.itpub.net/viewthread.php?tid=903624&highlight=

在windows下简单的测试了一下:

在创建db是指定了全局数据库名为25个a,sid为25个b,db成功创建之后相关参数如下:

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> show parameter db_name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string aaaaaaaa
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------

--上面sid为null,可能是因为超过了16位的缘故造成的...
SQL> show parameter instance_name

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string bbbbbbbbbbbbbbbbbbbbbbbbb
SQL> select *from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------

AAAAAAAA

SQL>

而和db_name相关的名字都被截断了,只保留了8位...db目前使用一切正常,是否有问题待观查...

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1031563/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    717
  • 访问量
    5366336