UNIX 和 WINDOWS2000 上的 ORACLE 的差异

oracle|unix|window

 

 

Ian Adam,          SAIC Ltd

David Stien,       SAIC Ltd

翻译:Fenng       

 

摘要

ORACLE是广为人知的Unix硬件平台上的领先的数据库系统。ORACLE用户和管理员因此熟悉Unix平台上的ORACLE架构以及它上面的工具和技巧,并从他们的数据库得到最大的收益。相反,Windows上的ORACLE架构就不那么的被广为了解。这篇文章从一个DBA的角度考察了两个操作系统之间的关键的异同点。

 

简介

在看了几本令人失望的这方面的书之后,我们写了这篇文章。那些书的通病是试图做太多的事情--在细节上讲述Windows和ORACLE。我们的这篇文章假定读者熟悉Unix平台上的ORACLE DBA的工作。因此本文将分析两个平台上的ORACLE的关键的差异而不是从头教你ORACLE的技巧。我们不想把它作为你的一份详尽的指导或者是手册的替代品,事实上它可能鼓励你阅读一些手册。作为数据库服务器平台,它只会涉及一些Unix和Windows上相关的优点,这就是本文的目的。

 

范例

这个例子使用linux上的ORACLE 8i,实例名字叫作eighti。Windows 2000上面的ORACLE 8i的实例名字叫作atei。

 

客户端对ORACLE的访问

当客户端连接到ORACLE时,通常的来说ORACLE服务器的平台与客户端的应用无关。这实际上很难说清。 ORACLE DBA 和系统管理人员更关心操作系统平台,他们有的时候会基于需求(如运行时间和可扩展性)选择平台。 更通常的情况下,他们接受(或是接手)给定的平台并学习从中得到最大受益。

 

关于WINDOWS 2000

值得一提的是Windows 2000是从Windows NT升级而来。在这两个操作系统之间有很多的相似点,Windows 2000 也有些新的特性。微软从NT4.0的升级途径见下表。

 

两个系统间有很多相似点:

-------------------------------------------------------------------------------------

NT 4.0                                                     Windows 2000

-------------------------------------------------------------------------------------

NT 4.0 Workstation                                  Windows 2000 Professional

NT 4.0 Server                                         Windows 2000 Server

NT 4.0 Enterprise Edition                        Windows 2000 Advanced server

Unix                                                         Windows 2000 Datacenter server

-------------------------------------------------------------------------------------

 

 

ORACLE后台进程

下面这句话对于用过ORACLE的人来说是会很熟悉的:"每一个运行着的ORACLE数据库都对应一个ORACLE实例,当一个数据库在数据库服务器(不考虑机器的类型)上启动的时候,ORACLE分配一块叫做System Global Area (SGA)的内存区域并启动一个或者多个ORACLE进程。SGA和ORACLE进程合起来称作ORACLE 实例。"――摘自 ORACLE 8i Concepts [4 L Leverenz, 1999]。处理后台进程是放在首位的,也是不同的操作系统之间最明显的差异。

 

ORACLE在UNIX上的后台进程

任何连接到UNIX的用户都可以很容易的察看ORACLE的后台进程:

 

% ps -ef|grep eighti|grep -v grep

 

oracle8 18451     1  0 16:37:18 ?        0:00 ora_pmon_eighti

oracle8 18453     1  0 16:37:19 ?        0:00 ora_dbw0_eighti

oracle8 18457     1  0 16:37:19 ?        0:04 ora_ckpt_eighti

oracle8 18461     1  0 16:37:19 ?        0:00 ora_reco_eighti

oracle8 18455     1  0 16:37:19 ?        0:02 ora_lgwr_eighti

oracle8 18459     1  0 16:37:19 ?        0:01 ora_smon_eighti

