oracle数据库对象的逻辑和物理结构

来源:互联网 发布:方媛的淘宝店铺叫什么 编辑:程序博客网 时间:2024/04/29 07:02

Database Storage Hierarchy

一、先谈谈数据库和实例:

简单来说有时候这两个名词有时可以互换使用、但是其概念还是不同的。

实例是个动态概念,它由一系列进程和内存区域组成;而数据库是个静态概念,主要指的是构成数据库的一系列文件。一般情况下实例与数据库是一对一的,但是在多实例数据库环境下,一个数据库可以对应多个实例。
实例 instance =进程 + 进程所使用的内存(SGA)
数据库 database=物理操作系统文件或磁盘(disk)的集合(redo文件+control文件+data文件+临时文件)
数据库实例也称作服务器, 是用来访问数据库文件集的存储结构及后台进程的集合.
1、一个数据库可以被多个实例访问(称为真正的应用群集选项).
2、一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库
3、Oracle的实例在启动以后,只能load一次数据库,如果想把数据库与Instance断开,然后再重新挂在一个数据库Instance,那么就需要你首先把数据库Instance进程结束,然后重新建立这个instance的一个进程,再load另外一个数据库。否则肯定要抛除ORA-16169错误,说数据库已经被打开。因为一个数据库Instance在其生存期中最多只能load和打开一个instance。.
4、另外实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义

二、数据库的逻辑结构


数据库(实例)——X表空间——X段——X扩展(区)——X数据块--(OS Block)

对应的数据字典:

