您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/6/7 21:22:49发布27次查看
表空间被删除时ts$表中并不会删除相关表空间的记录。只是把表空间的状态置为3,即invalid状态。如果再次创建同名的表空间,则ora
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' - 该文件已是数据库的一部分
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product