5 - 数据库存储结构(表空间、段、区和块)

第五课

5.1 表空间、段、区和块

物理和逻辑存储结构:
在这里插入图片描述
Tablespace:表空间(dba_tablespaces,v$tablespace, dba_free_space)
Segment:段(dba_segments,表,index,分区表)

select distinct segment_type from dba_segments;(堆表)
TABLE:堆表结构
INDEX:索引段
TYPE2 UNDO:undo段,撤销段,undo表空间
ROLLBACK:回滚段,system
NESTED TABLE:嵌套表

Extent:区(dba_extents) 最小扩展单位
Datablock:Oracle数据块 最小逻辑单位

oracle数据块–操作系统数据块的整数倍
oracle数据块:db_block_size 8192 8k
操作系统块:
xfs_info /dev/sda3
file -s /dev/sda3
在这里插入图片描述
在这里插入图片描述
数据块block:
在这里插入图片描述
在这里插入图片描述
块头:块头包含段类型(如表或索引)、数据块地址、表目录、行目录和事务槽slot。块头自上而下进行增长。
表目录:表的元数据
行目录:数据行的位置,当数据delete后,修改标记。
行数据:行数据空间自下而上进行增长。

rowid组成:
rowid可以唯一标志记录的物理位置
AAAEhdAABAAALFBAAA
AAAEhd-AAB-AAALFB-AAA
对象ID-数据文件号-块号-块中的第几条记录
dba_objects(查询对象id)

SELECT ROWID,name,
       dbms_rowid.rowid_object(ROWID) obj_id#,
       dbms_rowid.rowid_relative_fno(ROWID) rfile#, --数据文件
       dbms_rowid.rowid_block_number(ROWID) block#,
       dbms_rowid.rowid_row_number(ROWID) row#
  FROM ouzy.tbs01;

在这里插入图片描述
dump数据文件进行观察:
DSI,8i版本。

alter system dump datafile 7 block 133;
select * from v$diag_info;
(/u01/app/oracle/diag/rdbms/zydb/zydb/trace/zydb_ora_32339.trc  )

在这里插入图片描述
在这里插入图片描述

5.2 创建和管理表空间

创建表空间:
默认创建smallfile(最大32G),可选择创建bigfile。
使用EMCC创建表空间
在这里插入图片描述
在这里插入图片描述
可设置16k的块大小,创建的时间即可选择块大小:
show parameter db_block
show parameter cache_size
alter system set db_16k_cache_size=800M;
在这里插入图片描述
区管理和段管理方式:
区管理方式:本地管理和字典管理:字典管理->转化->本地管理
段管理方式:自动和手工
SYSTEM,TEMP,UNDOTBS表空间的段管理使用手动方式,其它自动方式。

SELECT tablespace_name, extent_management, segment_space_management
  FROM dba_tablespaces;

在这里插入图片描述
在这里插入图片描述
表空间相关视图:dba_tablespaces,v$tablespace
自动共享内存管理:ASMM=SGA+PGA automatic shared memory
段管理自动: 使用位图管理段中的空闲空间,自动段空间管理(ASSM)。
段管理手动: 使用空闲列表来管理段中的空闲空间。PCTUSED、FREELISTS、FREELIST GROUPS。
在这里插入图片描述
在这里插入图片描述
区分配:
自动: 区的大小是由系统管理,不能对临时表空间指定自动。
统一: 指定的统一区大小来管理表空间。默认大小为1MB。临时表空间的所有区都是统一的。不能对还原表空间指定"Uniform(统一)"。
在这里插入图片描述

select * from user_extents where segment_name='TBS01';
insert into tbs01 select rownum from dual connect by level<=100000;

logging:
对表空间中的对象所做的更改会写入redo重做日志。如果未启logging,则使用SQL*Loader 和直接加载INSERT 操作都不会写入重做日志,因此,如果发生数据丢失的情况,这些对象将不可恢复。
如果对数据库启用了 FORCE LOGGING 模式,该模式的优先级高于表空间logging设置。
alter database force logging。

insert /*+ append */ into tbs01 select rownum from dual connect by level<=100000;
直接在高水位HWM上方插入数据,锁表。
set autotrace on;(查看SQL运行情况)

5.3 压缩、监控、段指导、段压缩

