管理数据文件
一 Creating Datafiles and Adding Datafiles to a Tablespace
1 alter tablespace zx add datafile '/oracle/CRM2/CRM/zx04.dbf' size 1M;
2 alter tablespace ltemp add tempfile '/oracle/CRM2/CRM/ltemp01.dbf' size 200m;
二:Changing Datafile Size
1 开启或禁止数据文件自动扩展
通过查询dba_data_files视图字段autoextensible以确定数据文件是否自动扩展
select file_id,file_name,tablespace_name,autoextensible from dba_data_files
FILE_ID FILE_NAME TABLESPACE_NAME AUT
---------- ------------------------------ ------------------------------ ---
8 /oracle/CRM2/CRM/zxbig1.dbf ZXBIGTBS NO
7 /oracle/CRM2/CRM/zx3.dbf ZX NO
6 /oracle/CRM2/CRM/undotbs2.dbf UNDOTBS2 NO
5 /oracle/CRM2/CRM/zx1.dbf ZX NO
4 /oracle/CRM2/CRM/users01.dbf USERS YES
3 /oracle/CRM2/CRM/sysaux01.dbf SYSAUX YES
2 /oracle/CRM2/CRM/zx2.dbf ZX NO
1 /oracle/CRM2/CRM/system01.dbf SYSTEM YES
更改数据文件为自动扩展
alter database datafile '/oracle/CRM2/CRM/zx1.dbf' autoextend on;
禁止数据文件的自动扩展
alter database datafile '/oracle/CRM2/CRM/zx1.dbf' autoextend off;
eg:更改数据文件自动扩展
SQL> alter database datafile '/oracle/CRM2/CRM/zx1.dbf' autoextend on;
Database altered.
select file_id,file_name,tablespace_name,autoextensible from dba_data_files
FILE_ID FILE_NAME TABLESPACE_NAME AUT
---------- ------------------------------ ------------------------------ ---
8 /oracle/CRM2/CRM/zxbig1.dbf ZXBIGTBS NO
7 /oracle/CRM2/CRM/zx3.dbf ZX NO
6 /oracle/CRM2/CRM/undotbs2.dbf UNDOTBS2 NO
5 /oracle/CRM2/CRM/zx1.dbf ZX YES
4 /oracle/CRM2/CRM/users01.dbf USERS YES
3 /oracle/CRM2/CRM/sysaux01.dbf SYSAUX YES
2 /oracle/CRM2/CRM/zx2.dbf ZX NO
1 /oracle/CRM2/CRM/system01.dbf SYSTEM YES
eg 禁止数据文件自动扩展
SQL> alter database datafile '/oracle/CRM2/CRM/zx1.dbf' autoextend off;
Database altered.
SQL> select file_id,file_name,tablespace_name,autoextensible from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME AUT
---------- ------------------------------ ------------------------------ ---
8 /oracle/CRM2/CRM/zxbig1.dbf ZXBIGTBS NO
7 /oracle/CRM2/CRM/zx3.dbf ZX NO
6 /oracle/CRM2/CRM/undotbs2.dbf UNDOTBS2 NO
5 /oracle/CRM2/CRM/zx1.dbf ZX NO
4 /oracle/CRM2/CRM/users01.dbf USERS YES
3 /oracle/CRM2/CRM/sysaux01.dbf SYSAUX YES
2 /oracle/CRM2/CRM/zx2.dbf ZX NO
1 /oracle/CRM2/CRM/system01.dbf SYSTEM YES
2 调整数据文件的大小
语句:alter database datafile ...... resize xxx
eg 增加数据文件大小
看当前数据文件的大小
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 ,autoextensible from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUT
---------- ------------------------------ ------------------------------ --------------- ---
8 /oracle/CRM2/CRM/zxbig1.dbf ZXBIGTBS 2048 NO
7 /oracle/CRM2/CRM/zx3.dbf ZX 1 NO
6 /oracle/CRM2/CRM/undotbs2.dbf UNDOTBS2 200 NO
5 /oracle/CRM2/CRM/zx1.dbf ZX 100 NO
4 /oracle/CRM2/CRM/users01.dbf USERS 5 YES
3 /oracle/CRM2/CRM/sysaux01.dbf SYSAUX 280 YES
2 /oracle/CRM2/CRM/zx2.dbf ZX 10 NO
1 /oracle/CRM2/CRM/system01.dbf SYSTEM 480 YES
增加数据文件/oracle/CRM2/CRM/zx3.dbf为10M;
SQL> alter database datafile '/oracle/CRM2/CRM/zx3.dbf' resize 10M;
Database altered.
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 ,autoextensible from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUT
---------- ------------------------------ ------------------------------ --------------- ---
8 /oracle/CRM2/CRM/zxbig1.dbf ZXBIGTBS 2048 NO
7 /oracle/CRM2/CRM/zx3.dbf ZX 10 NO
6 /oracle/CRM2/CRM/undotbs2.dbf UNDOTBS2 200 NO
5 /oracle/CRM2/CRM/zx1.dbf ZX 100 NO
4 /oracle/CRM2/CRM/users01.dbf USERS 5 YES
3 /oracle/CRM2/CRM/sysaux01.dbf SYSAUX 280 YES
2 /oracle/CRM2/CRM/zx2.dbf ZX 10 NO
1 /oracle/CRM2/CRM/system01.dbf SYSTEM 480 YES
eg 减小数据文件大小
注意能否减少取决于数据文件当前使用值。
SQL> alter database datafile '/oracle/CRM2/CRM/zx3.dbf' resize 1M;
Database altered.
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024,autoextensible from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUT
---------- ------------------------------ ------------------------------ --------------- ---
8 /oracle/CRM2/CRM/zxbig1.dbf ZXBIGTBS 2048 NO
7 /oracle/CRM2/CRM/zx3.dbf ZX 1 NO
6 /oracle/CRM2/CRM/undotbs2.dbf UNDOTBS2 200 NO
5 /oracle/CRM2/CRM/zx1.dbf ZX 100 NO
4 /oracle/CRM2/CRM/users01.dbf USERS 5 YES
3 /oracle/CRM2/CRM/sysaux01.dbf SYSAUX 280 YES
2 /oracle/CRM2/CRM/zx2.dbf ZX 10 NO
1 /oracle/CRM2/CRM/system01.dbf SYSTEM 480 YES
三 更改数据文件可用性
那些情况需要我们offline数据文件
a 执行一个离线备份
b 重命名或者迁移数据文件,必须先离线数据文件
c 数据文件丢失或者损坏,打开数据之前,这些文件必须offline
注意,对只读表空间的数据文件offline后online并不会影响表空间的只读状态。
1 归档模式下offline或者online 数据文件
语句 alter database datafile ........ online|offline;
不过注意,offline的数据online的时候需要recover
eg
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM2/CRM/system01.dbf SYSTEM
2 /oracle/CRM2/CRM/zx2.dbf ONLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/CRM/zx1.dbf ONLINE
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/CRM/zx3.dbf ONLINE
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
8 rows selected.
SQL> alter database datafile '/oracle/CRM2/CRM/zx3.dbf' offline;
Database altered.
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM2/CRM/system01.dbf SYSTEM
2 /oracle/CRM2/CRM/zx2.dbf ONLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/CRM/zx1.dbf ONLINE
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/CRM/zx3.dbf RECOVER
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
8 rows selected.
SQL> alter database datafile '/oracle/CRM2/CRM/zx3.dbf' online; 注意这里,不能直接online,上面status字段已经提示需要recover
alter database datafile '/oracle/CRM2/CRM/zx3.dbf' online
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: '/oracle/CRM2/CRM/zx3.dbf'
SQL> recover datafile 7;
Media recovery complete.
SQL> alter database datafile 7 online;
Database altered.
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM2/CRM/system01.dbf SYSTEM
2 /oracle/CRM2/CRM/zx2.dbf ONLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/CRM/zx1.dbf ONLINE
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/CRM/zx3.dbf ONLINE
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
2 同时更改表空间所有数据文件状态
语句
alter tablespace ..... datafile offline|online
alter tablespace ...... tempfile offline|online
注意
a 该语句影响表空间的所有数据文件,而不影响表空间的状态。
b 对于离线system,undo,默认临时表空间所有数据文件时,数据库必须mount。而其它表空间数据文件的离线无限制,mount open状态都可以。
eg :测试离线表空间所有数据文件而表空间状态不变
当前表空间状态
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
UNDOTBS2 ONLINE
ZX ONLINE
ZXBIGTBS ONLINE
LTEMP1 ONLINE
LTEMP2 ONLINE
离线zx表空间所有数据文件
SQL> alter tablespace zx datafile offline;
Tablespace altered.
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ------------------------------ -------
1 /oracle/CRM2/CRM/system01.dbf SYSTEM
2 /oracle/CRM2/CRM/zx2.dbf RECOVER
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/CRM/zx1.dbf RECOVER
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/CRM/zx3.dbf RECOVER
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
UNDOTBS2 ONLINE
ZX ONLINE
ZXBIGTBS ONLINE
LTEMP1 ONLINE
LTEMP2 ONLINE
eg:测试system表空间所有数据文件和undo表空间所有数据文件只能在数据库mount状态下离线。
SQL> alter tablespace system datafile offline;
alter tablespace system datafile offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
SQL> alter tablespace undotbs2 datafile offline;
alter tablespace undotbs2 datafile offline
*
ERROR at line 1:
ORA-30021: Operation not allowed on undo tablespace
SQL> startup force mount;
ORACLE instance started.
Total System Global Area 322961408 bytes
Fixed Size 2020480 bytes
Variable Size 96471936 bytes
Database Buffers 218103808 bytes
Redo Buffers 6365184 bytes
Database mounted.
SQL> alter tablespace system datafile offline;
Tablespace altered.
SQL> alter tablespace undotbs2 datafile offline;
Tablespace altered.
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ---------------------------------------- -------
1 /oracle/CRM2/CRM/system01.dbf SYSOFF
2 /oracle/CRM2/CRM/zx2.dbf ONLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/CRM/zx1.dbf ONLINE
6 /oracle/CRM2/CRM/undotbs2.dbf RECOVER
7 /oracle/CRM2/CRM/zx3.dbf ONLINE
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
四 重命名和迁移数据文件
注意:对于重命名或者迁移系统表空间数据文件,默认临时表空间数据文件、或者还原表空间数据文件则必须使用alter database 方式。
重命名单个表空间的数据文件步骤:
1 normal离线表空间的所有数据文件
alter tablespace zx offline normal;
2 在操作系统上更改数据文件名
3 使用alter tablespace ........rename datafile 语句改变数据文件名字
4 online表空间,查询相应视图确认更改效果
--------------------------------------------------------------------------
迁移单个表空间数据文件的步骤:
1 normal离线表空间的所有数据文件
2 在操作系统上拷贝数据文件到目标位置
3 使用alter tablespace ........rename datafile 语句改变数据文件位置。
4 online表空间,查询相应视图确认更改效果
---------------------------------------------------------------------------
重命名或者迁移多个表空间数据文件的步骤:
1 确保数据库处于mount状态
2 基于操作系统拷贝或者重命名数据文件
3 使用alter database语句更改文件位置或者名字。
-----------------------------------------------------------------------------
以下三个例子分别展示如何操作:
eg1:更改zx表空间中所有数据文件名字
查询zx表空间中所有数据文件名字:
select tb.name as tablespace_name,df.file#,df.name as datafile,df.status from v$tablespace tb,v$datafile df where tb.ts#=df.ts#
TABLESPACE_NAME FILE# DATAFILE STATUS
------------------------------ ---------- ---------------------------------------- -------
SYSTEM 1 /oracle/CRM2/CRM/system01.dbf SYSTEM
SYSAUX 3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
USERS 4 /oracle/CRM2/CRM/users01.dbf ONLINE
UNDOTBS2 6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
ZX 5 /oracle/CRM2/CRM/zx1.dbf ONLINE
ZX 7 /oracle/CRM2/CRM/zx3.dbf ONLINE
ZX 2 /oracle/CRM2/CRM/zx2.dbf ONLINE
ZXBIGTBS 8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
normal离线zx表空间:
SQL> alter tablespace zx offline normal;
Tablespace altered.
操作系统上重命名zx表空间:
SQL> host;
[oracle@oracle ~]$ mv /oracle/CRM2/CRM/zx1.dbf /oracle/CRM2/CRM/zxa.dbf
[oracle@oracle ~]$ mv /oracle/CRM2/CRM/zx2.dbf /oracle/CRM2/CRM/zxb.dbf
[oracle@oracle ~]$ mv /oracle/CRM2/CRM/zx3.dbf /oracle/CRM2/CRM/zxc.dbf
[oracle@oracle ~]$ ls -l /oracle/CRM2/CRM/zx*
-rw-r----- 1 oracle oinstall 104865792 Nov 2 20:18 /oracle/CRM2/CRM/zxa.dbf
-rw-r----- 1 oracle oinstall 10493952 Nov 2 20:18 /oracle/CRM2/CRM/zxb.dbf
-rw-r----- 1 oracle oinstall 2147491840 Nov 2 19:47 /oracle/CRM2/CRM/zxbig1.dbf
-rw-r----- 1 oracle oinstall 1056768 Nov 2 20:18 /oracle/CRM2/CRM/zxc.dbf
使用alter tablespace ........rename datafile 语句改变数据文件名字:
语句:alter tablespace zx
rename datafile '/oracle/CRM2/CRM/zx1.dbf',
'/oracle/CRM2/CRM/zx2.dbf',
'/oracle/CRM2/CRM/zx3.dbf'
to '/oracle/CRM2/CRM/zxa.dbf',
'/oracle/CRM2/CRM/zxb.dbf',
'/oracle/CRM2/CRM/zxc.dbf' ;
SQL> alter tablespace zx
2 rename datafile '/oracle/CRM2/CRM/zx1.dbf',
3 '/oracle/CRM2/CRM/zx2.dbf',
4 '/oracle/CRM2/CRM/zx3.dbf'
5 to '/oracle/CRM2/CRM/zxa.dbf',
6 '/oracle/CRM2/CRM/zxb.dbf',
7 '/oracle/CRM2/CRM/zxc.dbf' ;
Tablespace altered.
online表空间并检查更改效果如下:
SQL> alter tablespace zx online;
Tablespace altered.
SQL> select tb.name as tablespace_name,df.file#,df.name as datafile,df.status from v$tablespace tb,v$datafile df where tb.ts#=df.ts#;
TABLESPACE_NAME FILE# DATAFILE STATUS
------------------------------ ---------- ---------------------------------------- -------
SYSTEM 1 /oracle/CRM2/CRM/system01.dbf SYSTEM
SYSAUX 3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
USERS 4 /oracle/CRM2/CRM/users01.dbf ONLINE
UNDOTBS2 6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
ZX 5 /oracle/CRM2/CRM/zxa.dbf ONLINE
ZX 7 /oracle/CRM2/CRM/zxc.dbf ONLINE
ZX 2 /oracle/CRM2/CRM/zxb.dbf ONLINE
ZXBIGTBS 8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
eg2:迁移表空间zx所有数据文件到位置/oracle/CRM2/
查询zx表空间中所有数据文件名字:
select tablespace_name,file_id,file_name,status from dba_data_files where tablespace_name like 'ZX'
TABLESPACE_NAME FILE_ID FILE_NAME STATUS
------------------------------ ---------- ------------------------------ ---------
ZX 7 /oracle/CRM2/CRM/zxc.dbf AVAILABLE
ZX 5 /oracle/CRM2/CRM/zxa.dbf AVAILABLE
ZX 2 /oracle/CRM2/CRM/zxb.dbf AVAILABLE
normal离线zx表空间:
SQL> alter tablespace zx offline normal;
Tablespace altered.
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ------------------------------ -------
1 /oracle/CRM2/CRM/system01.dbf SYSTEM
2 /oracle/CRM2/CRM/zxb.dbf OFFLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/CRM/zxa.dbf OFFLINE
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/CRM/zxc.dbf OFFLINE
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
在操作系统上拷贝数据文件到目标位置:
SQL> host;
[oracle@oracle ~]$ cp /oracle/CRM2/CRM/zx*.dbf /oracle/CRM2/
[oracle@oracle ~]$ ls -l /oracle/CRM2/
total 2213032
-rw-r----- 1 oracle oinstall 104865792 Nov 2 22:37 zxa.dbf
-rw-r----- 1 oracle oinstall 10493952 Nov 2 22:37 zxb.dbf
-rw-r----- 1 oracle oinstall 1056768 Nov 2 22:39 zxc.dbf
使用alter tablespace ........rename datafile 语句改变数据文件位置
语句:alter tablespace zx
rename datafile '/oracle/CRM2/CRM/zxa.dbf',
'/oracle/CRM2/CRM/zxb.dbf',
'/oracle/CRM2/CRM/zxc.dbf'
to '/oracle/CRM2/zxa.dbf',
'/oracle/CRM2/zxb.dbf',
'/oracle/CRM2/zxc.dbf';
SQL> alter tablespace zx
2 rename datafile '/oracle/CRM2/CRM/zxa.dbf',
3 '/oracle/CRM2/CRM/zxb.dbf',
4 '/oracle/CRM2/CRM/zxc.dbf'
5 to '/oracle/CRM2/zxa.dbf',
6 '/oracle/CRM2/zxb.dbf',
7 '/oracle/CRM2/zxc.dbf';
Tablespace altered.
online表空间,查询相应视图确认更改效果:
select tablespace_name,file_id,file_name,status from dba_data_files where tablespace_name like 'ZX'
TABLESPACE_NAME FILE_ID FILE_NAME STATUS
------------------------------ ---------- ------------------------------ ---------
ZX 7 /oracle/CRM2/zxc.dbf AVAILABLE
ZX 5 /oracle/CRM2/zxa.dbf AVAILABLE
ZX 2 /oracle/CRM2/zxb.dbf AVAILABLE
eg3:移动system表空间数据文件和更改数据文件名字
启动数据库到mount状态:
SQL> startup force mount;
ORACLE instance started.
Total System Global Area 322961408 bytes
Fixed Size 2020480 bytes
Variable Size 96471936 bytes
Database Buffers 218103808 bytes
Redo Buffers 6365184 bytes
Database mounted.
拷贝数据文件到目标位置:
SQL> host;
[oracle@oracle ~]$ cp /oracle/CRM2/CRM/system01.dbf /oracle/CRM2/
[oracle@oracle ~]$ ls -l /oracle/CRM2
total 2705044
-rw-r----- 1 oracle oinstall 503324672 Nov 2 23:17 system01.dbf
通过alter database rename file .....to 移动system表空间位置:
alter database rename file '/oracle/CRM2/CRM/system01.dbf' to '/oracle/CRM2/system01.dbf';
启动数据库到open状态并确认更改有效:
SQL> alter database open;
Database altered.
SQL> col name for a30
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ------------------------------ -------
1 /oracle/CRM2/system01.dbf SYSTEM
2 /oracle/CRM2/zxb.dbf ONLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/zxa.dbf ONLINE
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/zxc.dbf ONLINE
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
更改system表空间数据文件的名字:
SQL> startup force mount;
ORACLE instance started.
Total System Global Area 322961408 bytes
Fixed Size 2020480 bytes
Variable Size 96471936 bytes
Database Buffers 218103808 bytes
Redo Buffers 6365184 bytes
Database mounted.
SQL> host;
[oracle@oracle ~]$ mv /oracle/CRM2/system01.dbf /oracle/CRM2/system1.dbf
[oracle@oracle ~]$ ls /oracle/CRM2/
CRM ERP system1.dbf zxa.dbf zxb.dbf zxbig1.dbf zxc.dbf
SQL> alter database rename file '/oracle/CRM2/system01.dbf' to '/oracle/CRM2/system1.dbf';
Database altered.
SQL> alter database open;
Database altered.
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
---------- ------------------------------ -------
1 /oracle/CRM2/system1.dbf SYSTEM
2 /oracle/CRM2/zxb.dbf ONLINE
3 /oracle/CRM2/CRM/sysaux01.dbf ONLINE
4 /oracle/CRM2/CRM/users01.dbf ONLINE
5 /oracle/CRM2/zxa.dbf ONLINE
6 /oracle/CRM2/CRM/undotbs2.dbf ONLINE
7 /oracle/CRM2/zxc.dbf ONLINE
8 /oracle/CRM2/CRM/zxbig1.dbf ONLINE
五 Dropping Datafiles
语句:alter tablespace xxx drop datafile 'xxxxxxxxxx';
alter tablespace xxx drop tempfile 'xxxxxxxxxxxx';
restrictions for drop datafile
1 数据库必须open
2 system表空间的数据文件不能drop
3 如果表空间离线,则数据文件不能drop
4 如果表空间有一个数据文件,则该数据文件不能drop
5 对于大表空间drop datafile语句不适用。
eg1大表空间数据文件drop
select tablespace_name,file_name,autoextensible from dba_data_files
TABLESPACE_NAME FILE_NAME AUT
------------------------------ ------------------------------ ---
ZXBIGTBS /oracle/CRM2/CRM/zxbig1.dbf NO
ZX /oracle/CRM2/zxc.dbf NO
UNDOTBS2 /oracle/CRM2/CRM/undotbs2.dbf NO
ZX /oracle/CRM2/zxa.dbf NO
USERS /oracle/CRM2/CRM/users01.dbf YES
SYSAUX /oracle/CRM2/CRM/sysaux01.dbf YES
ZX /oracle/CRM2/zxb.dbf NO
SYSTEM /oracle/CRM2/system1.dbf YES
SQL> alter tablespace zxbigtbs drop datafile '/oracle/CRM2/CRM/zxbig1.dbf ';
alter tablespace zxbigtbs drop datafile '/oracle/CRM2/CRM/zxbig1.dbf '
*
ERROR at line 1:
ORA-01565: error in identifying file '/oracle/CRM2/CRM/zxbig1.dbf '
eg2:测试表空间只有一个数据文件能不能drop
select tablespace_name,file_name,autoextensible from dba_data_files
TABLESPACE_NAME FILE_NAME AUT
------------------------------ ------------------------------ ---
ZXBIGTBS /oracle/CRM2/CRM/zxbig1.dbf NO
ZX /oracle/CRM2/zxc.dbf NO
UNDOTBS2 /oracle/CRM2/CRM/undotbs2.dbf NO
ZX /oracle/CRM2/zxa.dbf NO
USERS /oracle/CRM2/CRM/users01.dbf YES
SYSAUX /oracle/CRM2/CRM/sysaux01.dbf YES
ZX /oracle/CRM2/zxb.dbf NO
SYSTEM /oracle/CRM2/system1.dbf YES
SQL> alter tablespace users drop datafile '/oracle/CRM2/CRM/users01.dbf';
alter tablespace users drop datafile '/oracle/CRM2/CRM/users01.dbf'
*
ERROR at line 1:
ORA-03261: the tablespace USERS has only one file
eg3:测试表空间离线,则数据文件不能删除
SQL> alter tablespace zx offline;
Tablespace altered.
SQL> alter tablespace zx drop datafile '/oracle/CRM2/zxc.dbf';
alter tablespace zx drop datafile '/oracle/CRM2/zxc.dbf'
*
ERROR at line 1:
ORA-03264: cannot drop offline datafile of locally managed tablespace
eg4:要删除数据文件,数据库必须open
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
SQL> alter tablespace zx drop datafile '/oracle/CRM2/zxc.dbf';
alter tablespace zx drop datafile '/oracle/CRM2/zxc.dbf'
*
ERROR at line 1:
ORA-01109: database not open
eg5 system表空间数据文件不能drop
SQL> alter tablespace system drop datafile '/oracle/CRM2/system1.dbf ';
alter tablespace system drop datafile '/oracle/CRM2/system1.dbf '
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary