更改或删除Oracle表空间的数据文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改或删除Oracle表空间的数据文件相关的知识,希望对你有一定的参考价值。

建立表空间后,可以指定该表空间由哪些数据文件组成。
如:data01.ora,data02.ora,data03.ora。
现要把data03.ora去掉(缩小表空间),并将data02.ora改名成data2.ora,怎样操作?

1、创建用户表空间:
CREATE TABLESPACE test_data
//创建表空间test_data
LOGGING
DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DATA01.DBF'
//创建的数据文件
SIZE 32M
//初始大小
AUTOEXTEND ON
//数据文件自动扩容
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
2、删除表空间,同时删除数据文件:
drop tablespace test_data including contents and datafiles;
3、创建用户临时表空间:
CREATE TEMPORARY TABLESPACE test_temp
TEMPFILE 'D:\oracle\product\10.2.0\oradata\orcl\test_temp01.dbf'
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
4、创建用户并指定表空间:
CREATE USER xiaoming IDENTIFIED BY xm123
//创建用户xiaoming,设置密码为xm123
DEFAULT TABLESPACE TEST_DATA
//指定默认表空间为test_data
TEMPORARY TABLESPACE TEST_TEMP;
//指定临时表空间为test_temp
指定默认表空间以后,用户xiaoming创建的表都在这个表空间下,除非额外指定;
当然,要给用户xiaoming授权才能创建表。
参考技术A 你数据库版本是多少10G之前的我是无能为力,只能用非常笨重的方法,就是先EXP该表空间,然后删除重建,在IMP进去
10GR2的话
确认表空间有几个数据文件
select file_name,file_id from dba_data_files where tablespace_name='表空间名'
确认表空间未被存储占用:
select segment_name,file_id,blocks from dba_extents where file_id=表空间号;
--表空间号(select file#,name from v$datafile; )这么查
如果是没有查询结果说明你可以做下面的操作了
alter tablespace 表空间名 drop datafile ‘绝对路径'追问

如果有数据了,就不能删除了吧?

追答

YES

参考技术B alter database rename datafile 'xxxxx/data02.ora' to 'xxxxx/data2.ora' 修改名字或移动数据文件位置
alter database datafile 'xxxxx/data03.ora' resize 100M 缩小数据文件大小
删除数据文件通常对于已经存在数据的情况你需要先把存在该数据文件里的数据转移后清空才能删除追问

alter tablespace zhzx resize datafile 'I:\ORACLE\PRODUCT\10.2.0\ORADATA\ME\DATA03.ORA' 500M;
确认该空间使用了小于100M的大小。但是这条语句报错:ORA-02237: 无效的文件大小。

追答

你要确认分配的extents的总共大小,只要extent被分配给表空间,系统就认为空间被使用
也就是说你要缩小文件的大小,就要确认该文件extent 分配了多大,然后通过,resize 收回未分配extent 的空间,或者收缩未使用的extent

本回答被提问者采纳

Oracle更改数据文件位置

方法一:offline表空间

1、offline表空间:alter tablespace tablespace_name offline;
2、复制数据文件到新的目录;
3、rename修改表空间,并修改控制文件;
4、online表空间;

 

1、offline表空间zerone
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。
 
SQL> alter tablespace zerone offline;
表空间已更改。

2、复制数据文件到新的目录
复制数据文件C:\\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF。

3、rename修改表空间数据文件为新的位置,并修改控制文件
SQL> alter tablespace zerone rename datafile ‘c:\oracle\product\10.2.0\oradata\zerone01.dbf‘ to ‘c:\oracle\product\10.2.0\oradata\orcl\zerone01.dbf‘;
表空间已更改。

4、online表空间
SQL> alter tablespace zerone online;
表空间已更改。
 
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。
 
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name=‘ZERONE‘;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------------------------------------------
ZERONE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF

 

 

方法二:SQL修改数据文件位置

1、关闭;
2、复制数据文件到新的位置;
3、启动数据库到mount状态;
4、通过SQL修改数据文件位置;
5、打开数据库;

1、关闭数据库
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。
 
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

2、复制数据文件到新的位置;
将数据文件C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ZERONE01.DBF复制到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF。

3、启动数据库到mount状态;
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 96470372 bytes
Database Buffers 67108864 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。

4、通过SQL修改数据文件位置;
SQL> alter database rename file ‘c:\oracle\product\10.2.0\oradata\orcl\zerone01.dbf‘ to ‘c:\oracle\product\10.2.0\oradata\zerone01.dbf‘;
数据库已更改。

5、打开数据库;
SQL> alter database open;
数据库已更改。
 
SQL> select name from v$www1.qixoo.com;
NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\RMANTS.DBF
已选择7行。
 
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name=‘ZERONE‘;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------------------------
ZERONE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZERONE01.DBF
























































































































以上是关于更改或删除Oracle表空间的数据文件的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库表空间删除报错误删除不了怎么办?

oracle 中的控制文件和数据文件

oracle数据库手动删除数据文件前没有将表空间offline,没有开启归档

oracle怎样恢复删除的数据文件

Oracle 11G删除数据库表空间的文件

怎么删除用户,表空间,数据文件