UNIX 和 WINDOWS2000 上的 ORACLE 的差异
2024-08-29 13:31:08
供稿:网友
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 [email protected] (pmon)
2 18453 oracle8 [email protected] (dbw0)
3 18455 oracle8 [email protected] (lgwr)
4 18457 oracle8 [email protected] (ckpt)
5 18459 oracle8 [email protected] (smon)
6 18461 oracle8 [email protected] (reco)
7 19168 oracle8 [email protected](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…..
,欢迎访问网页设计爱好者web开发。