数据字典 dba_free_space及相对文件号RELATIVE_FNO 小结

摘要:
例如:1.1.3 RELATIVE_FNORELATIVE_FNO表空间中的相对文件号范围从1到1023。如果超过1023,将再次从1开始计算。此编号将尝试与文件编号file_ID一致。2.相对文件号测试2.1按如下方式准备脚本测试:$mkdir/tmp/orclSQL˃createtablespacetsp_1datafile'/tmp/ocrl/tsp_1.dbf'size1M;此时,查询视图,其中文件号为14,相对文件号为15。从区域中编号为8的块开始,还剩120个块,即983040字节的可用空间。如果重新启动后参数仍为200且未生效,请执行以下操作:SQL˃alternatdatabasebackupcontrolfiletotraceas'/tmp/orcl/controlfile。ctl';cat/tmp/orcl/controlfile。Ctl可以看到以下段落:STARTUPNOUNTCREATECONTROLFILEREUSEDATABASE“ORCL”RESETLOGSNOARCHIVELOGMAXLOGFILES16MAXLOGMEMBER3MAXDATAFILES200MAXINSTANCES8MAXLOGHISTORY92MAXDATAFILES为200,因此db_文件已更改。

1.1 dba_free_space

1.1.1 概述

SQL> desc dba_free_space;

Name Type Nullable Default Comments

--------------- ------------ -------- ------- -------------------------------------------------

TABLESPACE_NAME VARCHAR2(30) Y Name of the tablespace containing the extent

FILE_ID NUMBER Y ID number of the file containing the extent

BLOCK_ID NUMBER Y Starting block number of the extent

BYTES NUMBER Y Size of the extent in bytes

BLOCKS NUMBER Y Size of the extent in ORACLE blocks

RELATIVE_FNO NUMBER Y Relative number of the file containing the extent

以上是数据库自带的解释,下面再稍加以解释 。

TABLESPACE_NAME 表空间的名字

FILE_ID                 数据库中文件编号,全库唯一的文件编号

BLOCK_ID              数据库每个区开始的块号

BYTES 以BLOCK_ID  开始的区还剩余的空间大小(以bytes为单位)

BLOCKS 以BLOCK_ID 开始的区还剩余的空间大小(以块为单位)

RELATIVE_FNO        包含以BLOCK_ID开始的区的相对文件号,表空间内唯一的文件编号(1-1023一个循环)

1.1.2 BYTES与BLOCKS

BYTES与BLOCKS都表示每个区中剩余的表空间大小,前都以bytes为单位,后者以数据块为单位。假定数据块的大小为8K,那么将有以下关系,BYTES/8/1024 = BLOCKS。例如:

clip_image002

1.1.3 RELATIVE_FNO

RELATIVE_FNO表空间内的相对文件编号,范围为1-1023,超过1023后,将重新从1开始计数。该号码会尽量与文件编号FILE_ID保持一致。

2 相对文件号测试

2.1 准备脚本

测试如下:

$ mkdir /tmp/orcl

SQL> create tablespace tsp_1 datafile '/tmp/orcl/tsp_1.dbf' size 1M;

此时查询该视图

clip_image004

这里文件号为14,相对文件号为14,从区中编号为8的块开始,共有120个块空余,即983040 bytes空余空间。这里总计127个块,创建表空间时为1M, 1*1024/8=128。这里需要注意的是,数据库计算空间的最小单位是数据块,虽然创建的是128个块,但这里分配的是127个块。

SQL> set serverout on size 99999;

SQL> begin

2 for i in 2 .. 1023 loop

3 dbms_output.put_line( 'alter tablespace tsp_1 add datafile ''/tmp/orcl/tsp_' || i || '.dbf'' size 1M;');

4 end loop;

5 end;

6

7 /

将这些语句放到一个文件中。

$ vi /tmp/orcl/add_file.sql

alter tablespace tsp_1 add datafile '/tmp/orcl/tsp_2.dbf' size 1M;

alter tablespace tsp_1 add datafile '/tmp/orcl/tsp_8.dbf' size 1M;

……

……

alter tablespace tsp_1 add datafile '/tmp/orcl/tsp_13.dbf' size 1M;

alter tablespace tsp_1 add datafile '/tmp/orcl/tsp_1023.dbf' size 1M;

2.2 查看空间

查看空间/tmp是直接挂载在/根目录下的,足够创建这1G的文件。

$ df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 44G 25G 18G 59% /

tmpfs 940M 346M 594M 37% /dev/shm

/dev/sda1 194M 28M 157M 15% /boot

2.3 设置参数

更改数据库参数设置

SQL> show parameter files;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_files string +DATA_ASM/orcl/controlfile/current.260.891681141

db_files integer 200

filesystemio_options string none

session_max_open_files integer 10

这个200决定了当前数据库最多有200个数据文件。

SQL> alter system set db_files = 1023 scope=spfile;

System altered

然后重启数据库。

如果重新后参数仍然是200,没有生效,则进行以下操作:

SQL> alter database backup controlfile to trace as '/tmp/orcl/controlfile.ctl';

