UNIX与Windows 2000上的差异在哪?

UNIX与Windows 2000上的差异在哪?

数据库启动与关闭

在 Windows2000 上数据库可以通过启动相关的服务打开。通过控制面板的服务选项或者是通过命令行模式,如:net start OracleServiceatei 就可以打开相关服务。这依赖于一些注册表参数,我们在后面讨论。停止相关的服务,例如: net stop OracleServiceatei 可以关闭一个数据库。

在所有的平台上, ORACLE8i 实例都可以从服务管理器(或者 SQL*Plus! )中通过 startup 命令启动。在 Unix 中,这个命令启动后台进程并且打开数据库。它还生成了一个 Unix 特定文件,叫做 $ORACLE_HOME/dbs/lk &DBNAME>,这是个MOUNT 锁文件 [6 Metalink, 2000] 。这会阻止两个实例 mount 在同一数据库上,当不使用并行服务器的模式下,要使用不同的 ORACLE_SID 。原来这是个 0 长度文件,不过现在包含文本 'DO NOT DELETE THIS FILE!' 。不要试图通过查看这个文件来得知是否数据库是可用的,它不是很准确的。在 Windows 2000 中, startup 命令并不启动 ORACLE 服务,不过,如果服务已经运行的话,这将打开数据库。

类似的,服务管理器 Server Manager 的 shutdown 命令在任何平台上都会关掉数据库,不过在Windows 2000 上它并不停掉服务。很有可能的情况就是 ORACLE 服务被启动但是数据库却关掉了。

UNIX 上的数据库的自动启动与关闭

在 Unix 上, ORACLE 提供了 dbstart 和 dbshut 脚本以供使用。在 Linux 中 ORACLE 检测文件 /etc/oratab 来决定哪个数据库自动的启动 / 关闭。在 Solaris ( 和一些其他版本的 Unix) 中,检查 /var/opt/oracle/oratab 文件。要注意: 8.1.6 版本的 dbstart 有个 bug, 在 8.1.7 中已经被修复,察看 [7 Metalink, 2000] 有详细说明。

在 Linux 上,作为 root 用户,在 /etc/rc.d/init.d 目录中创建一个一个名为 dbora 的文件。这个文件将会检查参数是否是 'start' 或者 'stop' 并且适当的执行 dbstart/dbshut ;通常也从这个脚本启动 listener 。再生成两个符号连接 /etc/rc.d/rc2.d/S99dbora 和 /etc/rc.d/rc0.d/K10dbora 。数据库在运行级 2( 多用户 ) 时通过 /etc/rc.d/rc2.d/S99dbora 启动 , 在系统关闭到运行级 0 的时候通过 /etc/rc.d/rc0.d/K10dbora 关闭数据库。在 Solaris 上,这个脚本的在 /etc/init.d 中而不是在 /etc/rc.d/init.d。

要注意默认的 dbshut 执行了一个正常 (normal) 的关闭操作。在 Unix中可以通过编辑 $ORACLE_HOME/bin/dbshut 中的这一行来改变数据库的关闭模式。

把 shutdown 修改成:shutdown immediate

如果启动一个已经运行的实例, dbstart 还会执行一个 shutdown abort 。在 dbstart script 脚本的顶部警告说 'It should ONLY be executed as part of the system boot procedure' 。这个脚本要常被复制、修改,这样在其它的时候使用才能足够安全。

WINDOWS 2000 上的数据库自动的启动与关闭

在以前的版本( 8i )中,当 oracle 的启动被一个额外的服务 ORACLEStartSID 处理,服务器的启动和关闭的时候 ORACLE 不能被自动的干净的关掉。从 ORACLE8i 开始, stop/start 功能成为了主要的 ORACLE 服务,并通过注册表控制。注意当 ORADIM 用于创建或者修改实例的时候,自动的在注册表中设定这些值。这些设置在 HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMEID 键值下。 ID 号从 0 开始,每有一个额外的 ORACLE home 递增。

 
  参数   描述   ORA_SID_AUTOSTART   设定为 TRUE 的时候 ( 默认值 ) , ORACLEServiceSID 启动的时候启动数据库。   ORA_SID_PFILE   设定 INIT.ORA 参数文件的全路径。   ORA_SHUTDOWN   当设定为 TRUE 的时候,在当前任何 ORACLE home 下的任何数据库将 shutdown 。   ORA_SID_SHUTDOWN   设定为 TRUE 的时候,关闭标记 SID 值的 ORACLE8i 数据库。

