首页 > 代码库 > 20_Oracle_Admin_移动表空间的数据文件以及删除表空间

20_Oracle_Admin_移动表空间的数据文件以及删除表空间

一、使用ALTER TABLESPACE来移动数据文件

 wKiom1Qq3gygcOiLAAFqF49-iLk709.jpg


 

移动数据文件在调整表空间大小时有可能会用到,使用的是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

 

==============更改tablespacedatafile路径============

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来移动数据文件

 

wKioL1Qq3p6DtYXgAAFsIYbXSL8786.jpg

 

使用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.

 

==============更改databasedata 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的方式,因为不会影响到整个数据库的正常使用。当然具体情况还需要具体分析。

 

三、删除表空间

 

wKiom1Qq3oKCH2EgAAIpGsIZX10034.jpg

 

Drop tablespace需要注意如下几点:

1.SYSTEM database不能drop

2.activesegment时,不能drop

 

在删除tablespace时,如果包括了INCLUDING CONTENTS ANDDATAFILES,则意味着tablespacedata file会被同时删除;如果只包括了INCLUDING CONTENTS则只删除segmentsCASCADECONSTRAINTS表示同时删除约束条件。

 

 

=======执行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已经被删除了


 wKioL1Qq3r-yqAUSAAJU09n6vJg024.jpg 

 

四、获取表空间的信息

wKioL1Qq3tCzFGRWAAJrWolI-78849.jpg

 

更多表空间的查询信息,可以参考联机文档REFERENCE获取。


本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1560221

20_Oracle_Admin_移动表空间的数据文件以及删除表空间