在Oracle中session和process的区别

在Oracle中session和process的区别,第1张

Oracle中session和process区别:

一个数据库的Connect可以有一个或多个session,同时connect也可以有一个或多个process。

在专业服务器连接方式中,一个session对应一个process,在共享服务器方式中,一个process可以为多个session。 

一个session也可以存在若干个process中,并行同样是一个session对应一个process,主session是coordinator session,每个parallel process同样会对应数据库里一个单独的session。 

可以从v$px_session和v$session查看。 

比如某客户端连接数据库的session和process的值: 

select  from v$session where terminal='RUIFEI';

select  from v$process 

where addr in 

(select paddr from v$session where terminal='RUIFEI');

如果是专用服务器方式连接,session和process是一样的。 

连接connects,会话sessions和进程pocesses的关系:

每个sqllogin称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,一个会话对应一个服务器进程(process),如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。 

oracle中系统process和session的关系:

在SharedServer中的Process 和Oracle 中的Session不是一一对应的,Shared Server中的Process 一个对应着Oracle 中的一个或者一个以上的Session。

数据库的session和操作系统process是对应的。

即表示一个session对应一个process,但是一个process未必对应一个session。

在安装oracle11g创建的默认数据库ORCL可以使用的,只不过需要配置监听。为ORCL这个数据库SID配置监听的方法如下:

1、利用netmgr命令来启动图形化Oracle网络管理器,Windows下启动Net Manager图形窗口如下图示:

2、输入Net服务名,如myoracle,点击下一步,进入下图示对话框:

3、选中TCP/IP(Internet协议),点击下一步,如下图示:

4、输入主机名与端口号。注意这里的主机名与端口号必须与数据库服务器端监听器配置的主机名和端口号相同。点击下一步,如下图示:

5、选 中(Oracle8i或更高版本)服务名,输入服务名。这里的服务名实际上就是数据库服务器端监听器配置中的全局数据库名,前者与后者必须相同。连接类型 通常选专用服务器,这要视数据库服务器的配置而定,如果配置的共享数据库服务器,这里的连接类型就要选共享服务器,否则建议选专用服务器(关于专用服务器 的介绍请参阅相关文档)。配置好后点击下一步,如下图示:

如果数据库服务器端相关服务启动了,可以点击测试按钮进行连接测试。Oracle默认是通过scott/tiger用户进行测试连接,由于scott用户是 Oracle自带的示例用户,对于正式的业务数据库或专业测试数据库可能没有配置这个用户,所以需要更改成有效的用户登录才可能测试成功。如果这里测试连 接不成功,也不要紧,先点完成按钮结束配置。

回到Oracle网络管理器(Oracle Net Manager)主窗口,保存配置,默认即可在Oracle安装目录下找到本地服务名配置文件 (Windows下如D:oracleora92networkadmintnsnamesora,Linux/Unix下$ ORACLE_HOME/network/admin/ tnsnamesora)。配置完成的本地服务名如下图示:

需要配置“监听器”和“网络服务”,详细说明如下,希望可以帮到你

一、监听器(LISTENER)

  监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。

 

二、本地服务名(Tnsname)

  Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器端监听器对客户端连接请求进行合法检查,如果连接请求有效,则进行连接,否则拒绝该连接。

本地服务名是Oracle客户端网络配置的一种,另外还有Oracle名字服务器(Oracle Names Server)等。Oracle常用的客户端配置就是采用的本地服务名,本文中介绍的也主要是基于本地服务名的配置。

 

三、Oracle网络连接配置方法

  配

置Oracle服务器端与客户端都可以在其自带的图形化Oracle网络管理器(Oracle Net

Manager)里完成(强烈建议在这个图形化的工具下完成Oracle服务端或客户端的配置)。在Windows下,点击“开始/程序/Oracle -

OraHome92/Configuration and Migration Tools/Net

Manager”启动Oracle网络管理器工具,在Linux/Unix下,利用netmgr命令来启动图形化Oracle网络管理器,如:

$ netmgr

Windows下启动Net Manager图形窗口如下图示:

1、 Oracle监听器配置(LISTENER)

  如