如果 SHUTDOWN 参数设定为 FALSE ,停掉 ORACLEServiceSID 将会 abort 的方式关闭实例,下次启动的时候要进行实例恢复。

下面的可选参数可以在注册表中设为合适的值

参数 描述
ORA_SID_SHUTDOWNTYPE 指明数据库关闭模式 A (abort ), I (immediate) , N(normal) 。
如果你不设定这个参数的话,默认的模式是 I (immediate) 。
ORA_SID_SHUTDOWN_TIMEOUT 在一个 SID 停止前等待的最大时间。

操作系统认证

OS 认证在两个平台间是相似的,参数文件中设定 os_authent_prefix 参数,创建用户都标记为 externally 。在Windows2000 中创建用户要指定大写的域名并且用户名要在 " " 中,否则不起作用。如果你在注册表中把 OSAUTH_PREFIX_DOMAIN 设定成 FALSE 的话,你可以忽略掉域。客户机和服务器的机器还需要在 sqlnet.ora 中包含 sqlnet.authentication_services=(nts) 这一行。

在 Windows 2000 中,可以允许一个域用户登陆到一个远程 pc 上,无需提供额外的密码就可以连接到数据库中。参见 [2 Kelly III,2000] 可以得到详细内容。

LISTENER

在 Windows 2000 上面 listener 作为一个服务实现的,所以 listener 可以通过启动 ORACLETNSListener 服务来启动。两种平台上 listener 都可以从 lsnrctl 命令控制。在 Unix 上 lsnrctl start 启动 listener 进程;在Windows 2000 启动 ORACLETNSListener 服务就可以。 如果 listener 第一次启动的时候没有 ORACLETNSListener 服务将创建它。如果从你的计算机中删除 ORACLE 的话, listener 服务要手工从注册表中删除。

在两个平台上的 listener 都可以监听不同版本的数据库。在 win2000 中,在 LISTENER.ORA 中不需要 ORACLE_HOME 参数 ( 在 UNIX 中要使用到的),因为每个 SID 在 SERVER 中是唯一的。 listener 可以从注册表中得到正确的 ORACLE_HOME 。

ORACLE8i 有个特性叫服务器注册, pmon 自动对 listener 注册信息。这意味着 Net8 listener 可以无需在 listener.ora 文件中设置就可以监听一个数据库。不过这样做的话, Enterprise Manager 要直到启动后才可以连接到数据库。所以这个例子不能用来启动一个远程的实例。

通常最好在 listener.ora 中设置所有的实例以避免冲突,尤其在一个有多位 DBA 的站点中,可以避免我们提到的 Enterprise Manager 问题。

加长的 SID 名字

Windows NT 上的 ORACLE 7 实例名字有着 4 个字符长的限制,这可能会产生很晦涩的实例名--庆幸的是在8i 中 SID 名字已经加长了。不过在包括命名服务的几个场合中使用太长的实例名字也不总是很有用。在 Windows 2000 上面有个 bug ,限制了实例名字最长 15 个字符。

  Unix操作系统 NT 操作系统
  数据库名长度 SID名字长度 数据库名长度 SID 名字长度
Oracle7 8 8 8 4
Oracle8 8 8 8 4
Oracle8i 8 64 8 64

数据库的创建

当你在安装过程中的时候选择创建 ORACLE 8i 数据库,数据库生成助手就会通过 ORACLE Universal Installer 自动运行。在安装后它也可以作为一个单独的工具手工运行。用它还可以手工的输入 SID 代替默认的 ORCL ,默认的情况下,不在 ORACLE_HOME 下面创建数据库,完全遵循 OFA 的意图。

