首页 > 数据库 > Oracle > 正文
oracle表空间数据文件的移动
2015-10-16       个评论    来源:fanzhuozhuo 的BLOG  
收藏    我要投稿
需求:把用户的某一个表空间中的数据文件由于某种原因从一个路径移动到里一个路径
 
原因:
 
(1)当前实例中的表空间文件及系统表空间文件全在一块硬盘上,导致IO增加。装数据库表空间移走。减少IO。
 
(2)磁盘空间有限,这个磁盘空间太小了,随着数据的增长,需要换一块大的磁盘
可行性:linux的文件都是通过挂载,到一个目录下,磁盘的移动就只是文件路径的改变。
 
实现此方法有两种方法
 
1.alter tablespace
 
(1)查看要改变的这个表空间所对应的数据文件信息
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='MAIL';
TABLESPACE_NAME                FILE_NAME
------------------------------ --------------------------------------------------------------------------------
MAIL                           /u01/app/oracle/oradata/orcl/mail.dbf
 
(2)使表空间脱机
SQL> alter tablespace mail offline;
 
表空间已更改。
SQL> select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='MAIL';
TABLESPACE_NAME                FILE_NAME                                                                        ONLINE_STATUS
------------------------------ -------------------------------------------------------------------------------- -------------
MAIL                           /u01/app/oracle/oradata/orcl/mail.dbf                                            OFFLINE
 
(3)把原来的数据文件复制到新的路径
SQL> host cp '/u01/app/oracle/oradata/orcl/mail.dbf' '/home/oracle/mail01.dbfdbf'
 
(4)修改数据文件名字,路径。(注意:实际就是修改控制文件,告诉控制文件这个表空间的数据文件改变了)
SQL> alter tablespace mail rename datafile '/u01/app/oracle/oradata/orcl/mail.dbf' to '/home/oracle/mail01.dbfdbf';
表空间已更改。
 
(5)表空间在线
SQL> alter tablespace mail online;
 
(6) 查看表空间对应的数据文件状态
SQL>  select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='MAIL';
TABLESPACE_NAME                FILE_NAME                                                                        ONLINE_STATUS
------------------------------ -------------------------------------------------------------------------------- -------------
MAIL                           /home/oracle/mail01.dbfdbf                                                       ONLINE
 
注意:此方法仅适用于能offline的表空间,仅适用于普通的表空间,系统表空间不行。
 
而sysaux表空间可以用此方法实现
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='SYSAUX';
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSAUX
/u01/app/oracle/oradata/orcl/sysaux01.dbf
SQL> alter tablespace sysaux offline;
 
表空间已更改。
SQL> host cp '/u01/app/oracle/oradata/orcl/sysaux01.dbf' '/home/oracle/test.dbf';
 
SQL> alter tablespace sysaux rename datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' to '/home/oracle/test.dbf';
 
表空间已更改。
SQL> alter tablespace sysaux online;
 
表空间已更改。
SQL>  select tablespace_name,file_name from dba_data_files where tablespace_name='SYSAUX';
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSAUX
/home/oracle/test.dbf
 
2.alter database 适用于系统表空间,system,temp,undo
 
(1)一致性关闭数据库并启动到mount状态
SQL> shutdown immediate
SQL> startup mount
 
(2)复制数据文件
SQL> host cp '/u01/app/oracle/oradata/orcl/system01.dbf' '/home/oracle/test.dbf';
 
(3)修改控制文件。注意,只有在数据库打开的情况下,才有tablespace的概念,所有此时操作database中的file。
SQL> alter database rename file '/u01/app/oracle/oradata/orcl/system01.dbf' to '/home/oracle/test.dbf';
数据库已更改。
 
(4)打开数据库
SQL> alter database open;
 
(5)查看system表空间数据文件状态
SQL>  select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='SYSTEM';
TABLESPACE_NAME                FILE_NAME                                                                        ONLINE_STATUS
------------------------------ -------------------------------------------------------------------------------- -------------
SYSTEM                         /home/oracle/test.dbf                                                            SYSTEM
点击复制链接 与好友分享!回本站首页
相关TAG标签 文件 数据 空间
上一篇:oracle存储过程常用技巧
下一篇:快速解决IMP中的ORA-00959
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站