热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracel逻辑结构—表空间

oracel逻辑结构—表空间Tablespace:表空间是一个逻辑的概念,是数据文件(datafile)的容器,是数据文件在数据库中逻辑的组织形式。而数据文件真实的存在于操作系统之上,也可以是裸设备(ASM)。...SyntaxHighlighter.all();

oracel逻辑结构—表空间
 
Tablespace:表空间是一个逻辑的概念,是数据文件( datafile )的容器,是数据文件在数据库中逻辑的组织形式。而数据文件真实的存在于操作系统之上 , 也可以是裸设备( ASM )。  www.2cto.com  
常见的表空间有:
1、 system系统表空间
数据库创建时就创建,必须包含,存放数据库基本组件信息 比如基表。主要存储的是基表和数据字典,其实大家在对表、索引等数据库对象修改结构时都是在操作system 表空间里的表。如 alter 语句;
 
2、 sysaux辅助表空间
10G引入  system 太大了 . 就将部分功能组件(如 sqlplus 的工具)取出放到 sysaux 里, 属于SYSTEM 表空间的辅助表空间,独立出来的好处, SYSTEM 表空间的负荷得以减轻 . ,反复创建一些相关对象及组件引起 SYSTEM 表空间的碎片问题得以避免。
查看sysaux 表空间内的组件信息和大小
Select OCCUPANT_NAME,SPACE_USAGE_KBYTES from V$SYSAUX_OCCUPANTS;
 
3、 undotbs回退表空间
用于事务回退, 保存改前镜像块
 
4、 temp临时表空间
存放临时数据 磁盘排序或临时表
 
5、 users和 example
oracle提供的样本数据表空间
 
6、 用户数据表空间
用户自建
 
一、 表空间的类型
查看表空间的类型
idle> select TABLESPACE_NAME,CONTENTS from dba_tablespaces;
有:永久表空间
临时表空间
回退表空间
1、永久表空间管理
又分为:
小文件表空间( 一个表空间可以存放 1023 个文件 每个文件 4M*block_size)
基本应用都是这类 默认创建也是它
大文件表空间( 一个表空间可以存放 1 个文件 文件管理 4G*block_size)
很少使用, 不利于 IO 分散 , 容易产生争用 , 容易被 FS 限制
1)、查看:
select tablespace_name,file_id,file_name,ceil(bytes/1048567)||'M' MB from dba_data_files;
 
2)、创建小表空间
文件系统:create tablespace mytbs datafile '/PATH/file.dbf' size 10m;
裸设备:create tablespace rawtbs datafile '/dev/raw/raw1' size 4095M
 
3)、创建大文件表空间
 create bigfile tablespace bigtbs datafile '/u01/oracle/oradata/beijing/bigtbs01.dbf' size 5M;
 select tablespace_name,bigfile from dba_tablespaces;
 
二、临时表空间
    存放排序的中间结果或临时表
查看:
select tablespace_name,contents from dba_tablespaces where COnTENTS='TEMPORARY';
创建临时表空间:
create temporary tablespace NAME tempfile '' size 10M;
 
修改用户的临时表空间:
select temporary_tablespace from dba_users where username='SCOTT';
 
alter user scott temporary tablespace temp2;
 
修改数据库默认临时表空间:
alter database default temporary tablespace temp;
 
三、 回退表空间
UNDO表空间 存储的是  rollback segment 。
1、 system 回退段 系统创建 为 system 表空间的对象提供回退
2、非系统回退段 用户创建 为用户表空间的对象提供回退
3、延迟回退段   系统创建 表空间非正常离线时自动创建 我们不能管理
回退表空间的作用:
1.交易的回退 : 没有提交的交易可以 rollback
2.交易的恢复 : 数据库崩溃时 , 将磁盘的不正确数据恢复到交易前
3.读一致性   : 被查询的记录有事务占用 , 转向回滚段找改前镜像
4.闪回数据   : 从回滚段中构造历史数据
回滚段创建的时候是空闲的,只有事务产生时候才会产生数据。
 
创建UNDO 表空间:
 create undo tablespace undo2 datafile '/u01/oracle/oradata/ora10g/undo02.dbf' size 10M;
 
管理风格:自动或手动
 
SQL> show parameter undo
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1
 
undo_management=AUTO 回滚表空间段的段管理模式,
自动管理:
管理员只需要备足够的表空间容量,oracle 会自动管理扩展回滚段的数量。
只能使用一个UNDO 表空间
undo_tablespace:只有在自动管理模式下才可以使用。指明使用哪个 UNDO 表空间。
查看回顾段:select segment_name,tablespace_name,status from dba_rollback_segs;
 
回滚段的名字系统自动取
system是系统回退段 ,DBA 不能管理 .
 
切换回滚表空间的时候不会影响回滚数据:
SQL> alter system set undo_tablespace=undo2;
 
