Ian Adam ,SAIC Ltd
David Stien,SAIC Ltd
翻译:Fenng
PartII
数据库启动与关闭
在Windows 2000上数据库可以通过启动相关的服务打开。通过控制面板的服务选项或者是通过命令行模式,如:
net start OracleServiceatei就可以打开相关服务。这依赖于一些注册表参数,我们在后面讨论。停止相关的服务,例如:net stop OracleServiceatei可以关闭一个数据库。
在所有的平台上,ORACLE8i实例都可以从服务管理器(或者SQL*Plus!)中通过startup命令启动。在Unix中,这个命令启动后台进程并且打开数据库。它还生成了一个Unix特定文件,叫做$ORACLE_HOME/dbs/lk
1<dbname>,这是个MOUNT锁文件[6 Metalink, 2000]。这会阻止两个实例mount在同一数据库上,当不使用并行服务器的模式下,要使用不同的ORACLE_SID。原来这是个0长度文件,不过现在包含文本'DO NOT DELETE THIS FILE!'。不要试图通过查看这个文件来得知是否数据库是可用的,它不是很准确的。在Windows 2000中,startup命令并不启动ORACLE服务,不过,如果服务已经运行的话,这将打开数据库。
2
3类似的,服务管理器Server Manager的shutdown命令在任何平台上都会关掉数据库,不过在Windows 2000上它并不停掉服务。很有可能的情况就是ORACLE服务被启动但是数据库却关掉了。
4
5
6**UNIX上的数据库的自动启动与关闭**
7
8在 Unix上,ORACLE 提供了dbstart和dbshut 脚本以供使用。在Linux
9中ORACLE检测文件/etc/oratab 来决定哪个数据库自动的启动/关闭。在 Solaris (和一些其他版本的Unix)中,检查/var/opt/oracle/oratab文件。要注意:8.1.6 版本的dbstart有个bug,在8.1.7中已经被修复,察看[7 Metalink, 2000]有详细说明。
10
11在Linux上,作为root用户,在/etc/rc.d/init.d目录中创建一个一个名为dbora的文件。这个文件将会检查参数是否是 'start' 或者 'stop' 并且适当的执行 dbstart/dbshut;通常也从这个脚本启动listener 。再生成两个符号联接
12/etc/rc.d/rc2.d/S99dbora 和
13/etc/rc.d/rc0.d/K10dbora。数据库在运行级2(多用户)时通过/etc/rc.d/rc2.d/S99dbora
14启动,在系统关闭到运行级0的时候通过/etc/rc.d/rc0.d/K10dbora关闭数据库
15。在Solaris上,这个脚本的在/etc/init.d中而不是在/etc/rc.d/init.d.
16
17要注意默认的dbshut执行了一个正常(normal)的关闭操作。在Unix 中可以通过编辑$ORACLE_HOME/bin/dbshut中的这一行来改变数据库的关闭模式。
18
19把
20shutdown
21修改成
22shutdown immediate
23
24如果启动一个已经运行的实例,dbstart 还会执行一个 shutdown abort 。在dbstart script脚本的顶部警告说 'It should ONLY be executed as part of the system boot procedure'。这个脚本要常被复制、修改,这样在其它的时候使用才能足够安全。
25
26
27**WINDOWS 2000上的数据库自动的启动与关闭**
28
29在以前的版本(8i)中,当oracle的启动被一个额外的服务ORACLEStartSID处理,服务器的启动和关闭的时候ORACLE不能被自动的干净的关掉。从ORACLE8i开始,stop/start功能成为了主要的ORACLE服务,并通过注册表控制。注意当ORADIM用于创建或者修改实例的时候,自动的在注册表中设定这些值。这些设置在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID键值下。
30
31ID 号从0开始,每有一个额外的ORACLE home递增。
32
33\-----------------------------------------------------------------
34参数 描述
35\-----------------------------------------------------------------
36ORA_SID_AUTOSTART 设定为TRUE的时候
37(默认值),ORACLEServiceSID启动的时候启动 数据
38库。
39ORA_SID_PFILE 设定INIT.ORA参数文件的全路径。
40ORA_SHUTDOWN 当设定为TRUE的时候,在当前任何ORACLE
41home下的任何数据库将shutdown。
42ORA_SID_SHUTDOWN 设定为TRUE的时候,关闭标记SID值的ORACLE8i数据库。
43\-----------------------------------------------------------------
44如果
45SHUTDOWN参数设定为FALSE,停掉ORACLEServiceSID将会abort的方式关闭实例,下次启动的
46时候要进行实例恢复。
47
48
49下面的可选参数可以在注册表中设为合适的值
50
51\-----------------------------------------------------------------
52参数 描述
53\-----------------------------------------------------------------ORA_SID_SHUTDOWNTYPE 指明数据库关闭模式Aabort),
54
55I (immediate), N (normal)。
56如果你不设定这个参数的话,
57默认的模式是 I (immediate)。
58ORA_SID_SHUTDOWN_TIMEOUT 在一个SID停止前等待的最大时间。
59\-----------------------------------------------------------------
60
61**操作系统认证**
62
63OS认证在两个平台间是相似的,参数文件中设定os_authent_prefix
64参数,创建用户都标记为externally。在Windows2000中创建用户要指定大写的域名并且用户名要在 "" 中,否则不起作用。如果你在注册表中把 OSAUTH_PREFIX_DOMAIN 设定成FALSE的话,你可以忽略掉域。客户机和服务器的机器还需要在sqlnet.ora中包含sql net.authentication_services=(nts)这一行。
65
66在 Windows 2000 中,可以允许一个域用户登陆到一个远程pc上,无需提供额外的密码就可以连接到数据库中。参见[2 K elly III,2000]可以得到详细内容。
67
68
69**LISTENER**
70
71在 Windows 2000上面 listener作为一个服务实现的,所以listener可以通过启动 ORACLETNSListener 服务来启动。两种平台上listener都可以从lsnrctl命令控制。在Unix上lsnrctl start启动 listener 进程;在 Windows
722000启动 ORACLETNSListener 服务就可以。 如果listener第一次启动的时候没有ORACLETNSListener服务将创建它。如果从你的计算机中删除ORACLE的话,listener 服务要手工从注册表中删除。
73
74在两个平台上的listener都可以监听不同版本的数据库。在win2000中,
75在LISTENER.ORA中不需要ORACLE_HOME参数(在UNIX中要使用到的),因为每个SID在SERVER中是唯一的。listener可以从注册表中得到正确的ORACLE_HOME。
76
77ORACLE8i 有个特性叫服务器注册,pmon自动对listener注册信息。这意味着Net8 listener可以无需在listener.ora文件中设置就可以监听一个数据库。不过这样做的话,Enterprise Manager要直到启动后才可以连接到数据库。所以这个例子不能用来启动一个远程的实例。通常最好在listener.ora中设置所有的实例以避免冲突,尤其在一个有多位DBA的站点中,,可以避免我们提到的 Enterprise Manager 问题。
78
79
80**加长的SID名字**
81
82Windows NT上的ORACLE 7 实例名字有着4个字符长的限制,这可能会产生很晦涩的实例名--庆幸的是在8i中SID名字已经加长了。不过在包括命名服务的几个场合中使用太长的实例名字也不总是很有用。在Windows 2000上面有个bug,限制了实例名字最长15个字符。
83
84\----------------------------------------------------------------
85Unix NT
86\----------------------------------------------------------------
87数据库名 实例名 数据库名 实例名
88\----------------------------------------------------------------
89ORACLE7 8 8 8 4
90ORACLE8 8 8 8 4
91ORACLE8i 8 64 8 64
92\----------------------------------------------------------------
93
94
95**数据库的创建**
96
97当你在安装过程中的时候选择创建ORACLE 8i数据库,数据库生成助手就会通过ORACLE Universal Installer
98自动运行。在安装后它也可以作为一个单独的工具手工运行。用它还可以手工的输入SID代替默认的ORCL,默认的情况下,不在ORACLE_HOME下面创建数据库,完全遵循OFA的意图。
99
100建议你运行Database Creation Assistant,不过在最后一页选择 Save information to a batch file(保存信息到一个批处理文件中),再点击"完成"按钮。这会产生几个脚本。从不同的平台对比它们的内容很有趣的。在Unix 和
101Windows上的内容很相似,除了windows上对oradim的调用不同。第一次对它的调用产生了一个与ORACLE 数据库相关联的ORACLE服务:
102
103D:\ORACLE\Ora817\bin\oradim -new -sid ATEI -intpwd man -startmode manual -pfile
104"D:\ORACLE\admin\atei\pfile\initatei.ora"
105
106第二次对oradim的调用把服务更改为自动启动:
107
108D:\ORACLE\Ora817\bin\oradim -edit -sid atei -startmode auto
109
110可以用这些文件作为创建其它数据库的模版。若你不使用上面建议的方式创建数据库的话,Database Creation Assistant 生成的这些文件和目录没什么大用处。在使用这些脚本创建额外的数据库之前,这些文件和目录不得实现创建。特别注明一下,脚本假定一个密码文件已经存在,密码文件可以用orapwd命令预创建[2 H Kelly III, 2000]。
111
112
113
114
115Database Creation Assistant 创建的目录:
116
117---
118
119Windows 2000
120
121ORACLE_BASE = D:\oracle
122
123|
124
125Unix
126
127ORACLE_BASE = /db01/app/oracle
128
129ORACLE_BASE\oradata\atei
130
131|
132
133$ORACLE_BASE/oradata/eighti
134
135ORACLE_BASE\oradata\atei\archive
136
137|
138
139$ORACLE_BASE/oradata/eighti/archive
140
141ORACLE_BASE\admin\atei
142
143|
144
145$ORACLE_BASE/admin/eighti
146
147还有这些子文件夹
148
149sadhoc bdump cdump create exp pfile udump
150
151
152
153
154通过 Database Creation Assistant 创建 / 改动的文件:
155
156---
157
158Windows 2000
159
160ORACLE_HOME = D:\oracle\ora817
161
162|
163
164Unix
165
166ORACLE_HOME = /db01/app/oracle/product/8.1.7
167
168ORACLE_HOME\database\PWDatei.ora
169
170|
171
172$ORACLE_HOME/dbs/orapweighti.ora
173
174ORACLE_BASE\admin\atei\pfile\initatei.ora
175
176|
177
178$ORACLE_BASE/admin/eighti/pfile/initeighti.ora
179
180ORACLE_HOME\database\initatei.ora
181
182包含一行
183
184IFILE='d:\oracle\admin\atei\pfile\initatei.ora‘
185
186|
187
188$ORACLE_HOME/dbs/initeighti.ora
189
190符号链接到:
191
192/db01/app/oracle/ admin/eighti/pfile/initeighti.ora
193
194添加到 tnsnames.ora 的条目
195
196|
197
198添加到 tnsnames.ora 的条目
199
200添加到 listener.ora 的条目
201
202|
203
204添加到 listener.ora 的条目
205
206windows 没有相关的操作
207
208|
209
210添加项目到 oratab
211
212通过 Database Creation Assistant 创建的脚本:
213
214---
215
216Windows 2000
217
218|
219
220Unix
221
222|
223
224注释
225
226atei.bat
227
228|
229
230eighti
231
232|
233
234调用其它脚本 , 在 Windows 上还可以调用 ORADIM
235
236ateirun.sql
237
238|
239
240eightirun.sh
241
242|
243
244包含创建数据库的语句
245
246ateirun1.sql
247
248|
249
250eightirun1.sh
251
252|
253
254创建表空间 / 创建回滚段
255
256不创建系统中的第二个回滚段
257
258N/a
259
260|
261
262eightirun2.sh
263
264|
265
266额外的脚本(如, catproc ) ,
267这些在 Windows 上从 ateirun1.sql 中运行
268
269ateisqlplus.sql
270
271|
272
273eightisqlplus.sh
274
275|
276
277添加 SQL*Plus 帮助
278
279@c:\oracle\ora817\sqlplus\admin\help\helpbld.sql helpus.sql
280
281ateialterTablespace.sql
282
283|
284
285eightialterTablespace.sh
286
287|
288
289为 SYSTEM 用户更改默认的和临时的表空间
290
291ateireplicate.sql
292
293ateijava.sql
294
295ateiordinst.sql
296
297ateiiMedia.sql
298
299ateidrsys.sql
300
301ateicontext.sql
302
303ateispatial1.sql
304
305ateitimeseries.sql
306
307ateivirage.sql
308
309|
310
311eightireplicate.sh
312
313eightijava.sh
314
315eightiordinst.sh
316
317eightiiMedia.sh
318
319eightidrsys.sh
320
321eighticontext.sh
322
323eightispatial1.sh
324
325eightitimeseries.sh
326
327eightivirage.sh
328
329|
330
331各种脚本,只有在你选择相应的选项的时候才会生成。
332
333
334远程挂接的文件系统,如UNIX上的NFS和Windows 2000上UNC,在两个平台上都不支持。</dbname>