专用服务器模式和共享服务模式之间的转换

专用服务器模式和共享服务模式之间的转换

SQL> startup
ORACLE
例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL>show parameter spfile
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                              string      %ORACLE_HOME%\DATABASE\SPFILE%
                                                ORACLE_SID%.ORA
SQL> show parameter shared_server
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                  integer     20
shared_server_sessions              integer     330
shared_servers                      integer     1
shared_servers=1
说明当前数据库使用共享服务器模式。
   
对于共享服务器模式,如果客户端在连接的时候tnsname.ora文件指定了
(SERVER = dedicated)的话,说明该客户端将通过专用服务器模式进行连接。如果没有指定的话,该客户端通过共享服务器进行连接。
   
对于专用服务器模式,不论客户端tnsname.ora文件中是否指定了(SERVER = dedicated),客户端都将通过专用服务器模式进行连接。可以通过下面进行验证:
一、数据库当前模式为共享服务器模式
1)修改tnsname.ora文件,去掉(SERVER =dedicated),如下:
ORA9I =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora9i)
    )
  )
2)启用另外一个SESSION进行连接
SQL> conn brio/brio@ora9i;
已连接。
3)查看brio用户是通过哪种方式进行连接
SQL> Select username,server From v$session Where username='BRIO';
USERNAME                      SERVER
------------------------------ ---------
BRIO                          NONE
4)修改tnsname.ora文件,增加(SERVER =dedicated),如下:
ORA9I =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = dedicated)
      (SERVICE_NAME = ora9i)
    )
  )
5)启用另外一个SESSION进行连接
SQL> conn brio/brio@ora9i;
已连接
6)查看brio用户是通过哪种方式进行连接
SQL> Select username,server From v$session Where username='BRIO';
USERNAME                      SERVER
------------------------------ ---------
BRIO                          DEDICATED
二、数据库当前模式为专用服务器模式
1)修改tnsname.ora文件,去掉(SERVER =dedicated),如下:
ORA9I =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora9i)
    )
  )
2)启用另外一个SESSION进行连接
SQL> conn brio/brio@ora9i;
已连接。
3)查看brio用户是通过哪种方式进行连接
SQL> Select username,server From v$session Where username='BRIO';
USERNAME                      SERVER
------------------------------ ---------
BRIO                          DEDICATED

问题1:如何从共享服务器模式转到专用服务器模式呢?
   
oracle文档上面说只要把shared_servers参数设置为0就行了,但经过测试,只是将shared_servers设置为0是不行的,还需要设置其它两个参数:max_shared_servers和dispatchers。测试过程如下:
1)只设置shared_servers=0
SQL> alter system set shared_servers=0 scope=both;
系统已更改。
SQL> startup force
ORACLE 例程已经启动。
Total System Global Area  604578584 bytes
FixedSize                  455448 bytes
VariableSize            285212672 bytes
Database Buffers         318767104 bytes
RedoBuffers                143360 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter shared_server
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                  integer     20
shared_server_sessions              integer     330
shared_servers                      integer     0
启动另外一个session:
SQL> conn brio/brio@ora9i;
已连接。
查看:
SQL> Select username,server From v$session Where username='BRIO';
USERNAME                      SERVER
------------------------------ ---------
BRIO                          NONE

查看Alert.log,发现下面的信息:
starting up 1 dispatcher(s) for network address
'(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
Warning: Shared server clients will hang because SHARED_SERVERS is 0

2)设置max_shared_servers和dispatchers
SQL> alter system set max_shared_servers=0 scope=spfile;
系统已更改。

SQL> alter system setdispatchers='';
alter system set dispatchers=''
*
第 1 行出现错误:
ORA-00101: 系统参数 DISPATCHERS 的说明无效

SQL> create pfile='d:\pfile.ora'from spfile;
文件已创建。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。

修改D:\pfile.ora文件,修改后如下:
#*.dispatchers='(PROTOCOL=TCP)'
*.shared_servers=0
*.max_shared_servers=0


SQL> startup
ORA-00124: DISPATCHERS specified without MAX_SHARED_SERVERS
注意此处要用pfile来启动数据库:
SQL> startup pfile='d:\pfile.ora';
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。
3)测试
Tnsname.ora文件:
ORA9I =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =linyuefeng)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora9i)
    )
  )
SQL> conn brio/brio@ora9i;
已连接。
SQL> Select username,server From v$session Where username='BRIO';
USERNAME                      SERVER
------------------------------ ---------
BRIO                          DEDICATED
可以见到,即使连接串中没有(SERVER = dedicated),客户端也是通过专用服务器进行连接。
问题2:如何从专用服务器模式转到共享服务器模式呢?
1) 修改pfile.ora文件,设置相关参数,如下:
*.dispatchers='(PROTOCOL=TCP)'
*.shared_servers=1
*.max_shared_servers=20
2) 使用pfile文件启动数据库
SQL> startup pfile='d:\pfile.ora';
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL> show parameter shared_servers
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                  integer     20
shared_servers                      integer     1
SQL> show parameter dis
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
disk_asynch_io                      boolean     TRUE
dispatchers                         string      (PROTOCOL=TCP)
distributed_lock_timeout            integer     60
max_dispatchers                     integer     5
mts_dispatchers                     string      (PROTOCOL=TCP)
mts_max_dispatchers                 integer     5

如果要使用SPFILE来启动数据库,创建一个新的SPFILE,:
SQL> show parameter spfile
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                              string
SQL> create spfile from pfile='d:\pfile.ora';
文件已创建。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE
例程已经启动。
数据库装载完毕。
数据库已经打开。
SQL>show parameter spfile
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                              string      %ORACLE_HOME%\DATABASE\SPFILE%
                                                ORACLE_SID%.ORA

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章