始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

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

发布时间:  2012/8/20 17:27:57

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                  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 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' - 该文件已是数据库的一部分


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线