oracle数据文件的管理

来源:互联网 发布:nba球队数据统计 编辑:程序博客网 时间:2024/05/19 10:36

数据文件的管理

1. datafile add

2. datafile delete

3. datafile resize

4. datafile rename

 

1. datafile add

添加表空间,从而添加数据文件

SQL> create tablespace testtbs
  2  datafile '/oracle/oradata/demo/testtbs01.dbf'
  3  size 30m;

Tablespace created.

SQL> select tablespace_name,block_size,status,contents from dba_tablespaces;

TABLESPACE_NAME                BLOCK_SIZE STATUS    CONTENTS
------------------------------ ---------- --------- ---------
SYSTEM                               8192 ONLINE    PERMANENT
UNDOTBS                              8192 ONLINE    UNDO
SYSAUX                               8192 ONLINE    PERMANENT
TEMPTBS                              8192 ONLINE    TEMPORARY
USERS                                8192 ONLINE    PERMANENT
LXTBS                                8192 ONLINE    PERMANENT
TESTTBS                              8192 ONLINE    PERMANENT

7 rows selected.

SQL> select file_id,file_name,tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   USERS
         6 /oracle/oradata/demo/lxtbs02.dbf                   LXTBS
         5 /oracle/oradata/demo/lxtbs01.dbf                   LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS

7 rows selected.

给表空间添加数据文件

SQL> alter tablespace testtbs
  2  add datafile '/oracle/oradata/demo/testtbs02.dbf'
  3  size 30m;

Tablespace altered.

SQL> select file_id,file_name,tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   USERS
         6 /oracle/oradata/demo/lxtbs02.dbf                   LXTBS
         5 /oracle/oradata/demo/lxtbs01.dbf                   LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS
         8 /oracle/oradata/demo/testtbs02.dbf                 TESTTBS

8 rows selected.

 

2. datafile delete

SQL> alter tablespace lxtbs
  2  drop datafile '/oracle/oradata/demo/lxtbs02.dbf';

Tablespace altered.

SQL> select file_id,file_name,tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   USERS
         5 /oracle/oradata/demo/lxtbs01.dbf                   LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS
         8 /oracle/oradata/demo/testtbs02.dbf                 TESTTBS

7 rows selected.
注意:若表空间只有一个数据文件,则会删除失败。

SQL> select file_id,file_name,tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   USERS
         5 /oracle/oradata/demo/lxtbs01.dbf                   LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS
         8 /oracle/oradata/demo/testtbs02.dbf                 TESTTBS

7 rows selected.

SQL> alter tablespace LXTBS
  2  drop datafile '/oracle/oradata/demo/lxtbs01.dbf';
alter tablespace LXTBS
*
ERROR at line 1:
ORA-03261: the tablespace LXTBS has only one file

3. datafile resize

SQL> select file_id,file_name,bytes/1024/1024||'m' "size",tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          size                                      TABLESPACE_NAME
---------- -------------------------------------------------- ----------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  300m                                      SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 500m                                      UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  200m                                      SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   300m                                      USERS
         5 /oracle/oradata/demo/lxtbs01.dbf                   50m                                       LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 30m                                       TESTTBS
         8 /oracle/oradata/demo/testtbs02.dbf                 30m                                       TESTTBS

7 rows selected.

SQL> alter database
  2  datafile '/oracle/oradata/demo/lxtbs01.dbf' resize 70m;

Database altered.

SQL> select file_id,file_name,bytes/1024/1024||'m' "size",tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          size                                      TABLESPACE_NAME
---------- -------------------------------------------------- ----------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  300m                                      SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 500m                                      UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  200m                                      SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   300m                                      USERS
         5 /oracle/oradata/demo/lxtbs01.dbf                   70m                                       LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 30m                                       TESTTBS
         8 /oracle/oradata/demo/testtbs02.dbf                 30m                                       TESTTBS

7 rows selected.

注意:

RESIZE Specify RESIZE if you want Oracle Database to attempt to increase or decrease the size of the data file to the specified absolute size in bytes. There is no default, so you must specify a size.

If sufficient disk space is not available for the increased size, or if the file contains data beyond the specified decreased size, then Oracle Database returns an error.

4. datafile rename

通过alter database来重命名数据文件

SQL> alter database rename file '/oracle/oradata/demo/lxtbs01.dbf' to '/oracle/oradata/demo/lxtbs03.dbf';
alter database rename file '/oracle/oradata/demo/lxtbs01.dbf' to '/oracle/oradata/demo/lxtbs03.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01121: cannot rename database file 5 - file is in use or recovery
ORA-01110: data file 5: '/oracle/oradata/demo/lxtbs01.dbf'
报错了,提示:数据文件5正在被使用,那我们就把对应的表空间离线

SQL> alter tablespace lxtbs offline;

Tablespace altered.  /*表空间离线,不再对外提供访问*/
SQL> alter database rename file '/oracle/oradata/demo/lxtbs01.dbf' to '/oracle/oradata/demo/lxtbs03.dbf';
alter database rename file '/oracle/oradata/demo/lxtbs01.dbf' to '/oracle/oradata/demo/lxtbs03.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01141: error renaming data file 5 - new file '/oracle/oradata/demo/lxtbs03.dbf' not found
ORA-01110: data file 5: '/oracle/oradata/demo/lxtbs01.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

