oracle数据文件编号,oracle中表空间与数据文件编号的连续性

ORACLE中表空间编号与数据文件编号都是连续的,不会断号。如果TS$中表空间出现了断号,

oracle在启动时会进行数据字典和控制文件的校验,发现不一致时,数据库不能正常启动。

表空间被删除时ts$表中并不会删除相关表空间的记录。只是把表空间的状态置为3,即INVALID状态。

如果再次创建同名的表空间,则oracle会把TS$表中同名表空间的状态由3置为1,ONLINE状态。以此

来保证表空间号的连续。

ORACLE 10g中sql.bsq记录了ts$的online$列与file$的status$列的含义:

ts$

online$  /* 1 = ONLINE, 2 = OFFLINE, 3 = INVALID */

file$

status$  /* 1 = INVALID, 2 = AVAILABLE */

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

UNDOTBS2,LIANG,Liang这三个表空间被删除,但ts$中并没有删除相关记录。只是把ONLINE$状态置为3(INVALID)

SQL> SELECT ts#,name ,online$  FROM  ts$;

TS# NAME        ONLINE$

--- -----------       -------

0 SYSTEM               1

1 SYSAUX               1

2 UNDOTBS1          1

3 TEMP                   1

4 USERS                 1

5 UNDOTBS2          3  6 EXAMPLE             1

7 TBS_REPORT       1

8 LIANG                  39 Liang                   310 rows selected

-- 数据文件编号一样不会被删除,将删除的数据文件编号置为1(INVALID状态)。

SQL> SELECT  file#,status$ FROM  file$;

FILE# STATUS$

----- ------

1      2

2      2

3      2

4      2

5      2

6      2

7      17 rows selected

SQL> SELECT d.file_id,d.tablespace_name, d.file_name  FROM dba_data_files d

2  order by d.file_id;

FILE_ID TABLESPACE_NAME  FILE_NAME

------- ---------------- ----------------------------------------------------

1 SYSTEM           D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/SYSTEM01.DBF

2 SYSAUX           D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/SYSAUX01.DBF

3 UNDOTBS1         D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/UNDOTBS01.DBF

4 USERS            D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/USERS01.DBF

5 EXAMPLE          D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/EXAMPLE01.DBF

6 TBS_REPORT       D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/TBS_REPORT1.DBF

6 rows selected

SQL> CREATE  tablespace test DATAFILE 'D:/ORACLE/TEST02.DBF' SIZE 10M;

Tablespace created

重新创建数据文件时,如果没有状态为1(INVALID)的数据文件,oracle会新分配一个数据文件编号。

如果有状态为1(INVALID)的数据文件编号,不管新创建的数据文件是否与被删除的数据文件同名。

oracle都会重新利用被设置为状态为1(INVALID)的数据文件编号。以保证数据文件编号的连续性。

新创建数据文件后,发现7号数据文件编号被设置为2(AVAILABLE)

SQL> SELECT  file#,status$ FROM  file$;

FILE# STATUS$

----- -------

1       2

2       2

3       2

4       2

5       2

6       2

7       2

7 rows selected

SQL> SELECT d.file_id,d.tablespace_name, d.file_name  FROM dba_data_files d order by d.file_id;

FILE_ID TABLESPACE_NAME  FILE_NAME

------- ------------------  ----------------------------------------------------

1 SYSTEM           D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/SYSTEM01.DBF

2 SYSAUX           D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/SYSAUX01.DBF

3 UNDOTBS1      D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/UNDOTBS01.DBF

4 USERS             D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/USERS01.DBF

5 EXAMPLE         D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/EXAMPLE01.DBF

6 TBS_REPORT   D:/ORACLE/LIANGWEI/ORADATA/LIANGWEI/TBS_REPORT1.DBF

7 TEST                D:/ORACLE/TEST02.DBF

7 rows selected

新建表空间时,如果ts$中没有同名,且状态为3的表空间。oracle会重新分配一个连续的表空间编号。

SQL> SELECT ts#,name ,online$  FROM  ts$;

TS# NAME      ONLINE$

--- ----------    -------

0 SYSTEM           1

1 SYSAUX           1

2 UNDOTBS1      1

3 TEMP               1

4 USERS             1

5 UNDOTBS2      3

6 EXAMPLE         1

7 TBS_REPORT   1

8 LIANG              3

9 Liang               3

10 TEST               1

11 rows selected

如果创建同名的表空间,oracle会利用原有状态为3的表空间,同时将状态置为1.SQL>  CREATE  tablespace LIANG DATAFILE 'D:/ORACLE/TEST01.DBF' SIZE 10M;

Tablespace created

创建同名表空间LIANG后,8号表空间状态由3变为1.

SQL> SELECT ts#,name ,online$  FROM  ts$;

TS# NAME          ONLINE$

--- ---------- ----------

0 SYSTEM              1

1 SYSAUX              1

2 UNDOTBS1         1

3 TEMP                  1

4 USERS                1

5 UNDOTBS2         3

6 EXAMPLE            1

7 TBS_REPORT       1

8 LIANG                  1

9 Liang                   3

10 TEST                   1

11 rows selected

新创建的表空间不能与数据库中已有的表空间同名。

SQL> CREATE  tablespace TEST DATAFILE 'D:/ORACLE/TEST02.DBF' SIZE 10M;

CREATE  tablespace TEST DATAFILE 'D:/ORACLE/TEST02.DBF' SIZE 10M

*

第 1 行出现错误:

ORA-01543: 表空间 'TEST' 已存在

新创建的数据文件也不能与数据库中已有的数据文件同名。SQL> CREATE  tablespace TEST2 DATAFILE 'D:/ORACLE/TEST02.DBF' SIZE 10M;

CREATE  tablespace TEST2 DATAFILE 'D:/ORACLE/TEST02.DBF' SIZE 10M

*

第 1 行出现错误:

ORA-01537: 无法添加文件 'D:/ORACLE/TEST02.DBF' - 该文件已是数据库的一部分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值