建议你运行 Database Creation Assistant ,不过在最后一页选择[ Save information to a batch file ] (保存信息到一个批处理文件中),再点击[完成]按钮。这会产生几个脚本。从不同的平台对比它们的内容很有趣的。在Unix 和 Windows 上的内容很相似,除了 windows 上对 oradim 的调用不同。第一次对它的调用产生了一个与ORACLE 数据库相关联的 ORACLE 服务:

D:/ORACLE/Ora817/bin/oradim -new -sid ATEI -intpwd man -startmode manual 
-pfile "D:/ORACLE/admin/atei/pfile/initatei.ora"

第二次对 oradim 的调用把服务更改为自动启动:

D:/ORACLE/Ora817/bin/oradim -edit -sid atei -startmode auto 

可以用这些文件作为创建其它数据库的模版。若你不使用上面建议的方式创建数据库的话, Database Creation Assistant 生成的这些文件和目录没什么大用处。在使用这些脚本创建额外的数据库之前,这些文件和目录不得实现创建。特别注明一下,脚本假定一个密码文件已经存在 , 密码文件可以用 orapwd 命令预创建 [2 H Kelly III, 2000] 。

Database Creation Assistant 创建的目录:
Windows 2000 Unix
ORACLE_BASE = D:/oracle ORACLE_BASE = /db01/app/oracle
ORACLE_BASE/oradata/atei $ORACLE_BASE/oradata/eighti
ORACLE_BASE/oradata/atei/archive $ORACLE_BASE/oradata/eighti/archive
ORACLE_BASE/admin/atei $ORACLE_BASE/admin/eighti
还有这些子文件夹:sadhoc bdump cdump create exp pfile udump

通过 Database Creation Assistant 创建 / 改动的文件:
Windows 2000 Unix
ORACLE_HOME = D:/oracle/ora817 ORACLE_HOME = /db01/app/oracle/product/8.1.7
ORACLE_HOME/database/PWDatei.ora $ORACLE_HOME/dbs/orapweighti.ora
ORACLE_BASE/admin/atei/pfile/initatei.ora $ORACLE_BASE/admin/eighti/pfile/initeighti.ora
ORACLE_HOME/database/initatei.ora
包含一行
IFILE='d:/oracle/admin/atei/pfile/initatei.ora‘
$ORACLE_HOME/dbs/initeighti.ora
符号链接到:
/db01/app/oracle/ admin/eighti/pfile/initeighti.ora
添加到 tnsnames.ora 的条目 添加到 tnsnames.ora 的条目
添加到 listener.ora 的条目 添加到 listener.ora 的条目
windows 没有相关的操作 添加项目到 oratab

通过 Database Creation Assistant 创建的脚本
Windows 2000 Unix 注释
atei.bat eighti 调用其它脚本 , 在 Windows 上还可以调用 ORADIM
ateirun.sql eightirun.sh 包含创建数据库的语句
ateirun1.sql eightirun1.sh 创建表空间 / 创建回滚段 不创建系统中的第二个回滚段
N/A eightirun2.sh 额外的脚本(如,catproc ) ,
这些在 Windows 上从 ateirun1.sql 中运行
ateisqlplus.sql eightisqlplus.sh 添加 SQL*Plus 帮助
@c:/oracle/ora817/sqlplus/admin/help/helpbld.sql helpus.sql
ateialterTablespace.sql eightialterTablespace.sh 为 SYSTEM 用户更改默认的和临时的表空间
ateireplicate.sql ateijava.sql
ateiordinst.sql
ateiiMedia.sql
ateidrsys.sql
ateicontext.sql
ateispatial1.sql
ateitimeseries.sql
ateivirage.sql
eightireplicate.sh eightijava.sh
eightiordinst.sh
eightiiMedia.sh
eightidrsys.sh
eighticontext.sh
eightispatial1.sh
eightitimeseries.sh
eightivirage.sh
各种脚本,只有在你选择相应的选项的时候才会生成。

远程挂接(mount)的文件系统,如 UNIX 上的 NFS 和 Windows 2000 上 UNC ,在两个平台上都不支持。

http://www.dbanotes.net/database/oracle_unix_windows_2000_ii.html