内存结构
一、SGA
select name,bytes/1024/1024||'M',resizeable from v$sgainfo ;
NAME BYTES/1024/1024||'M' RES
------------------------ -------- -----------------------------------
Fixed SGA Size 2.12664031982421875M No
固定sga区:存储数据库和实例的状态信息等通用信息,不存储用户数据 内部的管理区域,进程间通信的信息;
Redo Buffers 3.62890625M No
日志缓冲区
redo 是sga当中一个循环使用的buffer ,存放描述数据库变化的redo entries(包含用于重建、重做和DML
或DDL语句造成的数据变化)
生产环境中一般设置为8-10M
当redo buffer 记录数达到一定程度时,由LGWR进程写入重做日志
先记录undo 在记录redo
Buffer Cache Size 92M Yes
存储来自数据库文件的数据块副本 款大小默认8K 8192
default pool
keep pool
recycle pool
Shared Pool Size 192M Yes
共享池 -----缓存不同类型的数据
library cache 缓存了可执行的sql和pl/sql代码
data dictionary cache 数据字典 users privs tables columns 用户、权限、表、某个表的字段
server result cache 服务器结果缓存,可以手动设置缓存哪些sql
reserverd pool 解决内存碎片而无法分配内存空间的问题
chunk 内存块 默认4M;
遵循LRU算法
library cache 共享SQL area 核心部分,存放执行计划和解析树
SQL AREA
SQL语句文本
分析树语句的已编译版本
执行计划执行时要采取的步骤
共享PL/SQL AREA 存放编译代码,调试代码,解析树
data dictonsry cache
DC_USERS 用户列表
DC_PRIVS 权限列表
DC_TABLES 表的列表
DC_COLUMNS 某表的字段列表
v$rowcache 查看缓存区数据
Large Pool Size 4M Yes
大池
大池不是因为它大而得名
应用: 共享服务器的UGA
并行执行语句中使用的消息缓冲区
恢复管理器(RMAN) I/O从属进程的缓冲区
Java Pool Size 4M Yes
java池
Streams Pool Size 0M Yes
流池
使用stream流复制的时候使用
Shared IO Pool Size 0M Yes
Sort Extent Pool
在这个表空间中创建的临时段不会在排序的结束的时候取消分配。 而是记为空闲,
不放回空闲列表,并保留再利用。
就是在内存中保存临时段的。
Granule Size 4M No
Maximum SGA Size 497.7578125M No
Startup overhead in Shared Pool 84.3122100830078125M No
flashback buffer 按照一定时间间隔存储变化的数据
算法 LRU least recently used 最近最少使用
oracle会将访问最不频繁的block提供出去
搜索buffer block 的步骤
1.根据进程需要访问的文件号、块号,计算hash值
2.根据hash值在hash表中找到hash bucket
3.搜索bucket后的CBC(cache buffers chains 缓冲链)链表,查找哪个block header是需要的
目标block header
4.找到目标block header,从中读取buffer的 block address
5.按照block address 访问buffer
CR块实验
select owner,object_name,object_id,data_object_id,object_type from dba_objects where object_name='EMP';
OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
SCOTT EMP 13904 13904 TABLE
select BLOCK#,STATUS,OBJD from v$bh where OBJD=13904;
BLOCK# STATUS OBJD
------ ---------- ----------
144 cr 13904
144 xcur 13904
145 xcur 13904
当我们修改数据时,如
update emp set sal=sal+1000;
select BLOCK#,STATUS,OBJD from v$bh where OBJD=13904;
BLOCK# STATUS OBJD
---------- ---------- ----------
144 cr 13904
144 xcur 13904
145 cr 13904
145 xcur 13904
oracle会生成相应块的block#的CR块来保证一致性读
最高会创建5个CR块
解析:查看sql语句的语法,语义部分,将这个sql做hash运算,变成一段hash代码,用这个hash代码去shared pool
里面
的library cache找
查找是否有相同的hash值
如果存在,说明这个语句被执行过,直接重用即可;
如果不存在,需要解析这条语句
硬解析和软解析
硬解析:oracle根据这条语句的具体信息,找出一个最优化的执行计划,并将该执行计划放到shared Pool里
的library cache中
软解析:oracle倾向于使用已经解析过,存放在library cache中的代码,这个重用的过程称之为软解析;
sql最好使用硬解析
查看硬解析的数据字典
select name,value from v$sysstat where name like 'parse%';
NAME VALUE
---------------------------------------------------------------- ----------
parse time cpu 157
parse time elapsed 273
parse count (total) 3370
parse count (hard) 1134
parse count (failures) 7
parse count (describe) 12
二、PGA (只讨论专有模式 dedicated mode)
PGA是一个非共享的内存区域,包含专门供server process进程使用的数据和控制信息
oracle会为每一个用户的请求,分配一个serverprocess 进程
PGA 内容
1.Sort Area 排序
2.Hash Area 用于多表连接
3.Bitmap Merge Area 位图合并
SQL work area 以上
4.session memory
5.Persistent Area
6.Runtime Area
5、6 称为 private SQL area
作用:
1.保存用户的连接信息和绑带变量的信息,查询执行计划状态信息;
2.保存用户权限信息,当用户和数据库建立会话的时候 server process 会将用户的相关权限查询出来
3.当需要排序的时候,或者是要建立大的索引的时候,会在PGA 的sort area进行排序
如果内存空间放不下需要排序的数据大小,溢出部分会在临时表空间内完成
UGA user global area
UGA是与某个用户会话相关联的内存区,UGA是为会话变量分配的会话内存,如登录信息和数据库会话所需的
其他信息。
进程结构
一、后台进程
1.client process
用户使用一个应用程序,如sqlplus 连接数据库,产生的操作系统进程,就是客户端进程;
2.server process
用来处理相应的用户请求
作用;
1)解析和运行应用程序执行提交的sql语句,包括创建执行计划;
2)执行PLSQL代码
3)从数据文件读取数据块到 database buffer pool中
4)返回结果
二、详细:
查询后台进程
select name,description from v$bgprocess; 查看后台进程
NAME DESCRIPTION
----- ----------------------------------------------------------------
PMON process cleanup process monitor process 进程监视器
作用:
1.负责监视其他进程,如果其他的进程出现异常关闭,其负责进程恢复
2.负责清理客户端进程所对应的server process 的数据库缓存和释放资源
3.负责数据库实例的动态注册 每一分钟进行一次 数据库将自己的信息告知给监听器
VKTM Virtual Keeper of TiMe process
时间管理
GEN0 generic0
DIAG diagnosibility process
DBRM DataBase Resource Manager
VKRM Virtual sKeduler for Resource Manager
RSMN Remote Slave Monitor
PING interconnect latency measurement
FMON File Mapping Monitor Process
PSP0 process spawner 0
ACMS Atomic Controlfile to Memory Server
DSKM slave DiSKMon process
DIA0 diagnosibility process 0
LMON global enqueue service monitor
LMD0 global enqueue service daemon 0
LMS0 global cache service process 0
RMS0 rac management server
LMHB lm heartbeat monitor
MMAN Memory Manager
DBW0 db writer process 0
35
database writer process 数据库写进程 负责将database buffer pool 里面的脏块写回数据文件
数据库写进程一般一个就够了,但情况不同可以进行调节;
最多35个
show parameter writer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes integer 1
触发条件:
1.server process 扫描一定数量的buffer之后,仍然没有找到可用的buffer(40%)
2.根据检查点信息,定期触发
3.发生drop或者truncate行为
4.表空间置为read only;
5.表空间 offline
6.当begin backup的时候
7.alter system checkpoint;
MRP0 Managed Standby Recovery
RECO recovery process
负责分布式数据库的分布式事务的恢复;(需要一个数据库对象dblink)
操作的数据来源于两个或多个数据库,此时需要dblink将两个数据库连接
网络中断后事务会中断,RECO进程负责恢复此类事务
ARC0 Archival Process 0
total 30
NSA1 Redo transport NSA1
LGWR Redo etc.
log writer process
负责管理日志缓冲区,将一段连续的日志缓冲区的内容写到日志文件
触发条件:
1.用户提交
2.日志切换
3.每隔3s触发一次
4.日志缓冲区达到1/3时,或者容量达到1M
5.DBWn进程触发的时候,首先触发LGWR
注意:只有将redo log buffer 里的日志信息写回到redo log,commit命令才能提交;
LCK0 Lock Process 0 检查点 (队列概念)
CKPT checkpoint
checkpoint process
检查点进程会按照时间先后顺序来更新控制文件和数据头文件的检查点信息(SCN)
还负责驱动DBWn进程区写脏块
checkpoint 检查点是一个事件
他是一个重要的机制,一致性的数据库关闭,实例恢复,以及数据库的正常运行
用来确定实例恢复所需要的redo block的起始位置
正常运行中,用于控制数据库的buffer 和数据文件的同步行为
意义:
1.保证数据一致性,定期让脏块和数据文件按照时间顺序同步;
2.推进数据库状态,减少实例恢复时间,实例崩溃后已经提交的但没有邂逅数据文件的
块需要实例恢复
3.定期通知DBWn将脏块写回数据文件
出现时机
1.一致性关库;
2.手动发生完全检查点 alter system checkpoint;
3.日志自动切换(完全检查点)
4.热备份
5.表空间和数据文件检查点
将某个表空间或者数据文件对应的脏块写回数据文件;
出现的时机:
表空间read only;
表空间offline normal;
shrinking a data file;
ALTER TABLESPACE BEGIN BACKUP
完全检查点:
一次性将所有redo buffer 写入磁盘
触发条件:
alter system checkpoint
shutdown(shu abort 除外)
日志切换不做完全检查点
增量检查点
将脏块按时间排成一个队列(链表),每次写一部分;
目的是为了避免一次性大量的磁盘写入,oracle每3s触发一次增量检查点
检查点队列
checkpoint queue
检查点队列连接脏块,按照块第一次脏的时间进行排序
ABMR Auto BMR Background Process
LSP1 Dictionary build process for Logical Standby
LSP0 Logical Standby
LSP2 Set Guard Standby Information for Logical Standby
CTWR Change Tracking Writer
RVWR Recovery Writer
FBDA Flashback Data Archiver Process
ARCn 归档进程
当在线重做日志发生切换后,如果数据库是处于归档模式,
那么ARCn进程负责将在线重做日志拷贝到归档位置;
而且ARCn进程,还负责向standby database传递日志;
SMON System Monitor Process
系统监视器进程
负责一系列的清理职责
1.执行实例恢复
2.恢复中断的事务
3.清理不再使用的临时段 清理undo表空间
4.字典管理的表空间中负责回收连续的空闲的区(基本不再使用)
SMCO Space Manager Process
RECO distributed recovery
GTX0 Global Txn process 0 事务
total 20
CJQ0 Job Queue Coordinator 工作队列
RCBG Result Cache: Background
EMNC EMON Coordinator
QMNC AQ Coordinator
DMON DG Broker Monitor Process
RSM0 Data Guard Broker Resource Guard Process 0
NSV0 Data Guard Broker NetSlave Process 0
NSV1 Data Guard Broker NetSlave Process 1
INSV Data Guard Broker INstance SlaVe Process
FSFP Data Guard Broker FSFO Pinger
RBAL ASM Rebalance master
ARB0 ASM Rebalance 0
ASMB ASM Background
MARK mark AU for resync koordinator
GMON diskgroup monitor
VBG0 Volume BG 0
VDBG Volume Driver BG
VMB0 Volume Membership 0
ACFS ACFS CSS
MMON Manageability Monitor Process
管理监视进程
每隔一定时间间隔(默认是一个小时),会将oracle负载情况做一个报告
MMNL Manageability Monitor Process 2
XDMG cell automation manager
XDWK cell automation worker actions
数据库结构
一、物理存储结构
核心文件:
control file
show parameter control_file
select value,name from v$parameter where name like 'control_file';
select * from v$controlfile;
TATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ------------------------------------------------------------ --- ---------- --------------
/u01/app/oracle/oradata/ykyk/control01.ctl NO 16384 612
/u01/app/oracle/fast_recovery_area/ykyk/control02.ctl NO 16384 612
视图:v$database、 v$log、 v$logfile、 v$datafile、 v$tempfile
控制文件最多可以有八个;
进程读的总是第一个控制文件,当第一个控制文件损坏时,读写操作都会出错,当第一个控制
文件之外的其他控制文件出问题时,只有一写操作才会出错,读操作正常。
增加控制文件:
alter system sewt control_files='to/path/control_file.ctl',scope=spfile;
data file
类型:
系统数据,oracle内部元数据信息
用户数据:用户自己业务相关的数据
查看数据文件信息
select file_id,file_name from dba_data_files order by 1;
FILE_ID FILE_NAME
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/ykyk/system01.dbf
2 /u01/app/oracle/oradata/ykyk/sysaux01.dbf
3 /u01/app/oracle/oradata/ykyk/undotbs01.dbf
4 /u01/app/oracle/oradata/ykyk/users01.dbf
5 /u01/app/oracle/oradata/ykyk/example01.dbf
6 /u01/app/oracle/oradata/oracle11g/tbs01.dbf
7 /u01/app/oracle/oradata/oracle11g/tbs02.dbf
8 /u01/app/oracle/oradata/oracle11g/undotbs2.dbf
9 /u01/app/oracle/oradata/oracle11g/tbs03.dbf
select file#,name from v$datafile order by 1;
FILE# NAME
---------- ----------------------------------------------------------------------------------------------------
1 /u01/app/oracle/oradata/ykyk/system01.dbf
2 /u01/app/oracle/oradata/ykyk/sysaux01.dbf
3 /u01/app/oracle/oradata/ykyk/undotbs01.dbf
4 /u01/app/oracle/oradata/ykyk/users01.dbf
5 /u01/app/oracle/oradata/ykyk/example01.dbf
6 /u01/app/oracle/oradata/oracle11g/tbs01.dbf
7 /u01/app/oracle/oradata/oracle11g/tbs02.dbf
8 /u01/app/oracle/oradata/oracle11g/undotbs2.dbf
9 /u01/app/oracle/oradata/oracle11g/tbs03.dbf
online redo log file
在线重做日志是用于recovery的最重要的结构;
里面包含了两个或者更多的预分配的文件,来存放数据库的变化情况;
记录了数据文件的变化;
以组为单位;
组的大小决定里面每个成员的大小;
日志组的每个成员之间是镜像关系;
每个组可以有多个日志文件;生产中每组两个
作用;
1.系统崩溃后的实例恢复
2.通过备份恢复数据文件之后恢复介质
3.备用数据库处理;
4.通过日志挖掘实现数据恢复
日志组切换:
增加日志组:
alter database add logfile group 4 '/u01/app/oracle/oradata/oracle11g/redo04.log' size 50m;
增加成员:
alter database add logfile member '/u01/app/oracle/oradata/oracle11g/redo042.lgo' to group 4;
删除日志组成员:
alter database drop logfile member '/u01/app/oracle/oradata/oracle11g/redo042.log' ;
删除日志组:
alter database drop logfile group 4;
注意: 当前状态和active状态的日志组的成员或者整个日志组不能被删除;
当日志组是 active的状态的时候,如果有多个成员,可以删除其中的成员,
但是不可以将整个组删除(删除时会报错);
日志组的个数至少2个;
日志组成员的个数至少一个,即第一个成员不能删除,要和组一并删除
删除日志组或者是成员的时候,其实是删除了该日志组或是成员在数据字典里的信息,
实际上的在磁盘上的物理文件没有被删除,如果重建同名的日志组会报错,
需要先删除该文件,然后在创建.
日志切换:
自动切换:日志组被写满后,自动发生切换
手动切换:alter system switch logfile;
改变日志组的状态:
alter system flush buffer_cache/alter system checkpoint> inactive
查看日志切换时间
select sequence#,first_time from v$log_history order by 1 ;
查看日志组大小
select group#,bytes/1024/1024 from v$log;
切换频率:8-10分钟 业务繁忙
20 分钟 业务空闲时间
辅助性的非关键性文件:
password files
验证具有sysdba、sysoper权限的用户登录时的密码校验;
保存超级用户sysdba的用户名和口令;
超级用户的密码审核不能依赖数据库内部;
超级用户,具有启动数据库的能力,如果数据库没有启动,就无法验证
密码文件生成命令:
orapwd file=orapw+sid password=password_name
parameter files
作用; 控制数据库的属性和行为的一些设置参数
位置;$ORACLE_HOME
类型:静态 pfile
动态 spfile
搜索规则:
spfile+sid.ora --> spfile.ora --> init+sid.ora
视图:
select name,values,isses_modifiable,issys_modifiable
from v$parameter;
转换;
create pfile from spfile;
create spfile from pfile;
create pfile from memory;
查看启动参数:
show parameter spfile
如果不存在,就是静态参数文件
archived redo log file 15天或者30天删除一次
在线重做日志的运行机制是循环使用,会导致日志被覆盖,为了保证数据不被覆盖
更长时间的保留,那么在线重做日志切换之后,要将写满的在线重做日志,保存在另一个
存储位置
注意:
ARCn这个进程只负责归档操作;
如何查询当前数据库的归档模式?
SYS@lyl>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/arch2 默认存放arch日志路径在flash area
Oldest online log sequence 135
Next log sequence to archive 137 下一个要被归档的日志序列号
Current log sequence 137 当前正在归档的序列号
select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
打开归档模式:
alter database archivelog;
归档日志要放在较快的存储介质上;如果Current log sequence大于Next log sequence to archive说明归档速度慢;
如何提高日志组归档速度:减少日志组切换时间
如果要求归档,归档不成功数据库会hang住,等归档完成,才会正常运行;
查看归档位置:
show parameter log_archive_dest_
数据字典:
v$archived_log
归档日志路径:
select sequence#,name from v$archived_log order by 1;
alter log and trace file
警告日志文件
grep -i ERR alter_<ORACLE_SID>.log 关注报错信息
跟踪文件的类型
1、每个服务器和后台进程可以定期写一个相关的跟踪文件;
2、与后台进程相关的trace file;
orcl11g_lgwr_22285.trc --实例名_进程名_PID
orcl11g_ckpt_22077.trc
backup file
二、逻辑存储结构
1. data block
块 默认8192
[root@ljr ~]# dumpe2fs -h /dev/sda5|grep "Block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
根据业务需求配置块的大小需求,2k\4k\8k\16k\32k
块的开销 block header 描述这个数据块的基本信息,包括磁盘地址,块所属段的类型
对于事物管理的块,块头包含有当前活动的和历史事物信息
oracle ITL(事务槽):
ITL描述:
ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,
位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,
用来记录该块所有发生的事务。
一个itl可以看作是一条事务记录,如果这个事务已经提交,
那么这个itl的位置就可以被反复使用了。
因为itl类似记录,所以也叫itl槽位。
如果一个事务一直没有提交,那么,这个事务将一直占用一个itl槽位,
itl里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,
那么,itl槽位中还保存的有这个事务提交时候的SCN号。
ITL个数其最小值为1,
由参数initrans控制(由于兼容性的原因,oracle会在对象的存储块分配两个itl,
所以initrans的最小值实际上为2),最大值为255,由参数maxtrans控制,
最大值参数在10g以后不能被修改,
itl是block级的概念,一个itl占用块46B的空间,
参数initrans意味着块中除去block header外一部分存储空间无法被记录使用(46B*initrans),
当块中还有一定的free space时,oracle可以使用free space构建itl供事务使用,
如果没有了free space,那么,这个块因为不能分配新的itl,所以就可能发生itl等待。
如果在并发量特别大的系统中,最好分配足够的itl个数,其实它并浪费不了太多的空间,
或者,设置足够的pctfree,保证itl能扩展,但是pctfree有可能是被行数据给消耗掉的,
如update,所以,也有可能导致块内部的空间不够而导致itl等待。
===============================================
事务槽里面主要包括:
Itl:事务槽编号
Xid:指向事务表
Uba:指向具体的回滚块
Flag:是否已提交
Lck:锁定的标志
Scn/Fsc:提交的时间点
table directory 表目录 描述这个数据块存放的是那个表的信息
对于堆表 这个目录包含其行存储在该块中的表的元数据,多个表可以将行存储在相同的块中
row directory
行记录 行的描述信息,这是一个指针数组,指向块中数据部分的行
rowid oracle的记录的具体地址,每一行记录都有自己唯一rowid
rowid,也是表中的一个伪列,oracle数据库使用一个rowid来标识一个行;
rowid 包括 数据对象编号,相对文件的编号,块的编号,行号
select rowid from test where id=1;
ROWID
------------------
AAASydAAKAAAACXAAA
获取对象的创建语句
SYS@ykyk > select dbms_metadata.get_ddl('TABLE','TEST','SYS') from dual;
DBMS_METADATA.GET_DDL('TABLE','TEST','SYS')
--------------------------------------------------------------------------------
CREATE TABLE "SYS"."TEST"
( "ID" NUMBER(*,0)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TBS04"
行迁移
行链接 具体概念不解释
如何消除行链接
将表迁移到有更大blocksize的表空间
拆分表字段到多个表中
如何消除行迁移
使用shrink或move进行段重组。
导出再导入段
2.extent
区是oracle数据库存储空间分配的逻辑单元,由连续的oracle数据块组成;
连续的效果是能够减少磁盘寻道次数,提高读取的效率。
oracle给一个表分配段的时候是以区为单位
查看表相关信息
select
(select name from v$datafile
where file#=e.file_id) file_name,
file_id,block_id,blocks
from dba_extents e
where owner='SYS' and segment_name='TEST';
FILE_NAME FILE_ID BLOCK_ID BLOCKS
/u01/app/oracle/oradata/oracle11g/tbs04.dbf 10 144 8
分配形式: auto allocate;自动分配
3.segment 段
每一个数据对象,都会对应一个存储单元;
同一个数据对象所占用的存储空间就是一个段
select segment_name,segment_type from dba_segments order by 1;
oracle10g创建一个新表 默认分配8个块,64k空间
oracle11g 不分配
SYS@orcl11g> show parameter defer
NAME TYPE VALUE
------------------------------------ ----------- -------------
deferred_segment_creation boolean TRUE
延迟段的创建;
当创建一个新表之后,只有向表中插入数据,才会分配空间,创建段;
需要使用表空间的权限,grant unlimited tablespace to 用
4.tablespace 表空间
表空间是段的存储容器,在屋里层面,有一个或者多个数据文件或者临时文件组成;
用于存放表、索引、回滚段等对象的磁盘存储空间
select file_id,tablespace_name,file_name,bytes,status,autoextensible,
increment_by,maxbytes
from dba_data_files
order by 2;
FILE_ID TABLESPACE_NAME FILE_NAME BYTES STATUS AUT INCREMENT_BY MAXBYTES
---------- ------------------------------ -------------------------------------------------- ---------- --------- --- ------------ ----------
5 EXAMPLE /u01/app/oracle/oradata/ykyk/example01.dbf 362414080 AVAILABLE YES 80 3.4360E+10
2 SYSAUX /u01/app/oracle/oradata/ykyk/sysaux01.dbf 597688320 AVAILABLE YES 1280 3.4360E+10
1 SYSTEM /u01/app/oracle/oradata/ykyk/system01.dbf 796917760 AVAILABLE YES 1280 3.4360E+10
6 TBS01 /u01/app/oracle/oradata/oracle11g/tbs01.dbf 1048576000 AVAILABLE NO 0 0
7 TBS02 /u01/app/oracle/oradata/oracle11g/tbs02.dbf 1048576000 AVAILABLE NO 0 0
9 TBS03 /u01/app/oracle/oradata/oracle11g/tbs03.dbf 104857600 AVAILABLE NO 0 0
10 TBS04 /u01/app/oracle/oradata/oracle11g/tbs04.dbf 52428800 AVAILABLE NO 0 0
3 UNDOTBS1 /u01/app/oracle/oradata/ykyk/undotbs01.dbf 644874240 AVAILABLE YES 640 3.4360E+10
8 UNDOTBS2 /u01/app/oracle/oradata/oracle11g/undotbs2.dbf 524288000 AVAILABLE NO 0 0
4 USERS /u01/app/oracle/oradata/ykyk/users01.dbf 889978880 AVAILABLE YES 160 3.4360E+10
查看当前的表空间的信息 --dba_tablespaces
select tablespace_name,block_size,STATUS,contents,
extent_management,segment_space_management,bigfile
from dba_tablespaces
order by 1;
TABLESPACE_NAME BLOCK_SIZE STATUS CONTENTS EXTENT_MAN SEGMEN BIG
------------------------------ ---------- --------- --------- ---------- ------ ---
EXAMPLE 8192 ONLINE PERMANENT LOCAL AUTO NO
SYSAUX 8192 ONLINE PERMANENT LOCAL AUTO NO
SYSTEM 8192 ONLINE PERMANENT LOCAL MANUAL NO
TBS01 8192 ONLINE PERMANENT LOCAL AUTO NO
TBS02 8192 ONLINE PERMANENT LOCAL AUTO NO
TBS03 8192 ONLINE PERMANENT LOCAL AUTO NO
TBS04 8192 ONLINE PERMANENT LOCAL AUTO NO
TEMP 8192 ONLINE TEMPORARY LOCAL MANUAL NO
UNDOTBS1 8192 ONLINE UNDO LOCAL MANUAL NO
UNDOTBS2 8192 ONLINE UNDO LOCAL MANUAL NO
USERS 8192 ONLINE PERMANENT LOCAL AUTO NO
表空间使用率:
with
free as (
select tablespace_name f1,sum(nvl(bytes,0)) f2 from dba_free_space group by tablespace_name),
used as (
select tablespace_name u1, sum(bytes) u2 from dba_data_files group by tablespace_name) ,
ext_mgr as (
select tablespace_name e1,contents e2,extent_management e3 from dba_tablespaces),
auto as (
select tablespace_name a1,autoextensible a2 from dba_data_files
)
select free.f1 T_name,ext_mgr.e2 E_content,ext_mgr.e3 E_management,lpad(auto.a2,4) Auto,round(used.u2/1024/1024,2) Total_M,
round((used.u2-free.f2)/1024/1024,2) "Used_M", substr((used.u2-free.f2)/used.u2*100,1,5)||'%' "Percent_Used"
from free,used,ext_mgr,auto
where free.f1=used.u1 and used.u1=ext_mgr.e1 and ext_mgr.e1=auto.a1
order by 7 desc
/
---------- ---------------------
SYSAUX PERMANENT LOCAL YES 570 537.81 94.35%
SYSTEM PERMANENT LOCAL YES 760 714.5 94.01%
EXAMPLE PERMANENT LOCAL YES 345.63 310.13 89.72%
UNDOTBS1 UNDO LOCAL YES 615 470.6
查询每个表空间的容量 --包含的所有数据文件的总和
select tablespace_name,sum(bytes) from dba_data_files
group by tablespace_name
order by tablespace_name
TABLESPACE_NAME SUM(BYTES)
------------------------------ ----------
EXAMPLE 362414080
SYSAUX 597688320
SYSTEM 796917760
TBS01 1048576000
TBS02 1048576000
TBS03 104857600
TBS04 52428800
UNDOTBS1 644874240
UNDOTBS2 524288000
USERS 889978880
添加表空间
create tablespace tbs04
datafile '/u01/app/oracle/oradata/orcl11g/tbs04.dbf'
size 20m
extent management local autoallocate; 自动管理;
undo表空间
select * from v$rollname;
查看undo段信息
undo段的状态信息:
desc v$rollstat;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
USN NUMBER 回退段号
LATCH NUMBER
EXTENTS NUMBER 回退段中的区数
RSSIZE NUMBER 回退段以字节极的尺寸
WRITES NUMBER 写到回退段的字节数
XACTS NUMBER 活动的事务处理数
GETS NUMBER 标题获得的数目
WAITS NUMBER 标题等待的数目
OPTSIZE NUMBER 回退段的最佳尺寸
HWMSIZE NUMBER 回退段尺寸的高水位标记
SHRINKS NUMBER 回退段尺寸减少的倍数
WRAPS NUMBER 回退段缠绕的倍数
EXTENDS NUMBER 回退段段尺寸扩展的倍数
AVESHRINK NUMBER 平均收缩尺寸
AVEACTIVE NUMBER 活动区随时间平均的当前尺寸
STATUS VARCHAR2(15) 回退段状态
CUREXT NUMBER 当前区
CURBLK NUMBER 当前块
临时表空间
1.增加临时文件
SYS@orcl11g> alter tablespace temp2
add tempfile '/u01/app/oracle/oradata/orcl11g/temp202.dbf'
size 50m;
2.重置文件的size
SYS@orcl11g> alter database tempfile
'/u01/app/oracle/oradata/orcl11g/temp202.dbf'
resize 55m;
3.自动扩展
SYS@orcl11g> alter database
tempfile '/u01/app/oracle/oradata/orcl11g/temp202.dbf'
autoextend on next 5m maxsize 200m;
4.删除临时文件
SYS@orcl11g> alter tablespace temp2
drop tempfile '/u01/app/oracle/oradata/orcl11g/temp2.dbf';
5.删除临时表空间
SYS@orcl11g> drop tablespace temp2;
200万 400M左右
400万 一个G