oracle8 19168 19167  0 16:43:46 ?        0:00 oracleeighti

                           (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

 

最后一行的ORACLE进程与一个SQL*Plus会话相关,其他的进程都是后台进程。在ORACLE中我们可以通过输入SQL*Plus会话察看这些进程:

 

SELECT sid, spid, osuser, s.program

FROM v$process p, v$session s WHERE p.addr=s.paddr;

 

         SID SPID    OSUSER             PROGRAM

    -------------------------------------------------------------------

         1 18451     oracle8              oracle@saic02 (PMON)

         2 18453     oracle8              oracle@saic02 (DBW0)

         3 18455     oracle8              oracle@saic02 (LGWR)

         4 18457     oracle8              oracle@saic02 (CKPT)

         5 18459     oracle8              oracle@saic02 (SMON)

         6 18461     oracle8              oracle@saic02 (RECO)

         7 19168     oracle8              sqlplus@saic02(TNS V1-V3)

7 rows selected.

 

每一个后台进程都有一行,还有一行信息是与SQL*Plus会话相关的,SPID对应相应的UNIX进程号。

 

 

在WINDOWS2000上的ORACLE后台进程

回到WINDOWS上,从操作系统中察看后台进程有些困难。从任务管理器中可能会看到运行着的应用(任务管理器的察看方法:在任务栏点击右键选择"任务管理器")。在服务器上ORAC

LE可以是可用的,运行着的应用却是不可见的。进程表的确显示一个进程叫做ORACLE.EXE,

察看alert log 显示ORACLE的所有后台进程都是启动的:

 

PMON started with pid=2

DBW0 started with pid=3

LGWR started with pid=4

CKPT started with pid=5

SMON started with pid=6

RECO started with pid=7

 

要看实际的后台进程,需要运行额外的软件,例如,进程察看器。该软件可以从Windows

2000 CD 中得到(Windows NT 的话可以从资源包中得到)。

 

在Windows 2000上,ORACLE实例是作为一个单一的Windows 2000进程(ORACLE.EXE)实现的。这个进程包括实例所需要实现的每个任务的线程。

因此一个线程对应每个ORACLE 后台进程。ORACLE.EXE进程作为一个服务运行,可以从控制面板的服务中察看到 ORACLEServiceSID。其他的服务也可以这样控制。

 

这允许ORACLE在没有用户登录服务器的时候也持续的运行。对于共享主处理器资源的所有的进程来说,ORACLE能够达到高速、低负荷的上下文切换。

 

在Unix下显示ORACLE中的进程,我们也可以通过输入简单的SQL语句来达到。为了显示PID列,SQL语句做了些轻微的改动。要注意PID匹配警告日志中报告的值。

 

SELECT s.sid, p.pid, p.spid signaled, s.osuser, s.program

FROM v$process p, v$session s

WHERE p.addr=s.paddr;

 

SID      PID THREADID  OSUSER          PROGRAM

---- ------- --------- --------------- --------------------

   1       2 1088      SYSTEM          ORACLE.EXE

   2       3 1172      SYSTEM          ORACLE.EXE

   3       4 1180      SYSTEM          ORACLE.EXE

   4       5 1192      SYSTEM          ORACLE.EXE

   5       6 1212      SYSTEM          ORACLE.EXE

   6       7 1220      SYSTEM          ORACLE.EXE

   7       8 1200      Administrator   SQLPLUSW.EXE

7 rows selected.

 

每一个后台进程都有一行,还有一行信息是与SQL*Plus会话相关。程序名字并没有指明后台进程的名字,和在Unix 中一样,这些名字可以通过和v$bgprocess 连接得到。

 

SELECT s.sid SID, p.spid THREADID, p.program PROCESSNAME, bg.name NAME

FROM v$process p, v$session s, v$bgprocess bg

WHERE p.addr = s.paddr

AND  p.addr = bg.paddr

AND  bg.paddr <> '00' ;

 

SID THREADID  PROCESSNAME     NAME

---------- --------- --------------- -------------

         1 1088      ORACLE.EXE      PMON

         2 1172      ORACLE.EXE      DBW0

         3 1180      ORACLE.EXE      LGWR

         4 1192      ORACLE.EXE      CKPT

         5 1212      ORACLE.EXE      SMON

         6 1220      ORACLE.EXE      RECO

6 rows selected.

 

 

断开会话

提交SQL命令 ALTER SYSTEM DISCONNECT SESSION可以断开会话。有的时候需要在操作系统级别断开会话,在UNIX上,通过kill命令实现,前面例子中的SQL会话可以通过输入UNIX命令断开:

 

kill -9 19168

 

在Windows 2000上可以用orakill断开一个会话。orakill是Windows平台上的ORACLE的一个特定命令,默认安装在$ORACLE_HOME\bin下。在命令行下输入orakill可以察看它的用法。前面例子中的SQL*Plus会话可以通过输入如下的命令断开:

 

orakill atei 1200

Kill of thread id 1200 in instance atei successfully signaled.

 

在Windows 2000中,如果一个断开的会话标记为 "marked for kill"但是没被删除,orakill会终止它。要记住杀掉一个后台进程总不是个好主意,尤其是Windows上,会导致进程崩溃,甚至导致数据库不可用。

 

Windows 2000 注册表

和其他的Windows 2000中的应用那样,ORACLE的大多数的设定都在注册表中。应该看看HKEY_LOCAL_MACHINE OFTWARE\ORACLE下面都有什么。这些参数中的一些在后面会详细讨论。和ORACLE服务相关的参数和其他的服务一样存贮在同样的位置:

HKEY_LOCAL_MACHINE YSTEM\CurrentControlSet ervices。

 

 

环境变量

在Unix中两个最重要的变量是ORACLE_HOME和ORACLE_SID。一旦这些变量设定的话,应用就可以运行并联接到本地数据库。 通常也把$ORACLE_HOME/bin 包含在 $PATH

中以便在使用ORACLE 工具(如:sqlplus)的时候免去输入全路径的麻烦。

 

Windows 2000 中可以打开命令行设定ORACLE_SID 变量再联接到本地数据库。其他的值可以从注册表中得到。

 

MULTIPLE ORACLE HOMES

Windows 2000全面支持多个ORACLE home。以前在Windows NT上这是个主要的问题,一直到ORACLE8.0.4以后才开始支持。最初得对这一点的支持很差劲。ORACLE Home Selector, ORACLE8i的一个新的应用工具, 改变环境路径,使选择的ORACLE home 路径作为主的home。只是简单的改变系统路径,把ORACLE选择的BIN目录放在启动路径中。

 

每一个 BIN目录都有一个ORACLE.KEY文件,指明在注册表中ORACLE程序在哪里可以找ORACLE_HOME 和其他的环境变量。如果在服务器上面只有一个数据库,通常在注册表中设定ORACLE_SID。不过,不要设定 ORACLE_HOME,对于ORACLE产品来说根本不需要,可能会导致问题。

 

文件系统

多 ORACLE home的支持允许在Windows上面实现 Unix 的OFA 标准。这极大的简化了从Unix的过渡。OFA目录树的顶层的名字有差异,不过主要的子目录和文件名字在两种操作系统中都是一致的。

 

 

Unix

NT

ORACLE_BASE

/oracle/app/oracle

D:\Oracle

ORACLE_HOME

/oracle/app/oracle/product/8.1.7

D:\Oracle\Ora817

Admin directories

/oracle/app/oracle/admin

D:\Oracle\Admin

Database files

/db01/oradata/SID

D:\Oracle\Oradata ID

 

/db02/oradata/SID

F:\Oracle\Oradata ID

 

/db03/oradata/SID

G:\Oracle\Oradata ID

 

 

服务管理器

从ORACLE 8i开始,服务管理器的名字在不同的平台上都一致了,都叫做svrmgrl。以前在

Windows NT上ORACLE的执行文件名字随着版本变动而改变,对于那些在多平台上工作的人来说这很令人讨厌,尤其是在使用一些命令(imp、exp等)的时候。

 

------------------------------------------------------------------

ORACLE 服务器版本          Windows 服务器管理器可执行文件

------------------------------------------------------------------

 7.3                             svrmgr23

 8.0                             svrmgr30

 8.1                             svrmgrl

------------------------------------------------------------------

 

要注意server manager 正在逐步被淘汰(译者注:9i中彻底淘汰了svrmgrl),一些额外的功能被加到了SQL*Plus 中。

 

PartI. To Be Continued…..

 

时间: 2024-11-05 12:32:49

UNIX 和 WINDOWS2000 上的 ORACLE 的差异的相关文章

UNIX和WINDOWS2000上的ORACLE的差异 PartIII

oracle|unix|window UNIX 和 WINDOWS2000 上的 ORACLE 的差异 III Ian Adam,  SAIC LtdDavid Stien,  SAIC Ltd翻译:Fenng www.ITPub.netPart III ORACLE 的安装ORACLE8i通过新的基于Java的ORACLE Universal Installer来安装,在所有的平台上都有一样的界面 [1 M Cyran, 1999].上面这句话是对的,不过一些小的差异要注明.在Unix上需要X

UNIX和WINDOWS2000上的ORACLE的差异 PartII

oracle|unix|window   Ian Adam ,SAIC LtdDavid Stien,SAIC Ltd 翻译:Fenng PartII 数据库启动与关闭 在Windows 2000上数据库可以通过启动相关的服务打开.通过控制面板的服务选项或者是通过命令行模式,如: net start OracleServiceatei就可以打开相关服务.这依赖于一些注册表参数,我们在后面讨论.停止相关的服务,例如:net stop OracleServiceatei可以关闭一个数据库. 在所有的

在Redhat 9上安装 Oracle 817心得

oracle|心得 在 Linux 上安装 Oracle 8i(注:引用http://vip.6to23.com/hanson/htdocs/oracle.htm,在安装过程中作一些更正) 关于 Oracle 安装的讨论已经有很多了,可是在实践中你还是总会遇到某些麻烦,因此我就留下我的两分钱吧.本文讨论的环境基于 Redhat Linux 9.0.93, Oracle 的版本号为 8.1.7.0.1. 下载软件假设你已经有了一台跑着 Redhat 的机器,并且它满足 Oracle 8i 对硬件的

Digital Unix Version 4.0下Oracle 8.0.5服务器的安装

oracle|unix|服务器 Digital Unix Version 4.0下Oracle 8.0.5服务器的安装 石骁騑(中软网络技术股份有限公司,北京,100081) 一. 系统需求在安装Oracle 8 服务器前,首先检查系统是否满足表1和表2所示的软硬件需求.1. 硬件需求 表1 硬件需求硬件项目 需求CPU Digital Unix alpha 系统内存 最少128M RAM交换空间 2-4倍的内存大小磁盘驱动(Disk Drives) 至少四个设备:一个用于Oracle软件的分发

在AIX上安装Oracle RAC的方法和步骤

最近遇到一个项目,是在AIX5.3上安装ORACLE 9i RAC,说实话,ORACLE俺压根就没有接触过,我也是临危受命.感觉如同当年实施AS400的XSM项目一般.无奈,下载了N多本REDBOOK开始研究,终于有了些眉目,找到了一份英文资料<Step-By-Step Installation of RAC on IBM AIX (RS/6000)>看后觉得很不错,闲暇之余翻译并修改了一些地方,发到这里与大家分享. Oracle RAC的三种架构模式: 1.RAC+HACMP---最常见,但

【中亦安图】小机上运行Oracle需要注意的进程调度bug(1)

第一章 技术人生系列 · 我和数据中心的故事--第一期 第一期:技术人生系列 · 我和数据中心的故事(第一期)小机上运行Oracle需要注意的进程调度bug. 2016-01-11 小y 中亦安图   前 言   小y这个名字,是笔者临时想的一个笔名,其实没有什么特殊的含义,就暂且用他来代表我们这些为各个数据中心奉献自己青春的一群默默无闻的IT人吧!   小y今天要和大家分享的是一个疑难杂症的分析过程.如果大家有耐心读完这个案例,一定会或多或少有些收获,也就没浪费小y的一片苦心.   具体来说是

如何在ECS上搭建Oracle?Oracle云上云下6种架构全解析

在2016杭州云栖大会第二日,袋鼠云联合创始人丁原在飞天服务专场分享了<EasyDB for Oracle--基于阿里云的Oracle最佳实践>.他主要从云上Oracle可行性分析.云上Oracle数据库架构.EasyDB for Oracle三个方面进行了分享,详细介绍了Oracle传统架构.云下(传统)经典数据库架构.Oracle云上4种架构的实现和优缺点. 以下内容根据演讲PPT及现场分享整理. 可行性分析 数据库关注点 不管是线上还是线下,数据库应该关注什么?第一,性能好坏.第二,数据

在redhat 9 上安装oracle 9.2.0.4 时,DBCA 出错的解决办法

oracle|解决 如何在各种版本的linux 上安装oracle 的资料已经很多了,也介绍的很详细,按说只要按照步骤一步步来,应该不会出现问题.我也曾经在redhat 9 上安装过 oracle 9.2.0.1, 没有出现任何问题.但最近我在redhat 9 上安装 oracle 9.2.0.4( 这个版本是OTN上可以下载的,9.2.0.1的下载链接已经没有了)时,在最后使用DBCA创建数据库时,出现了以下的错误:      click finish, 弹出确认画面,click ok, 这时

RHAS 3.0上的Oracle 9i的安装

oracle RHAS 3.0上的Oracle 9i的安装原文来自 :好好先生 llmmysun 修改后发布参考文档:http://www.puschitz.com/InstallingOracle9i.shtml 另外还参考了一篇csdn上的安装文档,在此一并表示感谢! 声明:本文可任意转载,但请保留上述信息     Oracle是世界上使用最广泛的数据库,它可以运行在各种计算机上:也是当前最优秀的关系型数据库.以前,一至无缘接触.这两天,正好有空.就在自己的计算机上装了一遍,领略了一番她的魅