重命名和迁移日志文件、数据文件

来源:这里教程网 时间:2026-03-03 14:45:13 作者:

目的:在某些情况下,数据文件或者日志文件必须被重新命名或迁移到新的位置上,然而想要让这些文件仍然有效,那么就需要为这些文件定义一个物理的名字或者物理位置,例如,在以下情况发生时,就需要重新命名数据文件或者日志文件: 1.出于性能或者维护原因,需要将一个数据库文件移动到一个不同的磁盘上 2.从备份中恢复一个数据文件,但是这个以前存放数据文件的磁盘已经崩溃,那么就需要将这个数据文件重新分配到一个新的磁盘上 3.在操作系统级别,已经移动或者重命名一个数据文件,但是在数据库层即数据库内却没有进行重命名,在数据库启动的过程中得到 ORA-01157 和 ORA-01110 报错信息。如果数据库处于打开状态下,在操作系统级别重命名了数据文件或者移动了数据文件到其他的位置,当通过normal 或者 immediate 方式关闭数据库的时候,会得到 ORA-01116 和 ORA-01110 报错;以下将通过三个方面来对本主题进行相关的讨论:I    数据库打开的状态下,重命名或者移动数据文件 数据库关闭的状态下,重命名或者移动数据文件III  重命名或者移动日志文件【注意】如果要重命名或者移动的数据文件是 SYSTEM 表空间中的文件,那么,必须用第 II 种方法来达到最终的目的即“数据库关闭的状态下,重命名或者移动数据文件”,因为在数据库打开的状态下,不能够让 SYSTEM 表空间出于 OFFLINE 即离线的状态;下面分别来对不同的情景进行说明:

I    数据库打开的状态下,重命名或者移动数据文件在数据库出于打开的状态下,可以对数据文件进行重新命名或者移动,但是,表空间必须被置于READ-ONLY状态。在 READ-ONLY 状态下,用户可以对这个表空间进行SELECT操作,但不能对表空间进行INSERTS UPDATES 和 DELETES 操作。表空间READ-ONLY状态需要的总时间,取决于数据文件的大小和将一个数据文件从一个位置拷贝到一个新位置的时间消耗将表空间置于READ-ONLY状态,冻结文件头,从而阻止数据文件头被更新。只有在数据文件处于 READ-ONLY状态下,才有可能在数据库出于打开的状态下,对文件进行拷贝。通过以下的步骤来达到重命名或者移动数据文件的目的,本例中,以 USERS 表空间为数据文件所在的表空间:1. 查看 USERS表空间中有多少数据文件SQL>select file_name, status from dba_data_files where tablespace_name = 'USERS';FILE_NAME                     STATUS------------------------------------------------------/u01/oradata/test/users01.dbf       AVAILABLE 2. 确保,在返回的查询结果中,所有数据文件的状态即STATUS的值都是 AVAILABLE 3. 将 USERS表空间置为 READ ONLY状态altertablespace users read only; 4. 确保 USERS表空间在数据字典中已经被置于 READ ONLY状态SQL>select tablespace_name, status from dba_tablespaces where tablespace_name ='USERS';TABLESPACE_NAME        STATUS---------------------------------------USERS                 READ ONLY 5. 使用操作系统命令,将数据文件拷贝到一个新的位置。当数据文件被拷贝到一个新的位置之后,需要做的也是最重要的就是要比较两个数据文件的大小是否一致,因为可能在复制的过程中出现数据丢失的情况ORACLE> cp /u01/oradata/test/users01.dbf /jiachunyun/test/users01.dbf注意哦:同样,可以利用上面的方法,进行数据文件的重命名,也改变数据文件的位置。(我只改变了位置/jiachunyun/test) 6. 当数据文件已经拷贝到新的位置之后,将USERS表空间置于 OFFLINE状态altertablespace users offline; 7. 当表空间被置于 OFFLINE状态时,需要做的是在数据库层重新命名数据文件到新的位置上,这个操作会更新控制文件中的数据文件的位置信息alter database rename file '/u01/oradata/test/users01.dbf' to '/jiachunyun/test/users01.dbf'; 8. 当确认所有的 rename操作完成之后,将 USERS表空间上线即 ONLINEalter tablespace users online; 9. 当将表空间重新置为 ONLINE状态,需要将表空间重新置为 READ WRITE即读写状态alter tablespace users read write; 10. 检查表空间的状态是否为READ WRITE状态SQL>select tablespace_name, status from dba_tablespaces where tablespace_name ='USERS';TABLESPACE_NAME        STATUS---------------------------------------USERS                 ONLINE 11. 查看修改后的数据文件的位置SQL>select file_name, status from dba_data_files where tablespace_name = 'USERS';FILE_NAME                     STATUS------------------------------------------------------/jiachunyun/test/users01.dbf             AVAILABLE 13. 在操作系统级别,在原来的旧的目录中,将旧的数据文件删除ORACLE> rm -rf /u01/oradata/test/users01.dbf

