环境
操作系统:CentOS Linux release 7.9.2009 (Core)
数据库:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0(非容器数据库,非ASM文件管理)
旧文件目录:/oradata/
新文件目录:/home/oradata/
步骤1. 先查看各类文件所在的磁盘位置
1.1. 数据文件
-
查看磁盘位置
SELECT * FROM dba_data_files;
-
生成数据文件名更换的SQL语句
SELECT 'ALTER DATABASE RENAME FILE ''' || a.FILE_NAME || ''' TO ''' || '/home' || a.FILE_NAME || ''';' FROM dba_data_files a;
-
迁移语句示例
ALTER DATABASE RENAME FILE '/oradata/xxxx/system01.dbf' TO '/home/oradata/xxxx/system01.dbf'; ALTER DATABASE RENAME FILE '/oradata/xxxx/sysaux01.dbf' TO '/home/oradata/xxxx/sysaux01.dbf'; ALTER DATABASE RENAME FILE '/oradata/xxxx/undotbs01.dbf' TO '/home/oradata/xxxx/undotbs01.dbf'; ALTER DATABASE RENAME FILE '/oradata/xxxx/users01.dbf' TO '/home/oradata/xxxx/users01.dbf';
1.2. 联机重做日志文件
-
查看磁盘位置
SELECT * FROM v$logfile;
-
生成数据文件名更换的SQL语句
SELECT 'ALTER DATABASE RENAME FILE ''' || a.MEMBER || ''' TO ''' || '/home' || a.MEMBER || ''';' FROM v$logfile a;
-
迁移语句示例
ALTER DATABASE RENAME FILE '/oradata/xxxx/redo03.log' TO '/home/oradata/xxxx/redo03.log'; ALTER DATABASE RENAME FILE '/oradata/xxxx/redo02.log' TO '/home/oradata/xxxx/redo02.log'; ALTER DATABASE RENAME FILE '/oradata/xxxx/redo01.log' TO '/home/oradata/xxxx/redo01.log';
1.3. 临时文件
-
查看磁盘位置
SELECT * FROM dba_temp_files;
-
生成临时文件名更换的SQL语句
SELECT 'ALTER DATABASE RENAME FILE ''' || a.file_name || ''' TO ''' || '/home' || a.file_name || ''';' FROM dba_temp_files a;
-
示例
ALTER DATABASE RENAME FILE '/oradata/xxxx/mypdb/ET_TEMP.dbf' TO '/home/oradata/xxxx/mypdb/ET_TEMP.dbf'; ALTER DATABASE RENAME FILE '/oradata/xxxx/temp01.dbf' TO '/home/oradata/xxxx/temp01.dbf';
1.4. 控制文件
步骤2. 创建一个pfile
SQL> create pfile from spfile;
在目录 $ORACLE_HOME/dbs
中查看 init+实例名的文件。
步骤3. 正常关闭数据库
SQL> shu immediate;
步骤4. 将数据文件、日志文件、临时文件、控制文件都拷贝到新的目录中
注意:是拷贝文件,不是mv,防止移动文件时出错!
4.1. 将旧文件目录拷贝到新的目录
~]# cp -r /oradata /home/
~]# chown -R oracle:oinstall /home/oradata
4.2. 将旧文件目录重命名
~]# mv /oradata /oradataBak
步骤5. 修改控制文件位置并启动数据库到mount状态
5.1. 修改步骤2生成的pfile文件中控制文件的位置
5.2. 通过pfile启动到mount状态
SQL> startup pfile='/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initxxxx.ora' mount;
步骤6. 修改数据库中各个文件的位置
6.1. 数据文件
6.2. 日志文件
6.3. 临时文件
7. 创建新的spfile,并重新启动数据库
SQL> create spfile from pfile;
SQL> shu immediate;
SQL> startup;
8. 日志切换无法完成
-
新建了一组日志
SQL> alter database add logfile member '/home/oradata/xxxx/redo01_1.log' to group 1; SQL> alter database add logfile member '/home/oradata/xxxx/redo02_1.log' to group 2; SQL> alter database add logfile member '/home/oradata/xxxx/redo03_1.log' to group 3;
-
删除了旧的日志
SQL> alter database drop logfile member '/home/oradata/xxxx/redo01.log'; SQL> alter database drop logfile member '/home/oradata/xxxx/redo02.log'; SQL> alter database drop logfile member '/home/oradata/xxxx/redo03.log';
-
查看日志文件
SQL> select group#,member from v$logfile;
附录
附录A:参考文档
潇湘隐者 - ORACLE 移动数据文件 控制文件 重做日志文件