本篇内容介绍了“数据库重命名和迁移日志文件、数据文件的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
目的:在某些情况下,数据文件或者日志文件必须被重新命名或迁移到新的位置上,然而想要让这些文件仍然有效,那么就需要为这些文件定义一个物理的名字或者物理位置,例如,在以下情况发生时,就需要重新命名数据文件或者日志文件:
1.出于性能或者维护原因,需要将一个数据库文件移动到一个不同的磁盘上
2.从备份中恢复一个数据文件,但是这个以前存放数据文件的磁盘已经崩溃,那么就需要将这个数据文件重新分配到一个新的磁盘上
3.在操作系统级别,已经移动或者重命名一个数据文件,但是在数据库层即数据库内却没有进行重命名,在数据库启动的过程中得到 ORA-01157 和 ORA-01110 报错信息。如果数据库处于打开状态下,在操作系统级别重命名了数据文件或者移动了数据文件到其他的位置,当通过normal 或者 immediate 方式关闭数据库的时候,会得到 ORA-01116 和 ORA-01110 报错;
以下将通过三个方面来对本主题进行相关的讨论:
I 数据库打开的状态下,重命名或者移动数据文件
II 数据库关闭的状态下,重命名或者移动数据文件
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表空间上线即 ONLINE
alter 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 mount
4. 在数据库级别,重命名日志文件
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.log
7.验证
ORACLE>select mane from v$logfile;
“数据库重命名和迁移日志文件、数据文件的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。