II   数据库关闭的状态下,重命名或者移动数据文件1. 查看 USERS表空间中,数据文件的位置SQL>select file_name,tablespace_name,file_id from dba_data_files wheretablespace_name = 'USERS';FILE_NAME                     TABLESPACE_NAME         FILE_ID--------------------------------------------------------------------------- -------/u01/oradata/users01.dbf             USERS                     4 2. 关闭数据库shutdown immediate 3. 在操作系统级别将数据文件重命名或者移动到新的位置上,或者移动新的位置上并且重命名ORACLE> cp /u01/oradata/test/users01.dbf /jiachunyun/test/users01.dbf     等 4. 启动数据库到 mount状态startup mount;【说明】:这个操作会读取控制文件,但是不会将数据文件 mount 5. 在数据库内重新命名数据文件alter database rename file '/u01/oradata/users01.dbf' to '/jiachunyun/test/users01.dbf';alter database rename file '/u01/oradata/sysaux01.dbf' to '/jiachunyun/test/sysaux01.dbf';alter database rename file '/u01/oradata/undotbs01.dbf' to '/jiachunyun/test/undotbs01.dbf';alter database rename file '/u01/oradata/users01.dbf' to '/jiachunyun/test/users01.dbf'; 6. 打开数据库alter database open; 7. 查询 v$dbfile视图,来确认修改已经成功SQL>select name from v$datafile ;NAME ------------------------------------------------/jiachunyun/test/users01.dbf/jiachunyun/test/sysaux01.dbf/jiachunyun/test/undotbs01.dbf/jiachunyun/test/users01.dbf/jiachunyun/test/undotb1.dbf 8. 在操作系统级别,将旧的数据文件从旧的目录位置中删除ORACLE>rm -rf /u01/oradata/users01.dbf          等 数据库关闭的状态下,重命名或者移动控制文件 【注意】最好分3个不同的磁盘 ,以便坏了一块磁盘 1. 查看 USERS 表空间中,控制文件的位置SQL>select name from v$controlfile; NAME                    --------------------------------------------------------------------------- -------/u01/oradata/control01.ctl/u01/oradata/control02.ctl     

2 改变第二个控制文件路径,并且告诉spfile,(文件有几个写几个,02的原/u01/oradata/test,新/jiachunyun/test)

SQL> alter system set control_files='/u01/oradata/test/control01.ctl','/jiachunyun/test/control02.ctl' scope=spfile;  2. 关闭数据库shutdown immediate 3. 在操作系统级别将控制文件重命名或者移动到新的位置上,或者移动新的位置上并且重命名ORACLE> cp /u01/oradata/test/control01.ctl /jiachunyun/test/control02.ctl             --02路径一定要对应上面的alter路径

  4. 启动数据库 ,并验证SQL>startup SQL> select name from v$controlfile; 5.添加第三条控制文件03 SQL>alter system set control_file='/u01/oradata/test/control01.ctl','/jiachunyun/test/control02.ctl','/u01/oradata/test/control03.ctl' scope=spfile; 6. 关闭数据库 shutdown immediate 7. 在操作系统级别将控制文件重命名或者移动到新的位置上,ORACLE> cp /u01/oradata/test/control01.ctl /jiachunyun/test/control03.ctl        8. 启动数据库 ,并验证SQL>startup SQL> select name from v$controlfile;NAME -------------------------------------------------------------------------------- /u01/oradata/test/control01.ctl /jiachunyun/test/control02.ctl /u01/oradata/test/control03.ctl

III  重命名或者移动日志文件1.  关闭数据库2.  在操作系统级别,将日志文件重命名或者移动到新的位置上,或者移动新的位置上并且重命名ORACLE> cp /u01/oradata/test/redo01.log /jiachunyun/test/redo01.log     等 3.  将数据库启动到 mount 状态startup mount4.  在数据库级别,重命名日志文件 alter database rename file '/u01/oradata/test/redo01.log' to'/jiachunyun/test/redo01.log';     等 5.  打开数据库alter database open;6.  在操作系统级别,将旧的数据文件从旧的目录位置中删除ORACLE> rm -rf /u01/oradata/test/redo01.log7.验证ORACLE>select mane from v$logfile;

相关推荐