Hey!! Sky!

Mar 23, 2006

关于 Oracle 的 License

    Oracle 初始参数中有 3 个关于 License 的设置:



SQL> show parameter license


NAME                                 TYPE       VALUE
------------------------------------ ---------- --------
license_max_sessions                 integer    0
license_max_users                    integer    0
license_sessions_warning             integer    0


具体的含义:
    参数名:license_max_sessions
    类别:许可限制
    说明: 指定允许同时进行的并行用户会话的最大数量。达到该限制后, 只有具有 RESTRICTED SESSION 权限的用户才能连接到服务器。所有其他用户都会收到一条警告消息, 表明已达到系统最大容量的限制。
    值范围: 0 - 会话许可的数量。
    默认值: 0


    参数名:license_max_users
    类别:许可限制
    说明:指定您可在该数据库中创建的用户的最大数量。并行会话使用许可和用户使用许可不应被同时启用。LICENSE_MAX_SESSIONS 或 LICENSE_MAX_USERS 或这两者的值应为零。
    值范围: 0 - 用户许可的数量。
    默认值: 0


    参数名:license_sessions_warning
    类别:许可限制
    说明: 指定对并行用户会话数量的警告限制。达到该限制后, 其他用户仍然可以连接, 但一条消息将被写入 ALERT 文件。具有RESTRICTED SESSION 权限的用户将收到一条警告消息, 表明系统已接近最大容量。
    值范围: 0 - LICENSE_MAX_SESSIONS
    默认值: 0
以上参数如果是 0 表示没有限制。


    除了可以查看这些初始参数之外,还可以通过视图 v$license 来观察这些参数:



SQL> select * from v$license;


SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER  USERS_MAX
------------ ---------------- ---------------- ------------------ ----------
           0                0               53                 57          0


其中:
    SESSIONS_MAX、SESSIONS_WARNING、USERS_MAX 分别对应初始参数 license_max_sessions、license_sessions_warning、license_max_users 的数值;SESSIONS_CURRENT 表示已经连接的 SESSION 数量(注:该值并不等于 v$session 中查询出来的数量,似乎并不包括 Oracle 本身连接的 SESSION,但似乎还是有点出入,具体是怎样的对应关系,我还没有搞明白),SESSIONS_HIGHWATER 表示曾经达到过的最大 SESSION 数量。


简单做一下实验:



SQL> select username,terminal,program from v$session;

USERNAME                       TERMINAL         PROGRAM
------------------------------ ---------------- ---------------
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
                               WKS05404         ORACLE.EXE
SYS                            WKS05404         sqlplus.exe


10 rows selected.

SQL> select * from v$license;


SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER  USERS_MAX
------------ ---------------- ---------------- ------------------ ----------
           0                0                2                  2          0

这里和上面的查询不知道怎么对应起来
SQL> alter system set license_max_sessions=3;


System altered.


SQL> show parameter license_max_sessions


NAME                                 TYPE       VALUE
------------------------------------ ---------- --------
license_max_sessions                 integer    3
SQL> select * from v$license;


SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER  USERS_MAX
------------ ---------------- ---------------- ------------------ ----------
           3                0                2                  2          0


接下来新开一个窗口,连接另外一个用户:



C:\Documents and Settings\chent>sqlplus /nolog


SQL*Plus: Release 9.2.0.6.0 - Production on Thu Mar 23 10:51:04 2006


Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


SQL> conn sky/forever
Connected.
SQL> select * from v$license;


SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER  USERS_MAX
------------ ---------------- ---------------- ------------------ ----------
           3                0                3                  3          0


再开一个用户试试看:



C:\Documents and Settings\chent>sqlplus /nolog


SQL*Plus: Release 9.2.0.6.0 - Production on Thu Mar 23 10:52:45 2006


Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


SQL> conn vivian/forever
ERROR:
ORA-00019: maximum number of session licenses exceeded


可以看见,提示超出限制,无法连接了,不过,具有 RESTRICTED SESSION 权限的用户是可以连接的:



SQL> conn sky/forever
Connected.
SQL> select * from v$license;


SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER  USERS_MAX
------------ ---------------- ---------------- ------------------ ----------
           3                0                4                  4          0

可以看一下 alert 文件中的记录:

Thu Mar 23 10:47:30 2006
ALTER SYSTEM SET license_max_sessions=3 SCOPE=BOTH;
Thu Mar 23 10:52:51 2006
Non-DBA logon denied; current logons equal maximum (3)
License maximum (3) exceeded, DBA logon allowed

CP 说过 License 只有法律意义,没有技术意义,不知道具体指哪个值,是买了 30 个 License 就会在 SESSIONS_MAX 中显示出来么?还是其他什么,由于版本的原因,无法验证。


参考:
http://www.itpub.net/16145,1.html
http://oracle.chinaitlab.com/install/39632.html


Send A Comment