热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

表空间被删除时ts$表中并不会删除相关表空间的记录。只是把表空间的状态置为3,即INVALID状态。如果再次创建同名的表空间,则oraOracle中表空

表空间被删除时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 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' - 该文件已是数据库的一部分

本文原创发布php中文网,转载请注明出处,感谢您的尊重!



推荐阅读
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
author-avatar
暖暖252
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有