Welcome 微信登录

首页 / 数据库 / MySQL / 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 SYSUNDOTBS2,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                  3
  9 Liang                   3
10 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      1
7 rows selectedSQL> 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:ORACLELIANGWEIORADATALIANGWEISYSTEM01.DBF
      2 SYSAUX           D:ORACLELIANGWEIORADATALIANGWEISYSAUX01.DBF
      3 UNDOTBS1         D:ORACLELIANGWEIORADATALIANGWEIUNDOTBS01.DBF
      4 USERS            D:ORACLELIANGWEIORADATALIANGWEIUSERS01.DBF
      5 EXAMPLE          D:ORACLELIANGWEIORADATALIANGWEIEXAMPLE01.DBF
      6 TBS_REPORT       D:ORACLELIANGWEIORADATALIANGWEITBS_REPORT1.DBF
6 rows selectedSQL> CREATE  tablespace test DATAFILE "D:ORACLETEST02.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       27 rows selectedSQL> 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:ORACLELIANGWEIORADATALIANGWEISYSTEM01.DBF
      2 SYSAUX           D:ORACLELIANGWEIORADATALIANGWEISYSAUX01.DBF
      3 UNDOTBS1      D:ORACLELIANGWEIORADATALIANGWEIUNDOTBS01.DBF
      4 USERS             D:ORACLELIANGWEIORADATALIANGWEIUSERS01.DBF
      5 EXAMPLE         D:ORACLELIANGWEIORADATALIANGWEIEXAMPLE01.DBF
      6 TBS_REPORT   D:ORACLELIANGWEIORADATALIANGWEITBS_REPORT1.DBF
      7 TEST                D:ORACLETEST02.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:ORACLETEST01.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:ORACLETEST02.DBF" SIZE 10M;
CREATE  tablespace TEST DATAFILE "D:ORACLETEST02.DBF" SIZE 10M
*
第 1 行出现错误:
ORA-01543: 表空间 "TEST" 已存在新创建的数据文件也不能与数据库中已有的数据文件同名。
SQL> CREATE  tablespace TEST2 DATAFILE "D:ORACLETEST02.DBF" SIZE 10M;
CREATE  tablespace TEST2 DATAFILE "D:ORACLETEST02.DBF" SIZE 10M
*
第 1 行出现错误:
ORA-01537: 无法添加文件 "D:ORACLETEST02.DBF" - 该文件已是数据库的一部分使用Sybase OpenClient 访问数据库MySQL update不能直接使用select的结果相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数