RAC环境下,初始化参数文件与但实例下参数文件有些异同,主要表现在初始化参数可以为多个实例公用,也可以单独设置各个实例的初始化参数。对于那些非共用的初始化参数则必须要单独设置,而共用的则可以单独设置,但一般不建议这么用。本文描述RAC 环境下参数文件(spfile)的相关管理工作。
有关RAC环境下的重要参数描述,请参考:RAC 环境下重要参数
1. 1、参数文件的位置
2.
3. SQL> show parameter instance_name
4.
5. NAME TYPE VALUE
6. ------------------------------------ ----------- ------------------------------
7. instance_name string ora10g1
8. SQL> show parameter spfile;
9.
10. NAME TYPE VALUE
11. ------------------------------------ ----------- ------------------------------
12. spfile string +DG1/ora10g/spfileora10g.ora
13.
14. SQL> show parameter instance_name
15.
16. NAME TYPE VALUE
17. ------------------------------------ ----------- ------------------------------
18. instance_name string ora10g2
19. SQL> show parameter spfile
20.
21. NAME TYPE VALUE
22. ------------------------------------ ----------- ------------------------------
23. spfile string +DG1/ora10g/spfileora10g.ora
24.
25. SQL> show parameter cluster
26.
27. NAME TYPE VALUE
28. ------------------------------------ ----------- ------------------------------
29. cluster_database boolean TRUE
30. cluster_database_instances integer 2
31.
32.
33. oracle@bo2dbp:~> cd /u01/oracle/admin/ora10g
34. oracle@bo2dbp:/u01/oracle/admin/ora10g> ls
35. adump bdump cdump dpdump hdump pfile udump
36. oracle@bo2dbp:/u01/oracle/admin/ora10g> cd pfile
37. oracle@bo2dbp:/u01/oracle/admin/ora10g/pfile> ls -hltr
38. total 4.0K
39. -rw-r----- 1 oracle oinstall 2.7K 2012-09-27 12:12 init.ora.8272012121245
40. oracle@bo2dbp:/u01/oracle/admin/ora10g/pfile> cd $ORACLE_HOME/dbs
41. oracle@bo2dbp:/u01/oracle/db/dbs> ls *.ora
42. init+ASM1.ora initdw.ora initGOBO1A_tmp.ora initGOBO4A.ora init.ora initora10g1.ora
43. oracle@bo2dbp:/u01/oracle/db/dbs> more initora10g1.ora
44. SPFILE='+DG1/ora10g/spfileora10g.ora'
45. oracle@bo2dbs:/u01/oracle/db/dbs> more initora10g2.ora
46. SPFILE='+DG1/ora10g/spfileora10g.ora'
47.
48. #由上面的查询可知RAC环境下的参数文件通常都存放在RAW或者ASM中,缺省路径为$ORACLE_HOME/dbs/init{ORACLE_SID}.ora
49. #各个实例只是存放pfile文件,pfile文件的内容是指向spfile文件的位置,即告诉,兄弟,你去xx去找那个spfile吧,哈哈,,,
50. #注,Oracle数据库启动时会先找spfile${ORACLE_SID.ora},如果对应的spfile不存在则找spfile.ora
51. #如果spfile.ora找不到,则找相应的pfile(init{ORACLE_SID}.ora)
52. #那,要是都找不到呢,那就是用缺省的init.ora尝试启动实例
53.
54. 2、参数文件的备份
55. 参数文件备份的方式有很多种,一般情况下当启用了RMAN自动备份控制文件时,会自动备份参数文件。
56. 其次是手工备份参数文件,这种方式通常是将spfile内容转换为pfile,说简单点,转为文本文件保存,文件名任意。
57. 建议在修改参数文件之前先手工备份参数文件,使用命令: create pfile=['<dir>'] from spfile;
58. 注,单实例情形下,如果使用spfile文件启动实例,可以通过上面的方式直接备份,RAC环境下这么干,那就把pfile文件给覆盖了
59. 因此,RAC环境下建议为pfile文件指定不同的文件名。如当前为initora10g1.ora,则可以指定为initora10g1.ora.bak
60. SQL> create pfile='/u01/oracle/db/dbs/initora10g1.ora.bak' from spfile;
61.
62. File created.
63.
64. SQL> ho ls /u01/oracle/db/dbs/*ora10g*
65. /u01/oracle/db/dbs/hc_ora10g1.dat /u01/oracle/db/dbs/initora10g1.ora.bak
66. /u01/oracle/db/dbs/initora10g1.ora /u01/oracle/db/dbs/orapwora10g1
67.
68. SQL> ho more /u01/oracle/db/dbs/initora10g1.ora.bak
69. ora10g2.__db_cache_size=142606336
70. ora10g1.__db_cache_size=163577856
71. ora10g1.__java_pool_size=4194304
72. ora10g2.__java_pool_size=4194304
73. ora10g1.__large_pool_size=4194304
74. ora10g2.__large_pool_size=4194304
75. ora10g2.__shared_pool_size=180355072
76. ora10g1.__shared_pool_size=159383552
77. ora10g1.__streams_pool_size=0
78. ora10g2.__streams_pool_size=0
79. *.audit_file_dest='/u01/oracle/admin/ora10g/adump'
80. *.background_dump_dest='/u01/oracle/admin/ora10g/bdump'
81. *.cluster_database_instances=2
82. *.cluster_database=true
83. *.compatible='10.2.0.3.0'
84. *.control_files='+DG2/ora10g/controlfile/current.286.795096347',
85. '+REV/ora10g/controlfile/current.295.795096347'
86. *.core_dump_dest='/u01/oracle/admin/ora10g/cdump'
87. *.db_block_size=8192
88. *.db_create_file_dest='+DG2'
89. *.db_domain=''
90. *.db_file_multiblock_read_count=16
91. *.db_name='ora10g'
92. *.db_recovery_file_dest='+REV'
93. *.db_recovery_file_dest_size=2147483648
94. *.dispatchers='(PROTOCOL=TCP) (SERVICE=ora10gXDB)'
95. ora10g2.instance_number=2
96. ora10g1.instance_number=1
97. *.job_queue_processes=10
98. ora10g1.local_listener='local_lsnr_ora10g1'
99. ora10g2.local_listener='local_lsnr_ora10g2'
100. *.open_cursors=300
101. *.pga_aggregate_target=112197632
102. *.processes=150
103. *.remote_listener='REMOTE_LSNR_ORA10G'
104. *.remote_login_passwordfile='exclusive'
105. *.sga_target=337641472
106. ora10g2.thread=2
107. ora10g1.thread=1
108. *.undo_management='AUTO'
109. ora10g2.undo_tablespace='UNDOTBS2'
110. ora10g1.undo_tablespace='UNDOTBS1'
111. *.user_dump_dest='/u01/oracle/admin/ora10g/udump'
112.
113. 对于上面的参数文件里列出的信息,如果参数前面带有星号,则表明当前的参数为共用参数,前面有实例名的则为实例参数
114.
115. 3、参数文件的修改
116. 参数文件中参数修改方式如下:
117. alter system|session set parametername = values scope = memory | spfile |both sid = 'sid' | ‘*’;
118.
119. scope
120. memory : 只对当前有效,下次启动则失效
121. spfile : 只对spfile 修改,必须经过下一次启动才生效,当前的实例没有修改
122. both :内存与参数文件都将修改,当不指定scope时,缺省为both.
123. system | session
124. system : system级别有效,影响整个系统及所有使用者
125. session : 仅当前session有效,一旦退出之后将实效
126. 'sid' | ‘*’
127. 这个在RAC环境下使用的较为频繁,指定sid_name则当前指定的实例生效,如果指定 '*',则所有实例生效
128. 注,缺省情况下为sid='*',因此修改是不要忘了,如果没有指定sid,则RAC上的所有实例都会被修改
129.
130. 下面是修改示例
131. SQL> show parameter instance_name
132.
133. NAME TYPE VALUE
134. ------------------------------------ ----------- -------------------
135. instance_name string ora10g1
136.
137. SQL> show parameter pga
138.
139. NAME TYPE VALUE
140. ------------------------------------ ----------- -------------------
141. pga_aggregate_target big integer 107M
142.
143. SQL> alter system set pga_aggregate_target=100m scope=both sid='ora10g1'; -->将ora10g1的pga改为100m
144.
145. System altered.
146.
147. SQL> alter system set pga_aggregate_target=90m sid='ora10g2'; -->将ora10g2的pga改为90m
148.
149. System altered.
150.
151. SQL> show parameter pga -->当前的pga已经被改为100m
152.
153. NAME TYPE VALUE
154. ------------------------------------ ----------- ------------------------------
155. pga_aggregate_target big integer 100M
156.
157. SQL> conn system/oracle@ora10g2 -->连接到实例 ora10g2
158. Connected.
159. SQL> show parameter instance_name
160.
161. NAME TYPE VALUE
162. ------------------------------------ ----------- ------------------------------
163. instance_name string ora10g2
164. SQL> show parameter pga -->此时pga的值显示为90m
165.
166. NAME TYPE VALUE
167. ------------------------------------ ----------- ------------------------------
168. pga_aggregate_target big integer 90M
169.
170. SQL> create pfile='/u01/oracle/db/dbs/initora10g1.ora.emp' from spfile;
171. create pfile='/u01/oracle/db/dbs/initora10g1.ora.emp' from spfile
172. *
173. ERROR at line 1:
174. ORA-01031: insufficient privileges -->缺乏权限,因为当前连接的是instance ora10g2
175.
176. SQL> conn system/oracle@ora10g1
177. Connected.
178.
179. SQL> create pfile='/u01/oracle/db/dbs/initora10g1.ora.tmp' from spfile;
180.
181. File created.
182.
183. SQL> ho cat /u01/oracle/db/dbs/initora10g1.ora.tmp |grep pga
184. *.pga_aggregate_target=112197632 #新的pfile文件中同时存在pga的值
185. ora10g1.pga_aggregate_target=104857600 #有两个指定了实例名,此时谁生效呢?我们前面已经查询出了结果
186. ora10g2.pga_aggregate_target=94371840 #同一参数,有实例名的值将优先有带*的参数值
187.
188. SQL> alter system reset pga_aggregate_target sid='ora10g1';-->使用reset方式重置pga,或恢复缺省值
189. -->如果需要保留两个新改的参数,建议reset之前的共用参数以避免混淆
190. System altered. -->在reset原来的参数时,不指定sid或sid='*'
191. SQL> show parameter pga
192.
193. NAME TYPE VALUE
194. ------------------------------------ ----------- ------------------------------
195. pga_aggregate_target big integer 100M
196.
197. SQL> conn system/oracle@ora10g2
198. Connected.
199. SQL> alter system reset pga_aggregate_target sid='ora10g2';
200.
201. System altered.
202.
203. #Author : Robinson
204. #Blog : http://blog.csdn.net/robinson_0612
205.
206. SQL> show parameter pga
207.
208. NAME TYPE VALUE
209. ------------------------------------ ----------- ------------------------------
210. pga_aggregate_target big integer 90M
211.
212. oracle@bo2dbp:~> srvctl stop instance -d ora10g -i ora10g1
213. oracle@bo2dbp:~> srvctl start instance -d ora10g -i ora10g1
214. SQL> show parameter instance_name
215.
216. NAME TYPE VALUE
217. ------------------------------------ ----------- -------------------
218. instance_name string ora10g1
219.
220. SQL> show parameter pga
221.
222. NAME TYPE VALUE
223. ------------------------------------ ----------- -------------------
224. pga_aggregate_target big integer 107M
225.
226. 4、spfile文件位置的修改
227. SQL> show parameter spfile;
228.
229. NAME TYPE VALUE
230. ------------------------------------ ----------- ------------------------------
231. spfile string +DG1/ora10g/spfileora10g.ora
232.
233. SQL> create spfile='+REV/ORA10G/spfileora10g.ora'
234. 2 from pfile='/u01/oracle/db/dbs/initora10g1.ora.bak';
235.
236. File created.
237.
238. SQL> ho echo "spfile='+REV/ORA10G/spfileora10g.ora'" >/u01/oracle/db/dbs/initora10g1.ora
239.
240. SQL> ho more /u01/oracle/db/dbs/initora10g1.ora
241. spfile='+REV/ORA10G/spfileora10g.ora'
242.
243. SQL> startup force;
244. SQL> show parameter spfile;
245.
246. NAME TYPE VALUE
247. ------------------------------------ ----------- ------------------------------
248. spfile string +REV/ora10g/spfileora10g.ora
249. SQL> shutdown immediate;
250. SQL> exit
251. oracle@bo2dbp:~> ssh bo2dbs
252. Last login: Fri Sep 28 15:42:59 2012 from 192.168.1.108
253. oracle@bo2dbs:~> echo "spfile='+REV/ORA10G/spfileora10g.ora'" >/u01/oracle/db/dbs/initora10g2.ora
254. oracle@bo2dbs:~> srvctl stop database -d ora10g
255. oracle@bo2dbs:~> srvctl start database -d ora10g
256. oracle@bo2dbs:~> export ORACLE_SID=ora10g2
257. oracle@bo2dbs:~> sqlplus / as sysdba
258. SQL> show parameter pfile; -->查看时还是使用之前的spfile文件
259.
260. NAME TYPE VALUE
261. ------------------------------------ ----------- ------------------------------
262. spfile string +DG1/ora10g/spfileora10g.ora
263.
264. oracle@bo2dbs:~> srvctl config database -d ora10g -a
265. bo2dbp ora10g1 /u01/oracle/db
266. bo2dbs ora10g2 /u01/oracle/db
267. DB_NAME: ora10g
268. ORACLE_HOME: /u01/oracle/db
269. SPFILE: +DG1/ora10g/spfileora10g.ora
270. DOMAIN: null
271. DB_ROLE: null
272. START_OPTIONS: null
273. POLICY: AUTOMATIC
274. ENABLE FLAG: DB ENABLED
275. #下面将参数文件路径更新到ocr,此时数据库并未shutdown,生产环境建议先停止数据库然后再修改
276. oracle@bo2dbs:~> srvctl modify database -d ora10g -p '+REV/ORA10G/spfileora10g.ora'
277. oracle@bo2dbs:~> srvctl stop database -d ora10g
278. oracle@bo2dbs:~> srvctl config database -d ora10g -a
279. bo2dbp ora10g1 /u01/oracle/db
280. bo2dbs ora10g2 /u01/oracle/db
281. DB_NAME: ora10g
282. ORACLE_HOME: /u01/oracle/db
283. SPFILE: +REV/ORA10G/spfileora10g.ora
284. DOMAIN: null
285. DB_ROLE: null
286. START_OPTIONS: null
287. POLICY: AUTOMATIC
288. ENABLE FLAG: DB ENABLED
289. oracle@bo2dbs:~> srvctl start database -d ora10g
290. oracle@bo2dbs:~> sqlplus / as sysdba
291. SQL> show parameter spfile;
292.
293. NAME TYPE VALUE
294. ------------------------------------ ----------- ------------------------------
295. spfile string +REV/ora10g/spfileora10g.ora
296.
297. #使用srvctl start启动时,不会依赖类似于单实例环境或rac环境下的sqlplus启动数据库时按顺序寻找spfile文件,
298. #而是直接根据ocr中spfile文件位置启动数据库。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31448824/viewspace-2139500/
,如需转载,请注明出处,否则将追究法律责任。