压缩:
默认情况下,数据段压缩功能处于禁用状态。启用数据段压缩功能可以节省磁盘空间使用量、减少缓冲区高速缓存中的内存使用量,还可以加快读取时执行查询的效率。增加CPU开销。
ALTER TABLESPACE USERS DEFAULT COMPRESS FOR OLTP;
ALTER TABLESPACE USERS DEFAULT COMPRESS FOR BASIC;
(basic只对直接路径压缩)
完整的创建表空间语句:

create tablespace tbs datafile '/u01/tbs.dbf' size 100m autoextend on next 100m maxsize unlimited
logging extent management local autoallocate segment space management auto; default compress for basic|oltp;

create tablespace tbs datafile '/u01/tbs.dbf' size 100m autoextend on next 100m maxsize unlimited
logging extent management local uniform size 1m segment space management auto;

创建表空间:
三种类型:
 永久表空间
 临时表空间tempoary
 撤销表空间undo

创建永久表空间

create tablespace tbs1 datafile '/u01/tbs.dbf' size 100m reuse 
autoextend on next 100m maxsize unlimited
extent management local uniform size 1m
segment space management auto;

创建bigfile类型:
单个文件大小可以达到4G block(32TB) 一个表空间只能有一个bigfile.

create bigfile tablespace tbs1 datafile '/u01/tbs.dbf' size 100m reuse 
autoextend on next 100m maxsize unlimited
extent management local uniform size 1m
segment space management auto;

创建压缩表空间:

create tablespace tbs01 datafile '/u01/app/oracle/oradata/prod/tbs01.dbf' 
size 100m reuse autoextend on next 50m maxsize 20g
default compress for [oltp|basic];

创建临时表空间

create temporary tablespace temp2 tempfile   '/u01/temp2.dbf' size 100m reuse 
autoextend on next 100m maxsize unlimited;

指定临时表空间组:

create temporary tablespace lmtemp2 tempfile '/u01/lmtemp201.dbf' size 50m tablespace group tmpgrp;

alter tablespace lmtemp tablespace group tmpgrp;
alter database default temporary tablespace tmpgrp;

创建撤销表空间类型(UNDO)

create undo tablespace undotbs datafile  '/u01/undo.dbf' size 100m reuse autoextend on next 100m maxsize unlimited;

变更表空间:
重命名。

alter tablespace tbs1 rename to tbs2;

更改状态:只读、读写。不能使SYSTEM 或SYSAUX 表空间处于只读模式。
脱机:normal、temporary、immediate

alter tablespace users offline normal;
alter tablespace users offline temporary;
alter tablespace users offline immediate;归档模式

更大小:
扩容:添加数据文件,或者更改现有数据文件的大小。
缩容:

alter database datafile /u01/users01.dbf' resize 30m;
大于已有的数据。

删除表空间:

drop tablespace "users" including contents and datafiles cascade constraints;

在这里插入图片描述
相关视图:
dba_tablespaces、v t a b l e s p a c e , d b a f r e e s p a c e d b a d a t a f i l e s 、 v tablespace,dba_free_space dba_data_files、v tablespacedbafreespacedbadatafilesvdatafile
dba_temp_files、v$tempfile

OMF(Oracle管理的文件):
db_create_file_dest:数据文件和临时文件的默认位置
db_create_online_log_dest_n:重做日志和控制文件的创建位置
db_recovery_file_dest:快速恢复区的默认位置
db_recovery_file_dest_size:快速恢复区的大小

alter system set db_create_file_dest='/u01';
create tablespace tbs1;默认自动扩展
create tablespace tbs2 datafile size 100m;未自动扩展
文件名: o1_mf_%t_%u_.dbf
SQL> select * from v$dbfile;(查看数据文件存放位置)
SQL> drop tablespace tbs1;(drop自动创建的表空间后,数据文件自动被删除)

在线移动或重命名数据文件:
12c新特性

alter database move datafile '/u01/abc.dbf' to '/u01/abc2.dbf';
alter database move datafile '/u02/abc.dbf' to '/u01/abc3.dbf' keep;
alter database move datafile '/u01/abc.dbf' to '/u01/abc4.dbf';

相关视图: v$session_longops(查询数据文件情况)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值