cat /tmp/orcl/controlfile.ctl

可以看到有下面一段内容:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 200

MAXINSTANCES 8

MAXLOGHISTORY 292

MAXDATAFILES 为 200,所以db_files改了也没有变化。这里我们就需要重建控制文件以修改该参数。

2.4 重建控制文件

shutdown immediate

STARTUP NOMOUNT

重建控制文件前要备份数据库,我是虚拟机,直接将整个虚拟机进行了备份。

将以下重建控制文件的脚本放入一个文件中。

vi create_ctl.sql

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 200

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '+DATA_ASM/orcl/onlinelog/group_1.261.891681143' SIZE 50M BLOCKSIZE 512,

GROUP 2 '+DATA_ASM/orcl/onlinelog/group_2.262.891681149' SIZE 50M BLOCKSIZE 512,

GROUP 3 '+DATA_ASM/orcl/onlinelog/group_3.263.891681155' SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

'+DATA_ASM/orcl/datafile/system.256.891681005',

……

……

'/tmp/orcl/tsp_1.dbf',

'/tmp/orcl/tsp_2.dbf',

'/tmp/orcl/tsp_3.dbf',

……

……

'/tmp/orcl/tsp_187.dbf'

CHARACTER SET AL32UTF8

;

重建控制文件的完整脚本太长这里略一部分,实际执行时根据自己具体的内容执行即可。

$ sqlplus / as sysdba

SQL> @create_ctl.sql;

Control file created.

SQL> alter database open resetlogs;

Database altered.

2.5 再次设置参数

再次更换参数并重启数据库:

alter system set db_files = 1024 scope=spfile;

SQL> show parameter db_files;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_files integer 1024

SQL>

2.6 继续创建表空间

创建完毕后进行查看,可以看到该表空间文件编号从14开始,相对文件号也从14开始

clip_image006

clip_image008

可以看到最后一行相对文件号又从1开始计数了。

而在数据库中SYSTEM表空间的相对文件默认为1,这表明相对文件号在数据库中是可以重复的,这也是“相对”的原因。

clip_image010

2.7 相对文件号小结

相对文件号范围为1-1023,默认从表空间内最小的文件号开始计数,比如一个表空间有三个文件编号分别为14、15、16的文件时,相对文件为也会默认从14开始编号,依次为14、15、16,它会尽量地与文件编号保持一致,直到1023后,才开始从1重新计数。

测试完毕,删除测试表空间,同时删除数据文件:

SQL> drop tablespace tsp_1 including contents and datafiles;

免责声明:文章转载自《数据字典 dba_free_space及相对文件号RELATIVE_FNO 小结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux 中 cp 命令(文件复制)您知道吗:未释放事件Handler可能导致内存泄漏下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

sqlserver 获取实例上用户数据库的数据字典

原理很简单:将获取数据字典信息(通过动态视图获取)存入到目标表(数据字典表)中即可。 本人自用实例 1)创建相关的字典表 useYWMonitor GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO if not exists (select * fro...

基于数据库的vs2019的T4模版代码生成器(一)基于sqlserver数据库

总体介绍 参考文档: https://www.cnblogs.com/laozhang-is-phi/p/9757999.html 只想用 ADO.NET 搭建多层框架,动软代码生成器是一个不错的选择。 T4 (Text Template Transformation Toolkit) 是微软官方在 VisualStudio 2008+ 中开始使用的代码生...

oracle 表空间不足解决办法

Oracle表空间不足,一般有两个原因:   1. 原表空间太小,没有自增长;   2. 表空间已自增长,而且表空间也已足够大 检查原因: 1. 查看表在那个表空间 select tablespace_name,table_name from user_talbes where table_name='test'; 2. 获取用户的默认表空...

第19章 归档模式下的数据库恢复

1. Restore(修复)将数据文件带回到过去(备份的时间点)+Recover(恢复)恢复从备份到数据文件崩溃这段时间内所有提交的数据=>数据库的完全恢复(所有提交的数据都恢复);  1)修复损坏的或丢失的操作系统文件就是使用操作系统命令或其他工具将备份的数据文件复制回来以替换已经损坏或丢失的操作系统的文件;  2)恢复就是使用SQL*Plus的r...

NoSql数据库CounchDB的介绍

本文可以说是我看过的对 CouchDB 的最全面的介绍。 概述 CouchDB,大家或多或少都听说过。它到底有什么特性,适合哪些应用场景,和我们常用的关系型数据库有什么区别? 这些问题,可能我们心里都不是非常清楚。在以前的Blog中(PS,不是在javaeye哦),我提及了几次CouchDB,但是仅仅限于编译,安装这些浮在水面上的工作。今天抽出时间把最近...

sql server 表空间

  在SqlServer2005中,建表时是默认把所有的表都保存在PRIMARY默认表空间中的。当数据库中表很多,并且数据量很大时,会导致数据库性能严重下降,有必要将一些大的表放到不同的表空间中去。主要的步骤如下所示: 1、建立表空间(数据文件) USE [master] GO ALTER DATABASE [TestDB] ADD FILEGROUP...