图(一)示,选中树形目录中监听程序项,再点击左上侧“+”按钮添加监听程序,点击监听程序目录,默认新加的监听器名称是LISTENER(该名称也可以

由任意合法字符命名)。选中该名称,选中窗口右侧栏下拉选项中的“监听位置”,点击添加地址按钮。在出现的网络地址栏的协议下拉选项中选中

“TCP/IP”,主机文本框中输入主机名称或IP地址(如果主机即用作服务端也作为客户端,输入两项之一均有效;如果主机作为服务端并需要通过网络连

接,建议输入IP地址),端口文本框中输入数字端口,默认是1521,也可以自定义任意有效数字端口。配置好的监听位置如下图示:

中窗口右侧栏下拉选项中的“数据库服务”,点击添加数据库按钮。在出现的数据库栏中输入全局数据库名,如myoracle。注意这里的全局数据库名与数据

库SID有所区别,全局数据库名实际通过域名来控制在同一网段内数据库全局命名的唯一性,就如Windows下的域名控制器,如这里可以输入

myoracle19216815。Oracle主目录可以不填写,输入SID,如myoracle。完整的数据库服务配置如下图示:

 

  保

存以上配置,默认即可在Oracle安装目录下找到监听配置文件

(Windows下如D:oracleora92networkadminlistenerora,Linux/Unix下$

ORACLE_HOME/network/admin/listererora)。至此,Oracle服务端监听器配置已经完成。

 

2、 本地服务名配置(Tnsnames)

  本 地服务名是基于Oracle客户端的网络配置,所以,如果客户端需要连接数据库服务器进行操作,则需要配置该客户端,其依附对象可以是任意一台欲连接数据 库服务器进行操作的pc机,也可以是数据库服务器自身。如前面所介绍,可以利用Oracle自带的图形化管理工具Net Manager来完成Oracle客户端的配置。选中如图(一)中的服务命名,再点击左上侧“+”按钮,弹出如下图示对话框:

输入Net服务名,如myoracle,点击下一步,进入下图示对话框:

 选中TCP/IP(Internet协议),点击下一步,如下图示:

 输入主机名与端口号。注意这里的主机名与端口号必须与数据库服务器端监听器配置的主机名和端口号相同。点击下一步,如下图示:

中(Oracle8i或更高版本)服务名,输入服务名。这里的服务名实际上就是数据库服务器端监听器配置中的全局数据库名,前者与后者必须相同。连接类型

通常选专用服务器,这要视数据库服务器的配置而定,如果配置的共享数据库服务器,这里的连接类型就要选共享服务器,否则建议选专用服务器(关于专用服务器

的介绍请参阅相关文档)。配置好后点击下一步,如下图示:

果数据库服务器端相关服务启动了,可以点击测试按钮进行连接测试。Oracle默认是通过scott/tiger用户进行测试连接,由于scott用户是

Oracle自带的示例用户,对于正式的业务数据库或专业测试数据库可能没有配置这个用户,所以需要更改成有效的用户登录才可能测试成功。如果这里测试连

接不成功,也不要紧,先点完成按钮结束配置。

  回

到Oracle网络管理器(Oracle Net Manager)主窗口,保存配置,默认即可在Oracle安装目录下找到本地服务名配置文件

(Windows下如D:oracleora92networkadmintnsnamesora,Linux/Unix下$

ORACLE_HOME/network/admin/ tnsnamesora)。配置完成的本地服务名如下图示:

树形目录下的服务命名可以通过编辑菜单里的重命名菜单更改成任意合法字符组成的服务名称,注意服务名称前不能有空格字符,否则可能无法连接数据库服务器。

3、 连接数据库服务器

(1)   启动服务器端监听器与数据库服务

Linux/Unix下,启动监听器:

$ lsnrctl start                    

关闭监听器:

$ lsnrctl stop

查看监听状态:

$ lsnrctl status

启动数据库:

$ sqlplus /nolog

SQL>conn sys@myoracle as sysdba   --这里的myoracle是前面配置的客户端本地服务名

SQL>conn / as sysdba

SQL>startup

Windows下,启动监听器:

C:lsnrctl start