v$database--dba_tablespaces(user_tablespaces)-- dba_segments(user_segments--dba_extents(user_Extents)--extent(或segment)表中的一个字段BLOCKS

数据库、表空间、段、扩展、数据块为逻辑结构

数据文件(dba_data_files)、操作系统块为物理结构


 段(segment)是一种在数据库中消耗物理存储空间的任何实体,在11g中段的类型由:表(table),索引(Index), 回滚(Rollback),分区等11种组成,下面的sql可查看所有段的类型。

SQL> select distinct segment_type fromdba_segments;


SEGMENT_TYPE

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

LOBINDEX

INDEX PARTITION

NESTED TABLE

TABLE PARTITION

ROLLBACK

LOB PARTITION

LOBSEGMENT

TABLE

INDEX

CLUSTER

TYPE2 UNDO


已选择11行。



表和段的关系:表是段的一种(一个表可对应一个或多个段),但段不一定是表。表是逻辑对象;段是物理存储对象


通过下面的sql语句可以查看某个表空间的段、区、块的分布情况。

SQL>  select SEGMENT_NAME,extent_id,block_id,blocks,bytes  from dba_extentswhere tablespace_name='USERS'; 


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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

SYS_XDBPD$565_L     0       352   8   65536

SYS_XDBPD$564_L     0       336   8   65536

SYS_XDBPD$563_L     0       320   8   65536

SYS_XDBPD$562_L     0       304   8   65536

SYS_XDBPD$561_L     0       288   8   65536

EXTRADATA566_L     0       272   8   65536

NAMESPACES567_L     0       256   8   65536

SYS_LOB0000074465C00     0       224   8  65536

010$$


SYS_LOB0000074465C00     0       208   8  65536


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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

005$$


SYS_LOB0000074461C00     0       176   8  65536

004$$


SYS_C0011041     0       520   8   65536

SYS_C0011040     0       512   8   65536

SYS_C0011039     0       504   8   65536

SYS_C0011038     0       496   8   65536

SYS_FK0000074510N000     0       464   8  65536

07$


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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


SYS_FK0000074510N000     0       480   8  65536

09$


SYS_C0011037     0       384   8   65536

ACTION_TABLE_MEMBERS     0       376   8  65536

LINEITEM_TABLE_MEMBE     0       368   8  65536

RS


SYS_IL0000074460C000     0       360   8  65536

33$$


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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


SYS_IL0000074460C000     0       344   8  65536

26$$


SYS_IL0000074460C000     0       328   8  65536

17$$


SYS_IL0000074460C000     0       312   8  65536

12$$


SYS_IL0000074460C000     0       296   8  65536


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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

08$$


SYS_IL0000074460C000     0       280   8  65536

05$$


SYS_IL0000074460C000     0       264   8  65536

04$$


SYS_C0011034     0       240   8   65536

SYS_C0011034     1       408   8   65536

SYS_C0011034     2       448   8   65536


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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

SYS_IL0000074465C000     0       232   8  65536

10$$


SYS_IL0000074465C000     0       216   8  65536

05$$


SYS_C0011033     0       192   8   65536

SYS_IL0000074461C000     0       184   8  65536

04$$


PK_EMP     0       152   8   65536


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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

PK_DEPT     0       136   8   65536

CATEGORIES_TAB     0       488   8   65536

SUBCATEGORY_REF_LIST     0       472   8  65536

_NESTEDTAB


PRODUCT_REF_LIST_NES     0       456   8  65536

TEDTAB


PURCHASEORDER     0       248   8   65536

PURCHASEORDER     1       424   8   65536

LINEITEM_TABLE     0       200   8   65536


SEGMENT_NAME     EXTENT_ID   BLOCK_ID    BLOCKS  BYTES

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

LINEITEM_TABLE     1       392   8   65536

LINEITEM_TABLE     2       400   8   65536

LINEITEM_TABLE     3       416   8   65536

LINEITEM_TABLE     4       432   8   65536

LINEITEM_TABLE     5       440   8   65536

ACTION_TABLE     0       168   8   65536

SALGRADE     0       160   8   65536

EMP     0       144   8   65536

DEPT     0       128   8   65536


已选择50行。





DBA_TABLESPACES记录的是表空间的逻辑信息,而DBA_DATA_FILES视图则记录的是物理数据文件的信息,这些信息包括数据文件的名称、大小、所属表空间等信息:

SQL>selectfile_id,relative_fno,file_name,tablespace_name,round(bytes/1024/1024,2)MB from dba_data_files;


可以通过DBA_SEGMENTS查询数据库中段的信息,这些信息包括对象名称、类型、所属表空间、空间使用等信息。


DBA_EXTENTS视图记录了Segment中区的分配情况,可以通过以下两个查询获得某个用户每个区的分配情况:

SQL> select distinct OWNER fromdba_extents ;


OWNER

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

MDSYS

TSMSYS

DMSYS

OUTLN

CTXSYS

OLAPSYS

SYSTEM

EXFSYS

SCOTT

DBSNMP

ORDSYS


OWNER

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

SYSMAN

XDB

SYS

 

WMSYS


SQL> selectsegment_name,file_id,extent_id,block_id,blocks from dba_extentswhere OWNER='SCOTT';


SEGMENT_NAME

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

   FILE_ID EXTENT_ID BLOCK_ID    BLOCKS

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

DEPT

4        8


EMP

4        25 8


BONUS

4        41 8



SEGMENT_NAME

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

   FILE_ID EXTENT_ID BLOCK_ID    BLOCKS

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

SALGRADE

4        49 8


PK_DEPT

4        17 8


PK_EMP

4        33 8




数据库逻辑上最小的单元就是data block, block 可以设置为2K, 4K, 8K....

extent由block组成,segment则由extent组成,tablespace由segment组成,
datafile是数据库的物理表现形式,一个tablespace可以对应多个datafile,一个datafile只能属于一个tablespace。



利用dba_tablespaces可以用来查看所有表空间的基本信息;而dba_data_files可以用来查看相关数据文件的信息(需要管理员权限)

例:

1、查看当前数据库所有表空间

SQL> select TABLESPACE_NAME fromdba_tablespaces;


TABLESPACE_NAME

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

SYSTEM

UNDOTBS1

SYSAUX

TEMP

USERS

MYMOTIF_TS


2、查询当前数据库中的所有表空间和对应的操作系统数据文件
SQL>  select file_name,tablespace_namefrom dba_data_files;

FILE_NAME TABLESPACE_NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/test/users01.dbf USERS
/opt/oracle/oradata/test/sysaux01.dbf SYSAUX
/opt/oracle/oradata/test/undotbs01.dbf UNDOTBS1
/opt/oracle/oradata/test/system01.dbf SYSTEM
/opt/oracle/oradata/test/mymotif_ts.dbf MYMOTIF_TS


SQL> set linesize100

SQL> column  SEGMENT_NAME formata40

SQL> column TABLESPACE_NAME format a40

SQL> selectSEGMENT_NAME,TABLESPACE_NAME from user_segments;


3、当前用户(scott)下的数据段:

SQL> descuser_segments

 名称                                        是否为空?类型

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

 SEGMENT_NAME VARCHAR2(81)

 PARTITION_NAME VARCHAR2(30)

 SEGMENT_TYPE VARCHAR2(18)

 SEGMENT_SUBTYPE VARCHAR2(10)

 TABLESPACE_NAME VARCHAR2(30)

 BYTES NUMBER

 BLOCKS NUMBER

 EXTENTS NUMBER

 INITIAL_EXTENT NUMBER

 NEXT_EXTENT NUMBER

 MIN_EXTENTS NUMBER

 MAX_EXTENTS NUMBER

 MAX_SIZE NUMBER

 RETENTION VARCHAR2(7)

 MINRETENTION NUMBER

 PCT_INCREASE NUMBER

 FREELISTS NUMBER

 FREELIST_GROUPS NUMBER

 BUFFER_POOL VARCHAR2(7)

 FLASH_CACHE VARCHAR2(7)

 CELL_FLASH_CACHE VARCHAR2(7)


SQL> set linesize100

SQL> column  SEGMENT_NAME formata40

SQL> column TABLESPACE_NAME format a40

SQL> selectSEGMENT_NAME,TABLESPACE_NAME from user_segments;


SEGMENT_NAMETABLESPACE_NAME

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

DEPT USERS

EMP USERS

SALGRADE USERS

PK_DEPT USERS

PK_EMP USERS


SQL> selectSEGMENT_NAME,EXTENT_ID from user_extents;


SEGMENT_NAME EXTENT_ID

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

DEPT 0

EMP 0

SALGRADE 0

PK_DEPT 0

PK_EMP 0



基本上每个对象对应一个段( Segment),只有分区对应多个段,这里的对象包括tableindexpartition等等,段可以跨越多个数据文件。



0 0
原创粉丝点击