千家信息网

Oracle dba_data_files数据字典里的bytes大于maxbytes

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天临下班时,同学发来一个截图,意思是说dba_data_files里的bytes值大于maxbytes值。截图如下:立马感觉就不好了,根据以往的Oracle运维经验觉得这绝对是不可能的。但是数据查出
千家信息网最后更新 2025年01月20日Oracle dba_data_files数据字典里的bytes大于maxbytes

今天临下班时,同学发来一个截图,意思是说dba_data_files里的bytes值大于maxbytes值。截图如下:

立马感觉就不好了,根据以往的Oracle运维经验觉得这绝对是不可能的。但是数据查出来的事实就是这样的。于是上百度搜相关问题,无耐搜出来的都是不太相关的资料。于是直接上MOS找资料,还真有一篇是介绍这个的Value in BYTES Column Greater than MAXBYTES Column in DBA_DATA_FILES (文档 ID 197244.1) 其中有这么一句The BYTES column in DBA_DATA_FILES has a value greater than MAXBYTES column when a datafile was manually resized to a value GREATER than MAXSIZE (MAXBYTES).那现在明白了,手动resize数据文件会导致这一现象。

下面动手还原一下

本次测试的平台为11.2.0.3

--创建一个测试表空间SQL> create tablespace zx1 datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' size 10M;Tablespace created.--查看数据文件的属性SQL> col file_name for a100SQL> set linesize 200SQL> set num 20SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1';FILE_NAME                                                                                            TABLESPACE_NAME                     BYTES   MAXBYTES AUT---------------------------------------------------------------------------------------------------- ------------------------------ ---------- ---------- ---/opt/bboss/tst4/oracle/arch/zx1.dbf                                                                  ZX1                              10485760          0 NO--看到默认数据文件的自动增长为NO,bytes也只有创建时指定的10M--把数据文件转为自动增长SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' autoextend on;Database altered.SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1';FILE_NAME                                                                                            TABLESPACE_NAME                               BYTES             MAXBYTES AUT---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- ---/opt/bboss/tst4/oracle/arch/zx1.dbf                                                                  ZX1                                        10485760          34359721984 YES--看到打开自动增长后MAXBYTES默认为32G,也就是数据文件扩展到32G后就不再扩展--测试是自动扩展--创建测试用户及表SQL> create user zhaoxu identified by zhaoxu;User created.SQL> grant connect , resource to zhaoxu;Grant succeeded.SQL> create table zhaoxu.test1 tablespace zx1 as select * from dba_objects;Table created.--循环插入数据SQL> begin  2  for i in 1..100  3  loop  4  insert /* append */ into zhaoxu.test1 select * from zhaoxu.test1;  5  commit;  6  end loop;  7  end;  8  /begin*ERROR at line 1:ORA-01653: unable to extend table ZHAOXU.TEST1 by 8192 in tablespace ZX1ORA-06512: at line 4--执行一段时间后报错,表空间无法扩展--查看数据文件大小SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1';FILE_NAME                                                                                            TABLESPACE_NAME                               BYTES             MAXBYTES AUT---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- ---/opt/bboss/tst4/oracle/arch/zx1.dbf                                                                  ZX1                                     34293743616          34359721984 YES--看操作系统上的数据文件大小SQL> !du -sk /opt/bboss/tst4/oracle/arch/zx1.dbf33490016        /opt/bboss/tst4/oracle/arch/zx1.dbf--可以看到数据文件增长没有超过MAXBYTES指定的32G--此时resize数据文件SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' resize 33554424k; --由于操作系统限制最大只能33554424k,不过足可以说明问题Database altered.SQL> select file_name,tablespace_name,bytes,maxbytes,bytes-maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1';FILE_NAME                                                                                            TABLESPACE_NAME                               BYTES             MAXBYTES       BYTES-MAXBYTES AUT---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- -------------------- ---/opt/bboss/tst4/oracle/arch/zx1.dbf                                                                  ZX1                                     34359730176          34359721984                 8192 YES--现在看到数据文件的bytes>maxbytes了

上面还原了BYTES>MAXBYTES的过程。

上面提到的表空间的数据文件是自动扩展的,那对于不自动扩展的数据文件又会怎么样呢?

下面继续测试

--取消数据文件的自动扩展SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' autoextend off;Database altered.SQL> select file_name,tablespace_name,bytes,maxbytes,bytes-maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1';FILE_NAME                                                                                            TABLESPACE_NAME                               BYTES             MAXBYTES       BYTES-MAXBYTES AUT---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- -------------------- ---/opt/bboss/tst4/oracle/arch/zx1.dbf                                                                  ZX1                                     34359730176                    0          34359730176 NO--可以看到MAXBYTES变为了0

如果再把数据文件改为可自动扩展又会出现什么情况呢

SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' autoextend on;Database altered.SQL> select file_name,tablespace_name,bytes,maxbytes,bytes-maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1';FILE_NAME                                                                                            TABLESPACE_NAME                               BYTES             MAXBYTES       BYTES-MAXBYTES AUT---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- -------------------- ---/opt/bboss/tst4/oracle/arch/zx1.dbf                                                                  ZX1                                     34359730176          34359730176                    0 YES--可以看到BYTES=MAXBYTES了

下面总结一下:

dba_data_files数据字典里的bytes值和maxbytes没有什么必然的联系

数据文件不可自动扩展时,MAXBYTES=0,BYTES的值既为该文件已实际分配的大小,也为该为件最大大小

数据文件可自动扩展时,默认的MAXBYTES=32G,BYTES为该文件已实际分配的大小,默认情况下BYTES不会超过MAXBYTES,如果对该文件进行resize操作,那么BYTES就用可能大于MAXBYTES。

数据 文件 大小 测试 增长 空间 最大 操作系统 实际 情况 截图 系统 资料 问题 分配 字典 不好 也就是 事实 只有 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 嵌入式系统软件开发环境 潍坊知客网络技术有限公司 如何将网络安全保护隐藏起来 软件开发测试工时比例 湖南java数据库培训 软件开发工作不好找吗 软件开发自动化工具 金山区营销软件开发销售方法 服务器安全狗卸载 怎么修改数据库表的顺序 知名网络安全软件 望海网络技术有限公司 路由器怎么设置虚拟服务器 杭州计算机应用软件开发公司 运营商网络安全风险 国家癌症数据库同期数据 行车数据怎样传输到服务器 重庆好贷网络技术有限公司 沈阳安卓软件开发公司有哪些 构造网络安全校园手抄报 机载嵌入式软件开发ppt 云帮手服务器安全管理 数据库系统没有数据冗余 电脑同花顺切换服务器怎么设置 linux下载服务器文件至本地 软件开发 费用预测 江苏5g服务器小型机柜虚拟主机 光纤网络技术有限公司招聘 徐州网络安全培训机构 分布式 集中式 数据库
0