启动Oracle实例服务:

C:oradim a href="http://gamepchomenet/pcgame" class="none" title="cs" rel="external">cstartup –sid myoracle  

关闭Oracle实例服务:

C:oradim –shutdown –sid myoracle

  以上服务必须同时启动,客户端才能连接数据库。由于默认配置的监听器名称是Listener,上述命令可以正常启动监听器,如果监听器名称是其它名称,如aListener,则需要用下列方式才能启动:

Linux/Unix下:

$ lsnrctl start aListener

Windows下:

C:lsnrctl start aListener

 

(2)   测试连接数据库服务器

  测试的方法多种多样,可以在上面配置本地服务名时进行测试,也可以是第三方客户端工具,如PL/SQL Developer,最方便的是用Oracle自带的sqlplus工具,以下利用sqlplus进行测试:

C:sqlplus /nolog

SQL>conn zgh@myoracle

已连接。

 

 

四、客户端连接服务器端常见问题排除方法

  要排除客户端与服务器端的连接问题,首先检查客户端配置是否正确(客户端配置必须与数据库服务器端监听配置一致),再根据错误提示解决。下面列出几种常见的连接问题:

1、 ORA-12541: TNS: 没有监听器

显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。启动监听器:

$ lsnrctl start

C:lsnrctl start

2、 ORA-12500: TNS: 监听程序无法启动专用服务器进程

对于Windows而言,没有启动Oracle实例服务。启动实例服务:

C:oradim –startup -sid myoracle

3、 ORA-12535: TNS: 操作超时

  出现这个问题的原因很多,但主要跟网络有关。解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接。

4、 ORA-12154: TNS: 无法处理服务名

  检

查输入的服务名与配置的服务名是否一致。另外注意生成的本地服务名文件(Windows下如D:oracleora92networkadmin

tnsnamesora,Linux/Unix下/network/admin/tnsnamesora)里每项服务的首 行服务名称前不能有空格。

5、 ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME

  打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确。该服务名必须与服务器端监听器配置的全局数据库名一致。

6、 Windows下启动监听服务提示找不到路径

  用

命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常。打开注册表,进入HKEY_LOCAL_MACHINE/SYSTEM/Current

ControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath字符串项是否存在,如果没

有,设定值为D:oracleora92BINTNSLSNR,不同的安装路径设定值做相应的更改。这种方法同样适用于Oracle实例服务,同

上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle

ServiceMYORACLE项,查看ImagePath字符串项是否存在,如果没有,则新建,设定值为d:oracleora92

binORACLEEXE MYORACLE。

以上是Oracle客户端连接服务器端常见的一些问题,当然不能囊括所有的连接异常。解决问题的关键在于方法与思路,而不是每种问题都有固定的答案。

还不如直接问体系结构是怎么构架的,到处都是特点,给你一份我的笔记,自己参考

数据库体系结构

数据库体系结构包括了:

1数据库实例

2数据库文件

3用户进程

4服务器进程

5参数文件

6密码文件

7归档日志文件等。

其中,1数据库实例和2数据库文件是本体系结构中的核心部分,他们组合起来构成了oracle服务器,又称为DBMS——数据库管理系统。

1数据库实例(instance)

数据库实例由系统全局区SGA和若干后台进程组成。

SGA:包含数据库高速缓存database buffer cache,共享池shared pool,重做日志缓存redo log buffer cache,流池 streaming pool,以及一些可选内存区如Java池java pool、大池large pool、闪回缓存区flahsback buffer等。而数据库的内存结构则是分为SGA和PGA(PGA介绍参见4服务器进程)。

共享池由库高速缓存和数据字典高速缓存组成,库高速缓存存储最近使用的SQL和PL/SQL语句,数据字典高速缓存存储数据文件、表、索引、列、用户、权限信息等数据库对象的定义。

数据库高速缓存存储最近使用的数据块信息或用户修改过需要写回数据库的数据信息。

大池主要分配共享服务器模式下的UGA内存。

后台进程:包含系统监控进程SMON,进程监控进程PMON,数据库写进程DBWR,日志写进程LGWR,检查点进程CKPT这5个必须启动的进程以及其他的例如归档日志进程ARCH等。

