注意:后序需要用到这些文件的位置,可以在查询完毕之后先截图保存
sqlplus sys as sysdba
SELECT name FROM v$datafile;
SELECT name FROM v$controlfile;
select member from V$logfile;
这里我们选择这些文件的上一级目录作为目录文件,可以自由选择位置
mkdir -p /u01/app/oracle/oradata/data
mkdir -p /u01/app/oracle/oradata/ctl
mkdir -p /u01/app/oracle/oradata/log
成功创建
chmod -R 775 /u01/app/oracle/oradata/data
chmod -R 775 /u01/app/oracle/oradata/ctl
chmod -R 775 /u01/app/oracle/oradata/log
chown -R oracle:oinstall /u01/app/oracle/oradata/data
chown -R oracle:oinstall /u01/app/oracle/oradata/ctl
chown -R oracle:oinstall /u01/app/oracle/oradata/log
授权,保证不在权限方面出问题
关闭数据库
shutdown immediate
然后我们要找到pfile的位置
切换到dbs目录下
cd $ORACLE_HOME/dbs/
我们可以看到自己的init.ora这个文件
编辑init.ora
vi init.ora
我们修改这个控制文件的位置
将这里修改为:
/u01/app/oracle/oradata/ctl/control01.ctl,/u01/app/oracle/fast_recovery_area/orcl/control02.ctl
![]()
根据我们第一步找到的控制文件的位置去寻找控制文件(这里我们只移动控制文件1做个演示,如果你想全移动也可以)
mv /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/ctl/control01.ctl
现在我们去查看文件是否转移成功
cd /u01/app/oracle/oradata/ctl
我们可以看到已经移动成功了
然后登录数据库
sqlplus / as sysdba
然后启动到mount下。这里可以能报错,不用管
STARTUP MOUNT;
ALTER SYSTEM SET CONTROL_FILES='' SCOPE=SPFILE;
再次关闭数据库
SHUTDOWN IMMEDIATE;
启动到nomount状态下
STARTUP NOMOUNT;
ALTER SYSTEM SET CONTROL_FILES='/u01/app/oracle/oradata/ctl/control01.ctl', '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' SCOPE=SPFILE;
进入mount状态
ALTER DATABASE MOUNT;
出错了,说明还没有成功生效,退出登录从新进入然后再次启动就可以成功了,如下图
查看control_files路径:
show parameter control_files;
重启数据库一切正常,说明我们成功啦。
关闭数据库
shutdown immediate
将日志文件进行拷贝:
cp /u01/app/oracle/oradata/orcl/redo03.log /u01/app/oracle/oradata/ctl/redo03.log
启动到mount下
STARTUP MOUNT;
修改日志文件:
ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/redo03.log' TO '/u01/app/oracle/oradata/ctl/redo03.log';
启动数据库
ALTER DATABASE OPEN;
查找日志文件位置:
select member from V$logfile;
发现修改完成。