sqlplus / as sysdba
SQL> select name from v$controlfile;
NAME
----------------------------------------------
E:\ORACLE\PRODUCT\ORADATA\AZUAY\CONTROL01.CTL
E:\ORACLE\PRODUCT\ORADATA\AZUAY\CONTROL02.CTL
E:\ORACLE\PRODUCT\ORADATA\AZUAY\CONTROL03.CTL
SQL> show parameter spfile
NAME TYPE VALUE
------------ ----------- ------------------------------
spfile string E:\oracle\product\10.2.0\dbs\spfilazuay.ora
(1)spfile文件不能修改,所以要做这一步。
直接利用E:\oracle\product\admin\azuay\pfile\init.ora更改控制文件的位置
control_files=("E:\oracle\product/oradata/azuay/\control01.ctl", "E:\oracle\product/oradata/azuay/\control02.ctl", "E:\oracle\product/oradata/\control03.ctl")
或者在其他位置利用spfile文件生成pfile文件,创建命令如下:
create pfile = 'E:\oracle\product\10.2.0\dbs\init.ora' from spfile;
创建完成后统一更改控制文件位置
control_files=("E:\oracle\product/oradata/azuay/\control01.ctl", "E:\oracle\product/oradata/azuay/\control02.ctl", "E:\oracle\product/oradata/\control03.ctl")
(2)修改完成后,关闭数据库
SQL> shutdown immediate
(3)拷贝控制文件到相关路径下
(4)#启动数据库指定参数文件(使用第一步创建或修改的文件启动)。
startup pfile=E:\oracle\product\admin\azuay\pfile\init.ora
ORACLE instance started.
Total System Global Area 297795584 bytes
Fixed Size 1219064 bytes
Variable Size 83887624 bytes
Database Buffers 209715200 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
通过查看控制文件我们发现控制数据文件路径已经修改
select * from v$controlfile;
1 E:\ORACLE\PRODUCT\ORADATA\AZUAY\CONTROL01.CTL NO 16384 430
2 E:\ORACLE\PRODUCT\ORADATA\AZUAY\CONTROL02.CTL NO 16384 430
3 E:\ORACLE\PRODUCT\ORADATA\CONTROL03.CTL NO 16384 430
查看当前使用的哪个参数文件启动的
SQL> select distinct isspecified from v$spparameter;
ISSPEC
------
FALSE
如果第一个值是FALSE还是TRUE,如果是FALSE,则是pfile,否则是spfile.
SQL> select distinct isspecified from v$spparameter;
ISSPEC
------
TRUE
FALSE
第一行为TRUE可知,是从spfile启动的,有两行,其中第二行为FALSE,表示有两个参数文件,一个是spfile,一个是pfile
(5)创建spfile启动
使用下面命令创建
create spfile = 'E:\oracle\product\10.2.0\dbs\spfileazuay.ora' from pfile ='E:\oracle\product\admin\azuay\pfile\init.ora';
然后我们关闭数据库,重新启动,我们可以看到是spfile启动了
SQL> startup mount (启动实例并加载数据库,但不打开)
SQL> alter database open; (打开数据库)
参数文件的修改:
如果是pfile ,直接使用vi,vim来修改即可
如果是spfile ,则使用 */
alter system|session set parametername = values scope = memory | spfile |both sid = 'sid' | ‘*’;
scope
altersystemset control_files ='E:\oracle\product\oradata\azuay\CONTROL01.CTL','E:\oracle\product\oradata\azuay\CONTROL01.CTL','E:\oracle\product\oradata\CONTROL01.CTL'SCOPE=SPFILE;
memory : 只对当前实例有效,下次启动则失效
spfile : 只对spfile 修改,必须经过下一次启动才生效,当前的实例没有修改
both :内存与参数文件都将修改,当不指定scope时,缺省为both.
system | session
system :