全部博文(101)
分类: Oracle
2011-04-19 18:30:07
一.为什么要移动数据文件
因为如果所有的数据文件都放在一个磁盘上,会增加I/O量,这样会影响数据库的效率。
所以如果放在不同的盘上,就可以并行传输,这样就会提高很多。
二.移动数据文件的步骤
数据库一共提供了2条语句来移动数据文件
2.1第一种,如果数据文件是没有活动的还原数据或者临时段的非系统表空间中的数据
文件,则步骤如下:
(a).使用数据字典获取所需的表空间和数据文件的相关信息;
(b).将表空间置为脱机;
(c).使用操作系统命令移动或者复制要移动的数据文件;
(d).执行alter tablespace rename datafile命令;
(e).将表空间置为联机;
(f).使用数据字典获取所需的表空间和数据文件的相关信息;
(g).如果需要,使用操作系统命令删除无用的数据文件;
2.2第二种,该语句适用于系统表空间和不能置为脱机的表空间中的数据文件。步骤如下:
(a).使用数据字典获取所需的表空间和数据文件的相关信息;
(b).关闭数据库系统;
(c).使用操作系统命令移动或者复制要移动的数据文件;
(d).将数据库置为加载状态;
(e).执行alter database rename file命令;
(f).打开数据库系统;
(g).使用数据字典获取所需的表空间和数据文件的相关信息;
(h).如果需要,使用操作系统命令删除无用的数据文件;
三.移动数据文件实例(第二种方法使用所有的类型的数据文件)
以下示例都是在我的电脑上操作的,无任何虚假。
因为第一种需要"没有活动的还原数据或者临时段的非系统表空间"的条件;
所以为了安全,用第二种方法可以使用全部的类型;
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 24 21:46:45 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba;
已连接。
SQL> --查看所有表空间USERS的信息,准备移动这个表空间下的数据文件;
SQL> select tablespace_name,status,contents
2 from dba_tablespaces
3 where tablespace_name='USERS';
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
USERS ONLINE PERMANENT
SQL> --再查看USERS下的的数据文件;
SQL> col file_name format a55;
SQL> select file_id,file_name,tablespace_name
2 from dba_data_files
3 where tablespace_name='USERS';
FILE_ID FILE_NAME
---------- -------------------------------------------------------
TABLESPACE_NAME
------------------------------
4 E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/USERS01.DBF
USERS
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host copy E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/USERS01.DBF E:/ORACLE
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-03-24 星期四
现在已经是21:57:33.50
已复制 1 个文件。
SQL> conn / as sysdba;
已连接到空闲例程。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 192940932 bytes
Database Buffers 411041792 bytes
Redo Buffers 7135232 bytes
SQL> alter database mount;--开始输错了,现在才加载。呵呵
数据库已更改。
SQL> alter database rename file 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/USERS01.
DBF' to 'E:/ORACLE/USERS01.DBF';
数据库已更改。
SQL> alter database open;--将实例完全启动;
数据库已更改。
SQL> select tablespace_name,status,contents
2 from dba_tablespaces
3 where tablespace_name='USERS';
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
USERS ONLINE PERMANENT
SQL> --还在,吓死我了,呵呵。
SQL> select file_id,file_name,tablespace_name
2 from dba_data_files
3 where tablespace_name='USERS';
FILE_ID FILE_NAME
---------- -------------------------------------------------------
TABLESPACE_NAME
------------------------------
4 E:/ORACLE/USERS01.DBF
USERS
SQL> --天啦,成功了,呵呵!
SQL> --不过别急,将原来的路径的没有用的数据文件删除;
SQL> host del E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/USERS01.DBF;
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-03-24 星期四
现在已经是22:10:31.20
SQL> --查看是否已经删除;
SQL> host dir E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY;
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-03-24 星期四
现在已经是22:11:09.75
驱动器 E 中的卷没有标签。
卷的序列号是 20E2-F689
E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY 的目录
2011-03-24 22:10
SQL> --发现已经没有了,完美。