当前位置:  数据库>oracle

Oracle 10g 对象管理

    来源: 互联网  发布时间:2017-04-06

    本文导语: Oracle数据库中,表,索引,存储过程,函数等都是对象。schema 的名称与用户名相同,但是与用户不是同一回事,如果用户没有任何对象,则schema就不存在。一、表ORACLE表分四类:普通表     ---  一个表对应一个segment分区表 Par...

Oracle数据库中,表,索引,存储过程,函数等都是对象。
schema 的名称与用户名相同,但是与用户不是同一回事,如果用户没有任何对象,则schema就不存在。
一、表
ORACLE表分四类:
普通表     ---  一个表对应一个segment
分区表 Partition Table   虚拟表,没有对应的segment
索引组织表  Index Organized Table  简称 IOT   虚拟表
簇表      ---   虚拟表  首先建立一个簇,一个簇对应一个segment






1、普通表
1)tablespace部分 设置表的logging属性, Yes 表示对表DML操作生成重做条目, No 不生成。
2)Extents部分,  设置Initial size
3)Space Usage部分,设置PCTFREE ,默认10 ,表示数据块可用空间低于10%以后,数据块就不允许insert。PCTUSED 表示什么情况下可以被insert,默认40%,表示
   当数据块使用空间低于40%以后,该数据块就可以再被insert。启用ASSM,就不能设置PCTUSED.
2、rowid  是一个伪列,每一条记录都有rowid伪列。
对应ORACLE10g 来说,rowid 格式:OOOOOOFFFBBBBBBRRR
OOOOOO:数据行所在的对象号
FFF   :数据行所在的相对文件号
BBBBBB:数据行所在的数据块号
RRR   :数据行所在的数据块中的行号
rowid采用64进制,即:A~Z a~z 0~9 / +  64个字符来表示。
A~Z :0~25
a~z :26~51
0~9 :52~61
/   :62
+   :63















例子 rowid = AAAM0hAAEAAAAGnAAA
SQL>select object_id from user_objects where object_name = 'BOOKS';      --对象号
SQL>select dbms_rowid.rowid_relative_fno(rowid) as "File No" from dual;  --文件号
SQL>select dbms_rowid.rowid_block_number(rowid) as "File No" from dual;  --块号
SQL>select dbms_rowid.rowid_row_number(rowid) as "File No" from dual;    --行号



3、管理普通表
1)扩展表:有时需要主动扩展表占用空间,或者将表数据分布到多个文件,将表的I/O分散到多个磁盘上。
SQL>alter table books allocate extent (size 1M datafile '/u01/app/oracel/oradata/ora10g/users02.dbf');
2)重整表  --消除币表的数据块级别的碎片。
稀疏表产生的原因:该表存在很多的insert 和 delete、
在表的segment header里面,记录了一个值,叫高水位标志(High Water Mark 简称HWM)表示当前segment 使用最后一个数据块的位置。
说明:表进行删除数据后,HWM位置不会改变,在对表进行全表扫描时,仍然要扫描到HWM为止。ORACLE10g之前使用move或者导出导入的方式进行重整表来减小WHM,如下:
SQL>alter table books move tablespace example;  --把表移到example表空间,如果没有加表空间,就在当前表对应表空间重整,重整后全表索引失效。
ORACLE 10g 可以使用shrink(收缩)对表进行收缩。
3)收缩表
条件:表所在的表空间必须使用 ASSM (自动段空间管理)
      收缩表引起数据行在不同的数据块转移,必须启用 row movement 选项
SQL>alter table t enable row movement;
收缩表语句:
SQL>alter table t shrink space compact;  --对表t只进行压缩阶段,不下降HWM
SQL>alter table t shrink space;          --对表t只进行压缩阶段,下降HWM
SQL>alter table t shrink space cascade;  --对表t只进行压缩阶段,下降HWM;同时还收缩表t相关的其他segment
说明:可以使用Segment Advisor 帮助哪些segment可以进行收缩。
4)截断表
truncate 命令是一个DDL命令,最后WHM下降到最低。
SQL>truncate table t;
注意:有些时候截断一个巨大的表要花费很长的时间,导致表长时间不能使用。再截断的时候,可以在更新完数据字典以后,不立即释放全部的数据块,但WHM已经下降到最低。
      可以在系统比较空闲分多次释放数据块,每次释放部分空间。命令如下:
