知识大全 管理Oracle约束与分区表

Posted

篇首语:少量的常识,当得大量的学问。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 管理Oracle约束与分区表相关的知识,希望对你有一定的参考价值。

管理Oracle约束与分区表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   .约束

  作用

  约束用于确保数据库数据的完整性 在oracle数据库中 可以使用约束 触发器和应用代码(过程 函数) 种方法实现数据完整性 这 种方法中 因为约束易于维护 并且具有最好的性能 所以实现数据完整性首选约束

  分类

  约束的种类有 not null unique primary key foreign key check

  Not null确保字段值不能为空

  Unique:确保字段值唯一性

  Primary key 最常用的约束(主键约束) 主键约束的列值不仅不能重复 也不能为NULL 注意一张表最多只能有一个主键约束 当定义主键约束后oracle自动建立一个以主键为关键字段的索引

  Foreign key:定义了主从表之间的关系 foreign要定义在从表上 但主表必须具有主键约束或唯一约束 当定义froeign key后外部键列的数据必须在主表的主键列中存在 或者为NULL

  Check::用于强制表行数据必须满足的条件 如工资表 工人工资必须在 之间

  约束状态

  enable validate:是默认 新旧数据同时满足约束规则

  enable novalidate:旧数据可以不满足 检新插入的数据要满足约束

  disable validate:不允许在表上执行任何DML操作 主要用在分区表 对于主键和唯一约事 会删除相应的唯一索引 但约束状态任可用

  disable novalidate数据可不满足约束规则 对于主键和唯一约事 会删除相应的唯一索引

  约束常用语句

create table t(i number v mubmer not null)create table t(i number v mubmer unique)create table t(i number constraint pk_i primary key v number)create table t (c number d number constraint fk_d foreign key(c) references t (v));alter table t add constraint pk_i primary key (i)alter table t modify i not null;alter table t add constraint t_i unique(i)[(create index ind_name on t(i))];alter table t add constraint t_i check(i in ( ));alter table t disable novalidate constraint ialter table t enable novalidate constraint check_ialter table t drop constraint i;alter table t drop primary key i;

  #常用的数据字典

dba_constraintsdba_cons_columnsuser_cons_columnsuser_constraints

  简单应用

  检验当为一个表建立主键索时后 这个字段是否满足约束非空 唯一性 而且自动建立一个索引 并查看当把约束状态关闭再次插入相同的记录 是否还能把把约束设为enable ividate状态

SQL> create table t(i number constraint pk_i primary key v number);SQL> insert into t values( );SQL> insert into t values( );SQL> mit;SQL> select * from t;         I          V                                        

  现在表中有两条记录 然后给它插主键为空或相同的值

SQL> insert into t values( );ERROR at line :ORA : cannot insert NULL into ( Y T I )SQL> insert into t values( );ERROR at line :ORA : unique constraint (Y PK_I) violated 

  可以看到全部报错 此时主键不能为空或重复

  查看是否建立索引

SQL> select index_name from user_indexes;INDEX_NAME PK_I 

  把约束关闭再次做同样的操用

SQL> alter table t disable novalidate constraint pk_i;Table altered SQL> insert into t values( ); row created SQL> insert into t values( ); row created SQL> mit;Commit plete SQL> select * from t;         I          V                                                                            SQL>  select index_name from user_indexes;no rows selected

  可见当把约束关闭后就可以何意给表插数据了 而具索引也自动删除了

  现在激活约束

SQL> alter table t enable validate constraint pk_i;alter table t enable validate constraint pk_iERROR at line :ORA : cannot validate (SYS PK_I) primary key violated  

  因为表中主键有相同的值所以不能恢复到enable validate状态了

  再次测试回复到enable novalidate

SQL> alter table t enable novalidate constraint pk_i;alter table t enable validate constraint pk_iERROR at line :ORA : cannot validate (SYS PK_I) primary key violated  

  也失败了

  因为表中主键有了空值和相同的值 所以恢复不到enable validate状态 但enable novalidate不检查旧数据所以应该还能恢复到enable novalidate

  要想恢复到enable novalidate必须建立主键索引(关闭约束时自动删除的那个索引)如下:

SQL> create index pk_i on t(i);Index created

  然后恢复到enable disvalidate 以后再插数据不能为空 主键也不能重复了

SQL> alter table t enable novalidate constraint pk_i;Table altered SQL> insert into t values( );insert into t values( )ERROR at line :ORA : unique constraint (SYS PK_I) violated 

   修正约束数据

  当给一个表作主键约束时 因为已存数据不满足约束规则 会提示错误信息 些时必须对数据进行修正

  要修正数据先找出不满足约束的数据

  如下表 有不满足约束的数据

SQL> select * from t;         I          V                                                                            

  如果一个表数据量多可通过如下方法查找

SQL> alter table t drop constraint pk_i;Table altered SQL>conn y / SQL> @$ORACLE_HOME/rdbms/admin/utlexcpt sqlTable created SQL> alter table t add constraint pk_i primary key (i) exceptions into exceptions;select * from t where rowid in (select row_id from exceptions)         I          V                                    

  找到了重复的记录

  修正

SQL>update t set i= where v= ;SQL> select * from t;         I          V                                                                          

  再建主键约束