undo_retention= 900  :提交之后旧的镜像保持在回滚段中的时间。非强制的回退保持时间 .( 回滚空间不足老的镜像就会被覆盖 )
 
强制保持:但是对空间要求较大,要慎用。(10g 开始支持 )
alter tablespace UNDOTABS1 RETENTION GUARANTEE;
select  tablespace_name,RETENTION from dba_tablespaces;
 
手工管理UNDO:
修改方法
SYS@beijing> show parameter rollback;
NAME      TYPE  VALUE
------------------------------------ ----------- ------------------------------
fast_start_parallel_rollback      string  LOW
rollback_segments      string
transactions_per_rollback_segment    integer  5
 
默认一个回滚段可以维持5 个事务  不要放太多事务 会产生回滚段头争用 
因为段头中记录段中的块的位置   找段里的数据就要访问段头
 
改成手动
SQL> alter system set undo_management=manual scope=spfile;
SQL> startup force
由于undo_management 是非自动管理,所以要重启才可以生效。
查看undo 段:
select SEGMENT_NAME,TABLESPACE_NAME,STATUS from dba_rollback_segs;
手动创建回滚段 段会自动拓展大小 所以不需要指明
create rollback segment rbs1 tablespace undotbs1;
修改状态:alter rollback segment rbs1 online;
 
关于回滚段的知识我会在segment 中详细讲解。
 
五、表空间的状态
查看表空间的状态:
select tablespace_name,status from dba_tablespaces;
修改状态:
alter tablespace mytbs read write/read only/offline;
 
1、 Online(读写 ) 状态
 
2、 Readonly(只读)状态
只读表空间 只能select 查询和 drop 删除对象 不能修改 (INTSERT update delete truncate)system undotbs temp  包含活动事务的表空间都不能只读,只读表空间不可以修改表数据 但可以删除表结构 因为表结果存储在数据字典中 数据字典在 system 表空间。
 
3、 offline(离线 ) 状态
只可以删除对象(drop)  不可以 select dml truncate, 系统表空间 +default 临时 + 包含活动事务的表空间是不能离线的 , 离线状态 DBA 可以移动数据文件路径 , 离线就是冻结 将 SCN 号锁定在某一时刻
select name,checkpoint_change# open_scn,last_change# stop_scn from v$datafile;
结果:NAME      OPEN_SCN STOP_SCN
-------------------------------------------------- ---------- ----------
/u01/oracle/oradata/ora10g/system01.dbf        475662
/u01/oracle/oradata/ora10g/undotbs01.dbf         475662
/u01/oracle/oradata/ora10g/sysaux01.dbf         475662
/u01/oracle/oradata/ora10g/users01.dbf         476689   476689
/u01/oracle/oradata/ora10g/mytbs01.dbf         476652
 
六、表空间扩容
查看表空间大小:
select tablespace_name,sum(bytes/1048576) curr_MB,sum(MAXBYTES/1048576) MAX_MB from dba_data_files group by TABLESPACE_NAME;
结果:
TABLESPACE_NAME    CURR_MB     MAX_MB
--------------- ---------- ----------
SYSAUX 240 32767.9844
UNDOTBS1 25 32767.9844
USERS 25 32767.9844
SYSTEM     480 32767.9844
MYTBS 10    10
如果最大大小为空 说明不能增长。
 
查询当前分配大小中的剩余尺寸:
SQL> select TABLESPACE_NAME,sum(bytes/1048576) free_mb from dba_free_space group by TABLESPACE_NAME;
结果:
TABLESPACE_NAME    FREE_MB
--------------- ----------
UNDOTBS1     4.0625
SYSAUX       .875
USERS    24.5625
SYSTEM      6.875
MYTBS     10.875
 
扩容的方法:
1、使文件自动增长
alter database datafile '' autoextend on next 10M maxsize 4G;
alter database datafile '' autoextend off;
2、 增加新文件
alter tablespace uses add datafile '' size 5M;
alter tablespace uses drop datafile ''; /*10G才能删 有数据不能删 第一个文件不能删 */
3、 修改现有文件的大小
alter database datafile '' resize 15M;
alter database datafile '' resize 10M;
 
删除表空间和数据文件
1、 删除表空间及其内容一起删除
drop tablespace mytbs INCLUDING CONTENTS;
2、 删除表空间及其文件一起删除
drop tablespace mytbs INCLUDING CONTENTS and datafiles;
 
注意:
创建索引或主键和唯一约束时将索引指定位置存放 生产库一定要把表和索引分开存放
创建索引和带索引的约束时, 指定索引的存储位置
SQL> create index t1_ind on t1(empno) tablespace mytbs;
SQL> ALTER TABLE T1 MODIFY(ENAME constraint T1_pk primary key using index tablespace mytbs);
 

推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
author-avatar
Happy的紫璐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有