又报错了,提示:新的数据文件'/oracle/oradata/demo/lxtbs03.dbf'不存在。要先把文件'/oracle/oradata/demo/lxtbs01.dbf'物理得拷贝到'/oracle/oradata/demo/lxtbs03.dbf',重新执行上述的

命令,就可以了。

SQL> alter database rename file '/oracle/oradata/demo/lxtbs01.dbf' to '/oracle/oradata/demo/lxtbs03.dbf';

Database altered.

SQL> alter tablespace lxtbs online; /*别忘记了,将已离线的表空间拉上了*/

Tablespace altered.

SQL> select file_id,file_name,bytes/1024/1024||'m' "size",tablespace_name from dba_data_files;

   FILE_ID FILE_NAME                                          size                                      TABLESPACE_NAME
---------- -------------------------------------------------- ----------------------------------------- ------------------------------
         1 /oracle/oradata/demo/system01.dbf                  300m                                      SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 500m                                      UNDOTBS
         3 /oracle/oradata/demo/sysaux01.dbf                  200m                                      SYSAUX
         4 /oracle/oradata/demo/users01.dbf                   300m                                      USERS
         5 /oracle/oradata/demo/lxtbs03.dbf                   70m                                       LXTBS
         7 /oracle/oradata/demo/testtbs01.dbf                 30m                                       TESTTBS
         8 /oracle/oradata/demo/testtbs02.dbf                 30m                                       TESTTBS

7 rows selected.

通过alter tablespace来重命名数据文件

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> alter tablespace lxtbs offline;

Tablespace altered.

SQL> select file_id,file_name,tablespace_name,status,online_status from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME                STATUS    ONLINE_
---------- -------------------------------------------------- ------------------------------ --------- -------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM                         AVAILABLE SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS                        AVAILABLE ONLINE
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX                         AVAILABLE ONLINE
         4 /oracle/oradata/demo/users01.dbf                   USERS                          AVAILABLE ONLINE
         5 /oracle/oradata/demo/lxtbs04.dbf                   LXTBS                          AVAILABLE OFFLINE
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS                        AVAILABLE ONLINE
         8 /oracle/oradata/demo/testtbs02.dbf                 TESTTBS                        AVAILABLE ONLINE

7 rows selected.

通过操作系统命令将要改名的数据文件拷到指定路径下。

[oracle@redhat4 demo]$ mv /oracle/oradata/demo/lxtbs04.dbf /oracle/oradata/demo/lxtbs01.dbf

SQL> alter tablespace lxtbs
  2  rename datafile '/oracle/oradata/demo/lxtbs04.dbf' to '/oracle/oradata/demo/lxtbs01.dbf';

Tablespace altered.

SQL> select file_id,file_name,tablespace_name,status,online_status from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME                STATUS    ONLINE_
---------- -------------------------------------------------- ------------------------------ --------- -------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM                         AVAILABLE SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS                        AVAILABLE ONLINE
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX                         AVAILABLE ONLINE
         4 /oracle/oradata/demo/users01.dbf                   USERS                          AVAILABLE ONLINE
         5 /oracle/oradata/demo/lxtbs01.dbf                   LXTBS                          AVAILABLE OFFLINE
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS                        AVAILABLE ONLINE
         8 /oracle/oradata/demo/testtbs02.dbf                 TESTTBS                        AVAILABLE ONLINE

7 rows selected.

此时,表空间LXTBS仍处于离线状态,将其改为上线状态(ONLINE)

QL> alter tablespace LXTBS online;

Tablespace altered.

SQL> select file_id,file_name,tablespace_name,status,online_status from dba_data_files;

   FILE_ID FILE_NAME                                          TABLESPACE_NAME                STATUS    ONLINE_
---------- -------------------------------------------------- ------------------------------ --------- -------
         1 /oracle/oradata/demo/system01.dbf                  SYSTEM                         AVAILABLE SYSTEM
         2 /oracle/oradata/demo/undotbs01.dbf                 UNDOTBS                        AVAILABLE ONLINE
         3 /oracle/oradata/demo/sysaux01.dbf                  SYSAUX                         AVAILABLE ONLINE
         4 /oracle/oradata/demo/users01.dbf                   USERS                          AVAILABLE ONLINE
         5 /oracle/oradata/demo/lxtbs01.dbf                   LXTBS                          AVAILABLE ONLINE
         7 /oracle/oradata/demo/testtbs01.dbf                 TESTTBS                        AVAILABLE ONLINE
         8 /oracle/oradata/demo/testtbs02.dbf                 TESTTBS                        AVAILABLE ONLINE

7 rows selected.

下面是oracle官方文档的语法:

ALTER TABLESPACE tablespace RENAME DATAFILE 'filename' to 'filename';

注意:

Specify RENAME DATAFILE to rename one or more of the tablespace data files. The database must be open, and you must take the tablespace offline before renaming it. Eachfilename must fully specify a data file using the conventions for filenames on your operating system.

This clause merely associates the tablespace with the new file rather than the old one. This clause does not actually change the name of the operating system file. You must change the name of the file through your operating system.

 

 

相关文档:

http://blog.csdn.net/wyzxg/article/details/5623700

 

 

 

0 0