oracle区管理⽅式,Oracle表空间的管理⽅式(LMT、DMT)--
本地和字典管理
字典管理:oracle 8i(不包括i),只存在⼀种表空间的管理模式,即字典管理表空间(DMT)。DMT是指oracle的空间分配或回收是通过数据
库中的数据字典表来记录和管理的。⽤于管理的两个数据字典表分别是:UET$(used extents)和FET$(freeextents)。DMT的⼯作⽅式
是:当建⽴⼀个新的段或者段在表空间时,oracle通过⼀系列的SQL语句来完成这个⼯作且和前⾯的两个字典表有关,在繁忙的系统中会造
成竞争和等待(另⼀个DMT会带来的问题是空间碎⽚)。
本地管理(Locally Managed Tablespace,LMT):在创建表空间时,在9i的R2版本后成了默认的选项。LMT在表空间的数据⽂件头部加
⼊了⼀个位图区域,在其中记录每个extent的使⽤状况。当extent被使⽤或者被释放,oracle会更新头部的记录来反映这个变化,不产⽣回
oracle11g 创建数据库滚信息。因为仅仅操作数据⽂件头部的⼏个数据块,不⽤操作数据字典,LMT⽐DMT要快,尤其是在繁忙的时候更明显。
需要注意的是,如果使⽤“CREATE DATABASE”命令创建数据库,且不显式的加“EXTENT MANAGEMENT LOCAL”⼦句时,那么
在创建完数据库后,其SYSTEM表空间默认为字典管理的表空间。只有SYSTEM表空间为字典管理的表空间时,才可以创建基于字典管理
的其它表空间。如果SYSTEM表空间是基于本地管理的,那么⽆法创建基于字典管理的表空间。
--查看表空间使⽤的管理⽅式:
SQL> select TABLESPACE_NAME,EXTENT_MANAGEMENT,BLOCK_SIZE,STATUS,CONTENTS,FORCE_LOGGING,BIGFILE from d
TABLESPACE_NAME                EXTENT_MAN BLOCK_SIZE STATUS    CONTENTS  FOR BIG
------------------------------ ---------- ---------- --------- --------- --- ---
SYSTEM                        LOCAL            8192 ONLINE    PERMANENT NO  NO
UNDOTBS1                      LOCAL            8192 ONLINE    UNDO      NO  NO
SYSAUX                        LOCAL            8192 ONLINE    PERMANENT NO  NO
TEMP                          LOCAL            8192 ONLINE    TEMPORARY NO  NO
USERS                          LOCAL            8192 ONLINE    PERMANENT NO  NO
EXAMPLE                        LOCAL            8192 ONLINE    PERMANENT NO  NO
TBS1                          LOCAL            8192 ONLINE    PERMANENT NO  NO
--DMT 和LMT 的相互转换
--将字典管理的表空间转换为本地管理
exec dbms_space_admin.tablespace_migrate_to_local('表空间名')--表空间名⽤⼤写
-
-将本地管理的表空间转换为字典管理
exec dbms_space_admin.tablespace_migrate_from_local('表空间名')
【OCP真题1】 which two statements are true about tablespaces?
A. A database can contain multiple undo tablespaces.
B. A database instance stores undo data in the SYSTEM tablespace if no undo tablespace exists.
C. A database instance hangs if the SYSAUX tablespace becomes unavailable.
D. A database can contain only a single temporary tablespace.
E. A database with a locally managed SYSTEM tablespace can have dictionary-managed user tablespaces.
Answer:AB
对于C选项,不会hang住。
对于D选项,⼀个数据库可以包含多个临时表空间。
对于E选项,如果系统表空间是基于本地管理的,那么⽆法创建基于数据字典管理的表空间。
SYS@ora11g >  create tablespace test_dic datafile '/u01/app/oracle/oradata/ora11g/test_dic01.dbf' size 10m extent management directory;
create tablespace test_dic datafile '/u01/app/oracle/oradata/ora11g/test_dic01.dbf' size 10m extent management directory
*
ERROR at line 1:
ORA-25141: invalid EXTENT MANAGEMENT clause
SYS@ora11g >  create tablespace test_dic datafile '/u01/app/oracle/oradata/ora11g/test_dic01.dbf' size 10m extent management dictionary;
create tablespace test_dic datafile '/u01/app/oracle/oradata/ora11g/test_dic01.dbf' size 10m extent management dictionary
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace
SYS@ora11g >  select extent_management from dba_tablespaces where tablespace_name='SYSTEM';
EXTENT_MAN
----------
LOCAL
SYS@ora11g > ! oerr ora 12913
12913, 00000, "Cannot create dictionary managed tablespace"
// *Cause: Attemp to create dictionary managed tablespace in database
//        which has system tablespace as locally managed
// *Action: Create a locally managed tablespace.
SYS@ora11g >
只有SYSTEM为字典管理的表空间时才能创建字典管理的普通表空间:
[oracle@rhel6lhr ~]$
db_name=PROD3
db_block_size=8192
db_create_file_dest='/u01/app/oracle/oradata'
control_files='/u01/app/oracle/oradata/l'
sga_target=300m
[oracle@rhel6lhr ~]$
[oracle@rhel6lhr ~]$
[oracle@rhel6lhr ~]$ mkdir /u01/app/oracle/oradata/PROD3
[oracle@rhel6lhr ~]$
[oracle@rhel6lhr ~]$ sas
SQL*Plus: Release 11.2.0.3.0 Production on Tue Apr 24 22:41:03 2018
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to an idle instance.
SYS@orclasm > exit
Disconnected
[oracle@rhel6lhr ~]$ ORACLE_SID=PROD3
[oracle@rhel6lhr ~]$ sas
SQL*Plus: Release 11.2.0.3.0 Production on Tue Apr 24 22:41:17 2018
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to an idle instance.
SYS@PROD3 > startup nomount pfile='/home/';
ORACLE instance started.
Total System Global Area  313159680 bytes
Fixed Size                  2227944 bytes
Variable Size            113246488 bytes
Database Buffers          192937984 bytes
Redo Buffers                4747264 bytes
SYS@PROD3 >create database PROD3 character set al32utf8;
Database created.
/*
Specify the EXTENT MANAGEMENT LOCAL clause in the CREATE DATABASE statement to create a locally managed SYSTEM tablespace. The COMPATIBLE initialization parameter must be set to 10.0.0 or higher for this statement to be successful.If you do not specify the EXTENT MANAGEMENT LOCAL clause, then by default the database creates a dictionary-managed SYSTEM tablespace.Dictionary-managed tablespaces are deprecated.*/
SYS@PROD3 > select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ WRITE
SYS@PROD3 > create tablespace test_dic datafile '/u01/app/oracle/oradata/ora11g/test_dic01.dbf' size 10m extent management dictionary;
Tablespace created.
SYS@PROD3 >
SYS@PROD3 > SET LINE 120
SYS@PROD3 >  SELECT  TS.NAME,decode(ts.bitmapped, 0, 'DICTIONARY', 'LOCAL') extent_management FROM SYS.TS$ TS;
NAME                                                        EXTENT_MANAGEMENT
------------------------------------------------------------ --------------------
SYSTEM                                                      DICTIONARY
SYSAUX                                                      LOCAL
SYS_UNDOTS                                                  LOCAL
TEST_DIC                                                    DICTIONARY
SYS@PROD3 >
【OCP真题1】An online tablespace, TEST_TBS, is full and you realize that no server-managed tablespace threshold alerts were generated for the TEST_TBS tablespace. What could be the reason, i
f the TEST_TBS tablespace does not include autoextensible data files?⼀个名为测试表空间的联机表空间是满的,你意识到测试表空间表没有⽣成服务器管理的表空间阈值警报。如果测试表空间不包括⾃动扩展数据⽂件,可能是什么原因?
A. TEST_TBS is a small file tablespace.
B. TEST_TBS is a bigfile tablespace (BFT).
C. TEST_TBS is the default temporary tablespace.
D. TEST_TBS is a dictionary-managed tablespace. TEST_TBS是⼀个字典管理的表空间。(基于位图的会告警)
Answer: D
解释说明:表空间是⼀个逻辑概念:=> oracle 逻辑概念段区块管理⽅式:
number one =》 tablespace
number two=> segments
Oracle新建⼀个对象,产⽣⼀个对象,这有啥需要管理的吗? 使⽤了⼀个延时段管理;
所以⼀般没⼈会回答表空间的管理是延迟段管理还是⾮延迟段管理,⽽是说区的管理⽅式,就是分配区的⽅式;
number three A:如何寻空闲的区域,给新分配的区,安家落户。
Oracle区的分配的⽅式分两种: directory, local 字典、本地管理,字典管理基本被弃⽤; 那么Oracle分配区的⽅式有没有更细节的呢?例如分配⼀个区,区分给他多⼤?
number three B:衍⽣出,如何对新⽣成的区,给它分配多⼤空间,第⼀种:默认,auto allocative,系统默认分配;第⼆种uniform size;
⾸先解释说明,区的空间⼤⼩如何衡量? 区是由连续的块组成,最初是8个块*8192Bytes=64kb ytes/
*** 相当于看⼈⼝,举例,家族迁移;发⽣战乱,从北⽅逃难,来到美丽的江西九江,九江的官员毕竟负责,来住可以,先统计⼈⼝,判断出,有500多号⼈,按照8个房间,⼀个房间住2个⼈的美好场景=32间房间左右,按照16个房间好管理的⽅式,分配了两个街道(区),每个街道16个房间(块);
如果是⾃动的呢? 官员不负责任,来了500个⼈,按照每个街道,分配8个房间;需要62个街道分配,分配12次;
但是官府有⼀套机制,分配到16个街道之后,官府⾃动增加分配区的⼤⼩,分配第16以后,官府决定⼤⽅⼀点,每个街道(区)分配128间房间,(⿇烦,减少⼯作量)这样最少,也需要分配16个街道*8+ 2-3*128个块的⽅式分配===》也就是说,最少需要分配18次;
以上说明:仅限于理解,⼿动统⼀分配与⾃动的区别,实际还存在⼤量误差,概念可以先理解;
number four;以上分配空间都说了空间不够,分区;
如果是已经分配了区,但是Insert ⼀条数据,它去哪⾥存储呢?,块在哪⾥呢? 段空闲管理⽅式;
number four A: manual⼿⼯,特征,并不是⼿动,⽽是相⽐较B,显得笨拙;
特点: ⼿⼯段空闲管理,在段的头部,段是逻辑概念,如何真时记录数据,归属于段的⼀堆块中,前三个块默认,就是管理单位,建⽴记录了⼀个free list的列表,存储什么样的数据? 存储记录空闲空间的块的信息;需要使⽤块时,去空闲列表,读取空闲块;并发访问会导致添加锁,其它事物等待,这种热快容易产⽣,buffer busy waits热快现象;访问时串⾏⽅式
number four B: auto:默认,我们存储数据,⼀般是⽆序的,哪个块有空闲,就往哪个块⾥⾯存储数据,正是因为没有顺序,所以访问表的数据,需要全表扫描;
⾃动段空闲块管理,采⽤的⽅式是在段的头部建⽴bitmap位图的⽅式记录块是否空闲,⽀持并发访问;
——————————————————————以上是原理,以下通过视图验证查询---
number one;
Aoracle database 11g 默认采⽤段延迟管理;
SQL> show parameter seg
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation            boolean    TRUE
--延迟  段  创建=> ture  false;
什么是延迟管理,如果你创建的对象没有具体的数据存储,Oracle将不会给你分配存储区域,存储区域的管理是段,不会分配段给你;
---创建测试表,只创建表结构,没有数据
SQL> create table emp1 as select * from emp where 1=2;
---查询表的存储,段、区、块、⼤⼩
SQL> select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 "M",BLOCKS,EXTENTS from
user_segments where segment_name='EMP1';
no rows selected
--插⼊数据测试
SQL> insert into emp1 select * from emp where rownum<2;
--再次查询
SQL> select SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 "M",BLOCKS,EXTENTS from
user_segments where segment_name='EMP1';
SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 "M",BLOCKS,EXTENT
EMP1          TABLE              USERS                              .0625        8        1
---修改参数,取消延迟段分配管理,创建测试表,查询结果如下;
---alter system set deferred_segment_creation=false;
EMP2    TABLE              USERS                              .0625        8        1
-------------------------------------------------------------------------------------------------------
number two

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。