首页 > 代码库 > 20_Oracle_Admin_移动表空间的数据文件以及删除表空间
20_Oracle_Admin_移动表空间的数据文件以及删除表空间
一、使用ALTER TABLESPACE来移动数据文件
移动数据文件在调整表空间大小时有可能会用到,使用的是ALTERTABLESPACE命令。但是要注意的是,在进行此项操作之前,首先应将tablespace 设为offline,第二,需要确定目标数据文件是存在的。
======查询当前表空间信息=======
SQL> select file_name, tablespace_name,bytes from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 671088640 /oracle/oradata/orcl/system01.dbf SYSTEM 723517440 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/wiley.dbf WILEY 20971520 /oracle/oradata/orcl/wiley2.dbf WILEY 10485760 7 rows selected.
=======将表空间设定为offline========
SQL> alter tablespace wiley offline;
Tablespace altered.
SQL> select file_name, tablespace_name,bytes from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 671088640 /oracle/oradata/orcl/system01.dbf SYSTEM 723517440 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/wiley.dbf WILEY /oracle/oradata/orcl/wiley2.dbf WILEY -- 设为离线的tablespace将不会显示体积 7 rows selected.
=======移动数据文件到上一级目录=======
[oracle@localhost~]$ cd /oracle/oradata
[oracle@localhostoradata]$ mv orcl/wiley2.dbf ./
[oracle@localhostoradata]$ ls
orcl smn wiley2.dbf
==============更改tablespace的datafile路径============
SQL> alter tablespace wiley rename datafile
2 ‘/oracle/oradata/orcl/wiley2.dbf‘
3 to‘/oracle/oradata/wiley2.dbf‘;
Tablespace altered.
上述操作执行速度非常快,因为它仅仅改变的是文件的指针,而不是实际移动文件
SQL> alter tablespace wiley online;
Tablespace altered.
SQL> select file_name, tablespace_name,bytes from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 587202560 /oracle/oradata/orcl/system01.dbf SYSTEM 713031680 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/mickey01.dbf MICKEY 20971520 /oracle/oradata/orcl/wiley.dbf WILEY 20971520 /oracle/oradata/wiley2.dbf WILEY 10485760 -- 表空间移动成功 8 rows selected.
二、使用ALTERDATABASE来移动数据文件
使用ALTERDATABASE来移动数据文件的方式和ALTER TABLESPACE基本相似,值得注意的是,这里不是将tablespace设为offline,而是先要确保数据库处于mount状态,然后保证目标数据文件存在。
======首先关闭数据库=====
SQL> shutdownimmediate
Database closed. Database dismounted. ORACLE instance shut down.
===========移动数据文件=========
[oracle@localhost ~]$ cd /oracle/oradata
[oracle@localhost oradata]$ ls
orcl redo03.log smn wiley2.dbf
[oracle@localhost oradata]$ mv wiley2.dbf orcl
=========以mount的模式启动数据库========
SQL> startupmount;
ORACLE instance started. Total System Global Area 422670336 bytes Fixed Size 1336960 bytes Variable Size 318769536 bytes Database Buffers 96468992 bytes Redo Buffers 6094848 bytes Database mounted.
==============更改database的data file路径============
SQL> alterdatabase rename file
2 ‘/oracle/oradata/wiley2.dbf‘ to
3 ‘/oracle/oradata/orcl/wiley2.dbf‘;
Database altered.
=====将数据库设为open状态=====
SQL> alterdatabase open;
Database altered.
SQL> selectfile_name, tablespace_name, bytes from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 587202560 /oracle/oradata/orcl/system01.dbf SYSTEM 713031680 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/mickey01.dbf MICKEY 20971520 /oracle/oradata/orcl/wiley.dbf WILEY 20971520 /oracle/oradata/orcl/wiley2.dbf WILEY 10485760 -- data file 的路径已经改变了 8 rows selected.
综合起来,ALTERTABLESPACE的方式优于ALTERDATABASE的方式,因为不会影响到整个数据库的正常使用。当然具体情况还需要具体分析。
三、删除表空间
Drop tablespace需要注意如下几点:
1.SYSTEM database不能drop;
2.有activesegment时,不能drop。
在删除tablespace时,如果包括了INCLUDING CONTENTS ANDDATAFILES,则意味着tablespace和data file会被同时删除;如果只包括了INCLUDING CONTENTS,则只删除segments;CASCADECONSTRAINTS表示同时删除约束条件。
=======执行drop命令删除表空间======
SQL> drop tablespace wiley including contents anddatafiles;
Tablespace dropped.
SQL> select file_name, tablespace_name, bytes fromdba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 587202560 /oracle/oradata/orcl/system01.dbf SYSTEM 713031680 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/mickey01.dbf MICKEY 20971520 -- 表空间wiley已经被删除了 6 rows selected.
======查询磁盘信息=====
[oracle@localhost oradata]$ ll /oracle/oradata/orcl
total 1642152 -rw-r-----. 1 oracle oinstall 9748480 Sep 10 14:02 control01.ctl -rw-r-----. 1 oracle oinstall 9748480 Sep 10 14:02 control03.ctl -rw-r-----. 1 oracle oinstall 9748480 Sep 10 00:37 control04.ctl -rw-r-----. 1 oracle oinstall 104865792 Sep 10 13:51example01.dbf -rw-r-----. 1 oracle oinstall 20979712 Sep 10 13:51 mickey01.dbf -rw-r-----. 1 oracle oinstall 10493952 Sep 10 13:34 mytemp01.dbf drwxr-xr-x. 2 oracle oinstall 4096 Sep 10 00:57 old -rw-r-----. 1 oracle oinstall 52429312 Sep 10 14:01 redo01.log -rw-r-----. 1 oracle oinstall 52429312 Sep 10 13:51 redo02.log -rw-r-----. 1 oracle oinstall 52429312 Sep 10 05:38 redo03.log -rw-r-----. 1 oracle oinstall 587210752 Sep 10 14:01sysaux01.dbf -rw-r-----. 1 oracle oinstall 713039872 Sep 10 13:56system01.dbf -rw-r-----. 1 oracle oinstall 20979712 Sep 10 07:34 temp01.dbf -rw-r-----. 1 oracle oinstall 57679872 Sep 10 13:57 undotbs01.dbf -rw-r-----. 1 oracle oinstall 5251072 Sep 10 13:51 users01.dbf # wiley表空间使用的两个数据文件wiley.dbf和wiley2.dbf已经被删除了
四、获取表空间的信息
更多表空间的查询信息,可以参考联机文档REFERENCE获取。
本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1560221
20_Oracle_Admin_移动表空间的数据文件以及删除表空间