SQL>truncate table t1 reuse storage;
SQL>alter table t1 deallocate unused keep 30M;  --将表t1没有用的数据块释放,释放到剩余的表所占用的空间为30M为止。
SQL>alter table t1 deallocate unused keep 15M;
SQL>alter table t1 deallocate unused keep 0M;
说明:如果其他用户已经把数据插入t1,则不会删除,只释放没有的数据块。
5)删除表
删除表属于DDL命令,只是更新数据字典的信息,ORACLE不会读取表包含的数据块信息,因此,即使表处于只读表空间里,该表也是可以被删除的。
SQL>drop table t;  
SQL>drop table t cascade constraints;
添加cascade constraints 选项,同时删除引用表 t 的外键。
6)修改或删除列
SQL>alter table t rename column to code;
SQL>alter table t drop column code;
SQL>alter table t drop column code cascade constraints;  --同时删除引用的外键
注:在删除列的过程中,oracle会消耗undo表空间,如记录很多,会消耗过多的undo表空间。
SQL>alter table t drop column code cascade constraints checkpoint 2000;
checkpoint 2000 表示每2000条记录提交一次,从而释放出undo资源。
注:在删除列的过程中,oracle会锁定表,无法对表进行DML操作,如果数据量很大,则将花费很长时间,在业务高峰期,影响严重。
SQL>alter table t set unused column code;    
SQL>select * from user_unusedd_col_tabs;        ----可以查询到失效的列。
可以先从逻辑上使该列失效,在业务低峰期在物理上删除失效的列。
SQL>alter table t drop umused columns;
SQL>alter table t drop umused columns checkpoint 2000;












































4、约束 constraints
ORACLE 数据库里面,有以下5中约束:
1)非空 not null     ---本质上说,not null 属于 check : col_name is not null
2)唯一 unique
3)主键 primary key
4)外键 foreign key
5)检查 check





约束的状态:
1)enable和disable :对表进行插入或修改时,对插入或修改后的数据进行检验,判断是否违反约束。
2)validate和novalidate :是否对表里已经存在的数据进行检验,判断是否违反约束。
上面的组合存在四种状态。
SQL>alter table books enable validate constraint pk_books;
SQL>alter table books enable novalidate constraint pk_books;
SQL>alter table books rename constraint pk_books to pk_books_id;





约束校验的时机
延迟约束 deferred constraint :约束在提交的时候进行校验。
1)deferrable :说明约束是否可以被延迟,添加该选项说明可以被延迟。
2)initially deferred 或者 initially immediate:说明约束创建时候,何时校验数据。
initially deferred :提交校验。设置该选项必须设置了deferrable。
initially immediate:默认值,立即校验。
SQL>alter table sales add constraint chk_sales check(price*qty=value) deferrable initially deferred;





SQL>alter session set constraint=deferred;
当发出该语句之后,说明当前session中,对于发出的所有DML语句所涉及的表,只要这些表上约束定义了deferrable选项,这些约束全部延迟检验。


5、使用分区表,索引组织表,簇表
Oracle 10g 提供五种分区的方法
1)范围分区 Range Partition
create table t2(id number,createdate date)
  partition by range(createdate)
  (
  partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace ts01,
  partition p2 values less than (to_date('2002-01-01','yyyy-mm-dd')) tablespace ts02,
  partition p3 values less than (to_date('2003-01-01','yyyy-mm-dd')) tablespace ts03,
  partition pmax values less than (maxvalue) tablespace ts04
  );