alter table t add constraint pk_i primary key (i)Table altered

  成功了!!!

  二:分区表管理

  作用:将在张大表的数据分布到多个表分区段 不同分区彼此独立 从而提高了表的可用性和性能

  种类:范围分区 散列分区(使用HASH算法 最常使用) 列表分区 范围/散列组合分区 范围/列表组合分区

  范围分区表

  创建范围分区表

create table t(v number b number)partition by range(v) (partition p values less than ( ) tablespace test partition p values less than ( ) tablespace test ); 

  增加与删除分区

  #增加分区

alter table t add partition p values less than ( ) tablespace test ;alter table t drop partition p   

  一个时间分区的例子

alter session set nls_data_lanage=AMERICAN;alter session set nls_data_format= DD MON YYYY create table t(v_date date b number)partition by range(v_date)(partition p values less than ( APR ) tablespace test partition p values less than ( JUN ) tablespace test );

   散列分区表(最常用)

  创建

create table t (v number b number)partition by hash(v)(partition p tablespace test partition p tablespace test ); 

  增加分区

   alter table t add partition p tablespace test ;  

  删除分区

   alter table t drop coalesce partition;  

   列表分区

  建列表分区

create table t(v varchar ( ) b number)partition by list(v)(partition p values( a b ) tablespace test partition p values( c d ) tablespace test ); 

  #插入数据

SQL> insert into t values( a );SQL> insert into t values( d );

  #注意 插入数据时第一个字段只能为a b c d

SQL> insert into t values( f );ERROR at line :ORA : inserted partition key does not map to any partition  

  #查询

select * from t;select * from t partition(p );select * from t partition(p );select * from t where v=XXX  

  增加分区

   alter table t add partition p values( ) tablespace test ;

  删除分区

   alter table t drop partition p

   范围/散列组合分区

  建立散列组合分区

create table t(v number b number)partition by range(v)subpartition by hash(b) subpartitions store in (test test )(partition p values less than ( ) partition p values less than ( )); 

  查询

select * from t;select * from t partition(p );select * from t where   

  增加主分区和子分区

alter table t add partition p values less than ( ) tablespace test ;alter table t modify partition p add subpartition; 

  删除分区

  alter table t coalesce partition;alter table t modify partition p coalesce subpartition;

 

   范围/列表组合分区

  创建

create table t(v number b number)partition by range(v)subpartition by list(b)(partition p values less than ( ) tablespace test (subpartition p _ values( ) subpartition p _ values( )) partition p values less than ( ) tablespace test (subpartition p _ values( ) subpartition p _ values( )));

  查询

select * from tselect * from t partition(p )select * from t subpartition(p _ )select * from t where select segment_name partition_name tablespace_namefrom user_segments where segment_name= T ; 

  增加分区和子分区

alter table t add partition p values less than ( ) tablespace test (subpartition p _ values( ) subpartition p _ values( ));alter table t modify partition r add subpartition r _ tablespace test values( );

  删除分区

   alter table t modify partition p coalesce subpartition;

  其它设置

交换分区数据alter table t exchange partition p with table tt;载断分区alter table t truncate partition p ;修改分区名alter table t rename partition p _ to p ;合并分区alter table t merge partitions p p into partition p 重组分区alter table t move partition p tablespace test 为列表分区和子分区加值alter table t modify partition p add values( );alter table t modify subpartition p _ add values( );从列表分区和子分区中删除值alter table t modify partition p drop values( )alter table t modify subpartition p _ drop values( ) 

  分区表常用的数据字典

分区表信息:  dba_part_tables显示分区:    dba_tab_partitions显示子分区:  dba_tab_subpartitions显示分区列:  dba_part_key_columns显示子分区列:dba_subpart_dey_columns显示分区索引:dba_part_indexes显示索引分区:dba_ind_partitions cha138/Article/program/Oracle/201311/16778

相关参考

知识大全 Oracle数据库分区表

Oracle数据库分区表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle数据库分区是

知识大全 Oracle约束操作

Oracle约束操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle约束操作  约束

知识大全 Oracle定义约束外键约束

Oracle定义约束外键约束  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 oracle分区表全分区扫描问题

  分区表将一个大表根据某种规则分成多个小表从而提高检索效率  查询分区表sql  Sql代码  selectuser_tablestable_name  fromuser_tables  where

知识大全 Oracle数据库分区表操作方法

Oracle数据库分区表操作方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在大型的企业应用

知识大全 oracle表分区详解

  此文从以下几个方面来整理关于分区表的概念及操作:  表空间及分区表的概念  表分区的具体作用  表分区的优缺点  表分区的几种类型及操作方法  对表分区的维护性操作  ()表空间及分区表的概念  

知识大全 oracle建立的分区表数据问题

  建立一个用户使用默认表空间tablespace  建立一个分区表数据存放在不同的表空间tablespacetablespacetablespace  如果把此用户的数据导出来为dmp格式  在另外

知识大全 Oracle数据库中分区表的操作方法

Oracle数据库中分区表的操作方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在大量业务数

知识大全 利用Oracle分区表来减少磁盘I/O冲突

利用Oracle分区表来减少磁盘I/O冲突  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  现在某

知识大全 ORACLE的索引和约束详解

ORACLE的索引和约束详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle的约束*