数据库逻辑结构

Tablespace

表空间:管理的是extent,DMT和本地管理,DMT(数据字典管理)已经淘汰,不用了,现在都是本地管理。

段空间:管理的是block,手工和自动,手工用的是freelist ,自动用的是位图,现在都是自动,不用手工。

表空间的限制:

1. 一个表空间最多支持 1022 个数据文件
2. 每个数据文件最多包含 4194303 个block
3. 一个8k的block_size的数据文件最大限制是32G ,生产上,我们一般给到30G.

永久表空间

# 创建永久表空间
create tablespace lchtbs datafile '/oradata/lchdb/lchtbs.dbf' size 5m autoextend off;

计算表空间利用率,三个重要的文件:dba_data_files;dba_free_space;dba_extents

# 查看表空间大小
select FILE_ID,FILE_NAME,TABLESPACE_NAME,BYTES/1024/1024 MB from dba_data_files where TABLESPACE_NAME='LCHTBS';

# 查看剩余表空间大小
select FILE_ID,TABLESPACE_NAME,BYTES/1024/1024 MB from dba_free_space where TABLESPACE_NAME='LCHTBS';

# 查看扩展表空间大小
select tablespace_name,sum(bytes)/1024/1024 MB from dba_extents where tablespace_name = 'LCHTBS' group by tablespace_name;

表空间扩容

# 修改数据文件大小
alter database datafile '/oradata/lchdb/lchtbs.dbf' resize 5M;

# 增加数据文件并开启自动扩展
alter tablespace lchtbs add datafile '/oradata/lchdb/lchtbs01.dbf' size 5m autoextend off;

注意:表空间可以改小,但是必须在高水位以上

image.png

image.png

修改表空间状态

alter tablespace users read only(read write/offline/online);

undo表空间

作用

1. 读一致性:确保在查询执行期间,其他事务的修改不会影响查询结果,即使数据已经被写入磁盘。当读取数据时发现数据不一致,需要去undo表中读取,构造CR(current read)块

2. 事务回滚:当用户执行 ROLLBACK 语句时,Oracle 使用 Undo 表空间中的数据将数据库恢复到事务开始前的状态。但是一旦提交就没办法回滚了。在undo表空间中数据至少保留retention时间。

3. 实例恢复:在数据库崩溃后,实例恢复过程中,Oracle 会扫描 Undo 表空间,找到未提交事务的前映像,并将数据恢复到事务开始前的状态。

如果 Undo 表空间中的数据被新的事务覆盖(例如 Undo 表空间不足或 UNDO_RETENTION 设置过短),Oracle 将无法找到所需的前映像数据,从而抛出 ORA-01555 错误。注意undo_retention的时间是从commit的时候提交的,如果没有进行commit就会被永久保留。

image.png

管理方式

undo和普通表空间形式上差不多,表空间里面都是segment,undo中的段叫undo segment,其是由oracle自己维护和创建的。

undo表空间是建库的时候默认自己创建的

image.png

system undo:

  1. 对数据字典的修改使用这个segment
  2. 当undo tablespaces出现问题,无法正常使用时,使用这个表空间的undo segment去应急。

查询undo表空间占用率:

select FILE_NAME,TABLESPACE_NAME,BYTES/1024/1024 MB from dba_data_files where TABLESPACE_NAME like '%UNDOTBS%';

extent的状态

每个undo段的段头,有一个事务表默认一个undo segment可以同时支持5个事务。

状态:

free:undo表空间中未被使用的extent
active:当前extent上有未被提交的事务,不可被覆盖使用
unexpired:事务提交之后active会变为unexpired。 --- 未过期
    (1). 不能覆盖 --- guarantee 
    (2). 尽量不覆盖 --- noguarantee 
    查询:select TABLESPACE_NAME,RETENTION from dba_tablespaces where TABLESPACE_NAME = 'UNDOTBS1';
    修改:alter tablespace undotbs1 retention guarantee;
expired:事务已经提交且时间超过undo retention时间,可以被覆盖 --- 过期

空闲undo表空间计算:

image.png

undo tablespace操作

建库时,会自动创建一个undo表空间,这个表空间不能放其他的segment。

undo表空间的数据文件扩容和添加,与普通表空间方法一样,但是默认表空间不能删除,而可以修改,注意:非默认undo 表空间可以被删除

# 默认undo表空间
show parameter undo_tablespace

# 创建undo表空间
create undo tablespace undotest datafile '/oradata/lchdb/undotest01.dbf' size 30M;

# 修改默认表空间
alter system set undo_tablespace=undotest;

# 删除原来默认表空间
drop tablespace undotbs1 including contents and datafiles;

临时表空间

定义以及部分操作

临时表空间(Temporary Tablespace)主要用于处理排序操作(如ORDER BY、GROUP BY、DISTINCT等)和临时数据存储(如创建索引时的临时段)。与永久表空间不同,临时表空间中的数据是临时的,不会在事务提交后保留。

# 创建临时表空间
create temporary tablespace temptest tempfile '/oradata/lchdb/temptest01.dbf' size 30m;

# 修改默认临时表空间
alter database default temporary tablespace temptest;

# 删除临时表空间
drop tablespace temp including contents and datafiles;

主要用途

  1. 排序操作:当执行需要排序的SQL语句时,如果内存不足以容纳所有排序数据,Oracle会将部分数据写入临时表空间。


  2. 临时段:在创建索引或执行某些DDL操作时,Oracle会使用临时表空间来存储中间结果。


  3. 哈希连接:在执行哈希连接时,如果内存不足,Oracle会使用临时表空间来存储哈希表。


数据字典和动态性能视图

数据字典

常见的数据字典视图:

  1. DBA_视图:包含数据库中所有对象的信息,只有具有DBA权限的用户可以访问。

    • DBA_TABLES:所有表的信息。
    • DBA_USERS:所有用户的信息。
    • DBA_OBJECTS:所有对象的信息。
  2. ALL_视图:包含当前用户有权限访问的所有对象的信息。

    • ALL_TABLES:当前用户有权限访问的所有表的信息。
    • ALL_VIEWS:当前用户有权限访问的所有视图的信息。
  3. USER_视图:包含当前用户拥有的所有对象的信息。

    • USER_TABLES:当前用户拥有的所有表的信息。
    • USER_INDEXES:当前用户拥有的所有索引的信息。

动态性能视图

动态性能视图(以V$为前缀)提供数据库运行时性能相关的信息。这些视图是基于内存中的数据,反映了数据库的当前状态。它们主要用于监控和调优数据库性能。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