2)哈希分区 Hash Partition
create table t3(id number,name varchar2(10))
  partition by hash(id)
  partitions 4
  store in (ts01,ts02.ts03.ts04);
create table t3(id number,varchar2(10))
  partition by hash(id)
  (
  partition p1 tablespace ts01,
  partition p2 tablespace ts02,
  partition p3 tablespace ts03,
  partition p4 tablespace ts04
  ):
3)列表分区 List Partition
create table t4(id number,name varchar2(10),category varchar2(10))
  partition by list(category)
  (
  partition p1 values ('01','02') tablespace ts01,
  partition p2 values ('03','04') tablespace ts02,
  partition p3 values ('05','06','07') tablespace ts03,
  partition p4 values (default) tablespace ts04,
  );
4)范围哈希组合分区 Range-Hash Partition
create table t5(id,number,name varchar2(10),createdate date)
 partition by range (createdate)
  subpartition by hash (id)
   subpartitions 4 store in (ts01,ts02)
  (partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')),
  partition p2 values less than (to_date('2002-01-01','yyyy-mm-dd')),
  partition p3 values less than (to_date('2003-01-01','yyyy-mm-dd')),
  partition pmax values less than (maxvalue)
  subpartitions 2 store in (ts03) );
说明:先按createdate进行范围分区,然后再按照id进行hash分区。默认每个分区包含4个hash子分区,这些子分区都分别在ts01和ts02里。
也是就是p1,p2,p3都是如此,但对于pmax来说,修改了默认设置,pmax有两个hash分区,都位于ts03里。
5)范围列表组合分区 Range-List Partition
create table t6(id number,name varchar2(10),category varchar2(10),createdate date)
  partition by range(createdate)
   subpartition by list (category)
  (partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace ts01
     (subpartition p1_1 values ('01','02'),
      subpartition p1_2 values ('03','04'),
      subpartition p1_3 values (default) tablespace ts02),
   partition p2 values less than (maxvalue) tablespace ts03
     (subpartition p1_1 values ('01','02'),
      subpartition p1_2 values ('03','04'),
      subpartition p1_3 values (default) tablespace ts04)
  );


























































索引组织表 index organized table


    
 
 

您可能感兴趣的文章:

  • Oracle exp 导出用户对象
  • oracle查看会话锁定的所有对象代码分享
  • 测试添加Oracle中Blob数据类型对象
  • 基于Oracle的面向对象技术入门基础简析开发者网络Oracle
  • Oracle中关数据库对象的统计分析
  • Oracle使用PL/SQL操作COM对象
  • 浅析Oracle对象和数据的导入导出
  • Oracle PL/SQL编程有关的数据库对象
  • Oracle中重新编译无效的存储过程, 或函数、触发器等对象
  • 大家帮帮忙解决oracle大对象的问题吧。来者有分。
  • ORACLE 常用的SQL语法和数据对象
  • 求助:oracle9在redhat9上安装好后,oracle管理工具会在菜单工具栏上显示吗?
  • Oracle自动存储管理支持库 ASMLib
  • Oracle ASM自动管理存储管理简介
  • windows上要装什么软件才能管理到linux上的oracle?
  • 在HP Unix 下Oracle的控制和管理
  • 用Oracle管理服务器将数据导入与导出
  • Oracle管理工具 phpOraAdmin
  • Linux上管理本机Oracle的时候出现找不到ServiceName的错误
  • 有谁知道Oracle8的数据库管理工具是用什么开发工具编写的?
  • 甲骨文新推Oracle Linux管理软件包
  • oracle区管理和段空间管理详细介绍
  • Oracle 管理Undo数据
  • 关于Oracle数据库管理员认证方法简述
  • Oracle 权限管理入门
  • Oracle使用配置文件创建口令管理策略
  • Oracle中Datafiles的管理
  • Oracle 9i中自动撤销管理的优点分析
  • Oracle帐户管理
  • Oracle数据库安全性管理基本措施实例解析
  • Oracle 数据库管理脚本命名规范
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3