2数据库文件

数据库文件分成三类:数据文件datafiles,控制文件controlfile,重做日志文件redo file。

数据文件:包含数据库中的实际数据,是数据库操作中数据的最终存储位置。

控制文件:包含维护数据库和验证数据库完整性的信息,是二进制文件。

重做日志文件:包含数据库发生变化的记录,在发生故障时用于数据恢复。

数据库文件又有物理结构和逻辑结构之分。

物理结构:指基于操作系统的数据库文件结构,至上而下为“datafile——OS block”,即从操作系统层面来将,数据库文件是作为datafile来存储的,而datafile是以操作系统的最小块来进行排列存储的。注意,数据库文件的最小块是操作系统最小块的正整数倍。

逻辑结构:指oracle基于自身逻辑的抽象结构自上而下一对多关系为“数据库database——表空间tablespace——段segment——区段extent——数据库块oracle block”。

逻辑结构和物理结构的对应关系:tablespace对应了一个或多个datafile,而segment对应同一个tablespcace的一个或者多个datafile的全部或者一部分,extent是datafile的全部或者一部分,也就是说最小的datafile大小为一个区段,oracle block是OS block的正整数倍大小。

3用户进程

用户进程是运行于客户端需要与数据库进行交互的程序,但是它必须经过服务器进程的对接转换,才能实现交互的功能。

4服务器进程

服务器进程是运行在服务器端、服务于用户进程并直接与数据库进行交互的程序。用户进程与服务器进程之间产生一条数据库连接connection,服务器进程与数据库之间产生若干会话代表用户进程的若干个会话。服务器进程有一块专用的内存叫做进程全局区PGA,PGA独立于SGA,直接在操作系统的内存区中分配。

用户全局区UGA表示用户的会话状态,为会话分配内存。在共享服务器模式下,UGA在SGA中分配,而在专有服务器模式下,UGA在PGA中分配。

5参数文件parameter file

参数文件以正文文本存储,定义了包含SGA中内存结构分配空间的参数,是oracle重要的文件之一。

6密码文件password file

密码文件授予用户启动和关闭数据库实例的权限,在刚安装数据库时,oracle的默认用户名和密码就存储在密码文件之中。

7归档日志文件 archive log file

归档日志文件是日志文件的脱机备份,用以故障之后进行数据恢复。

connect,就是客户端到服务器端的一个物理连接通道。

session,是oracle实例中的一个逻辑组合id。

process,是否则session的一个进程。

他们三者的关系,在这里给你举个例子。

你打电话给你爸,当两边电话拨通时,此时叫做建立了一个connect,然后你这边的电话机就是一个进程,叫做客户端进程,你爸那边的电话机也是一个进程,叫做服务器进程。此时,你跟你爸进行通话,询问你爸身体状况啊什么的,这就是谈话的内容了(也就是你和你爸之间的一个session(会话)),正好此时,你妈过来了要跟你聊两句,那么电话不断,你和你妈聊你儿子的事,此时你和你妈建立了一个session,(也就是谈话内容不同),但是你爸的session并没有断掉,只是暂时挂起了,等你在和你爸谈论他身体的时候,又恢复了session。

通过上面这个例子,你应该大体上了解这三者的关系了吧。

在接着说,一个connect可以有0个,1个,2个甚至多个session

比如你电话接通了,只是有人把电话接起来扔那就去干别的事情了,此时没有人通话,这就是0个session,

只给你父亲同话,完了挂掉电话,这就是一个session

如果在给你你母亲通电话,这就是两个session

同样,假如你跟你父亲通电话的过程中,电话线被风挂断了,通话中断,因为物理线路(connect中断了),但是此时session并没有中断,你父亲仍然在那边(喂,喂,或者说了两句话才发现电话线掉了),其实这就相当于虽然connect断了,但是session仍然存在了一会,最后你父亲发现了这个问题才挂掉电话(就相当于session存活,connect断掉,pmon进程监控到了,然后把这个session干掉,同时把process干掉(也就是把电话机挂机))

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 在Oracle中session和process的区别

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情