Oracle 逻辑结构体系
- 逻辑结构
- 表空间(TABLESPACE)
- 创建表空间
- create tablespace 表空间名称
- 表空间大小
- select sum(bytes)/1024/1024 from dba_data_files where tablespace_name='TBS_LJB';
- 表空间剩余大小查询
- select sum(bytes)/1024/1024 from dba_free_space where tablespace_name='TBS_LJB';
- 表空间不足需要扩大空间
- alter tablespace TBS_LJB add Datafile 位置 100M;
- 将表空间设置为自动扩大
- 将数据字典dba_data_files的AUTOEXTENSIABLE的属性设置为Yes,No为不自动扩大
- alter database datafile 位置 autoextensiable on;
- 表空间大小
- create tablespace 表空间名称
- 普通数据表空间
- create tablespace TBS_LJB
- select file_name,tablespace_name,autoextensible,bytes from DBA_DATA_FILES where tablespace_name='TBS_LJB' order by substr(filename,-12);
- 系统表空间
- 属于永久保留内容的表空间
- select file_name,tablespace_name,autoextensible,bytes/1024/1024 from DBA_DATA_FILES where tablespace_name like 'SYS%' order by substr(file_name,-12);
- 回滚段表空间
- 语法有些特殊,有UNDO关键字
- 创建
- create undo tablespace undotbs2 datafile 位置 size 100M;
- 查询
- select file_name,tablespace_name,autoextensible,bytes/1024/1024 from DBA_DATA_FILES where tablespace_name='UNDOTBS2' order by substr(file_name,-12);
- 查询当前在用的回滚段
- show parameter undo
- 查询数据库有几个回滚段
- select tablespace_name,status from dba_tablespaces where contents='UNDO';
- 切换回滚段
- alter system set undo_tablespace=undotbs2 scope=both;
- 删除回滚表空间(必须不在当前回滚表空间删除当前表空间)
- drop tablespace undotbs1 including contents and datafiles;
- 临时表空间
- 创建
- create TEMPORARY tablespace TEMP_LJB
- 查询
- select file_name,bytes,autoextensible from DBA_TEMP_FILES where tablespace_name='TEMP_LJB';
- 建用户时指定表空间和临时表空间
- create user ljb
- identified by ljb
- default tablespace tbs_ljb
- temporary tablespace temp_ljb;
- 临时表空间组
- 临时表空间组的推出,可以让我们往表空间组时不断新增临时表空间,让数据库在运行时自动从临时表空间组中选择各个临时表空间,不只是用户层面,而且是在SESSION层面进行IO均衡负载,极大地提升了数据库的性能。
- 查询
- select * from dba_tablespace_groups;
- 创建
- 用户表空间
- 属于永久保留内容的表空间
- 指定用户的默认表空间
- sysdba用户登录,假如ljb用户存在,先删除
- sqlplus "/ as sysdba"
- drop user ljb cascade;
- 建用户,并将先前建的表空间tbs_ljb和临时表空间temp_ljb作为ljb用户的默认使用空间
- create user ljb
- identified by ljb
- default tablespace tbs_ljb
- temporary tablespace temp_ljb;
- 授权,暂且将最大权限给ljb用户(切记只能在非生产环境做实验)
- grant dba to ljb;
- 登录ljb用户
- connect ljb/ljb
- sysdba用户登录,假如ljb用户存在,先删除
- 创建表空间
- 段(SEGMENT)
- 在Oracle数据库中,只要segment创建成功,数据库就一定为其分配了若干数据块(data block)的初始数据扩展(initial extent),即使没有数据
- 查询用户的数据字典segment相关信息
- select * from user_segments
- 区(EXTENT)
- Oracle数据库分配空间最小的扩展单位
- 查询用户的数据字典extent相关信息
- select * from user_extents
- 块(BLOCK)
- 是Oracle数据库最小的逻辑单位
- 查询大小
- show parameter db_block_size
- select block_size from dba_tablespace where tablespace_name='SYSTEM';
- 查询大小
- 补充OS
- 大多数的操作系统OS的块容量为512字节或其整数倍而数据库块默认为8KB。数据库的Block一般设置为操作系统OS块容量的整数倍,这样可以减少IO的操作,否则会浪费空间
- 数据块结构
- 数据块头(common and variable header)
- 包括标准内容和可变内容
- 包含了此数据块的概要内容,例如块的地址(block address),及此数据块所处的段(segment)的类型(比如说到底是表还是索引)
- 表目录区(table directory)
- 只要有一行数据插入到数据块中,该行数据所在的表的信息将被存储在这个区域
- 行目录区(row diretory)
- 存放你插入的行的地址
- 可用空间区(free space)
- 空余空间,空余多少是由Oracle的PCTFREE参数设置,如果是10,则该块会空余10%左右的表空间
- 行数据区(row data)
- 存储具体的行的信息或索引的信息,这部分占用了数据块绝大部分的空间
- 数据块头(common and variable header)
- 优化数据块空间的属性
- Pctfree
- 块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到此上限时,新的数据将不能插入此块中
- Pctused
- 制定块中数据使用空间的最低百分比
- Pctfree
- 是Oracle数据库最小的逻辑单位
- 表空间(TABLESPACE)
此文章为个人的笔记,如有写的不对或你对这方面还有什么高见,评论区见。