yangtingkun
===========================================================
方案对象的一般性管理——管理员手册
===========================================================

这一章Oracle介绍了对于所有对象或大部分对象都使用的管理语句。


CREATE SCHEMA语句:

Oracle包含一个CREATE SCHEMA语句,这个语句可以把建表、建立视图和授予权限集合到一个语句之中。这样可以保证,整个创建和授权语句的原子性,单个表或视图建立的失败或授权失败都将导致整个语句回滚。

简单的例子如下:

SQL> create schema authorization yangtk
  2  create table t (id number primary key, name varchar2(30))
  3  create table t1 (id number primary key, tid number, num number,
  4  constraint fk_t1_t_id foreign key (tid) references t (id))
  5  create or replace view v_t as select name, sum(num) sum_num from t, t1
  6  where t.id = t1.tid group by name
  7  grant select on v_t to public;
create or replace view v_t as select name, sum(num) sum_num from t, t1
       *
ERROR 位于第 5 行:
ORA-02422: 方案元素缺失或无效


SQL> create schema authorization yangtk
  2  create table t (id number primary key, name varchar2(30))
  3  create table t1 (id number primary key, tid number, num number,
  4  constraint fk_t1_t_id foreign key (tid) references t (id))
  5  create view v_t as select name, sum(num) sum_num from t, t1
  6  where t.id = t1.tid group by name
  7  grant select on v_t to public;

方案已创建。

注意:在CREATE SCHEMA语句中的CREATE VIEW不能使用CREATE OR REPLACE VIEW语句。

 

 

收集统计信息:

Oracle提供了三种收集统计信息的方法:ANALYZE TABLE语句、DBMS_STATS包和其他方法(如:DBMS_DDL.ANALYZE_OBJECT、DBMS_UTILITY.ANALYZE_SCHEMA和DBMS_UTILITY.ANALYZE_DATABASE)。

Oracle推荐使用DBMS_STATS包来收集统计,而且Oracle的后续版本可能只支持DBMS_STATS包收集的统计信息。

需要注意的是,不要收集整个数据库的统计信息,换句话说,不要收集SYS用户的统计信息,这可能会造成系统内部执行计划的改变,从而导致不可预见的问题。

ANALYZE语句还有验证结构和列出行迁移的功能。

 

完整性约束:

Oracle有两个选项控制完整性约束,每个选项分别有两个状态。组合在一起是4个状态:

ENABLE,VALIDATE:约束有效,且其中数据都是有效的。

ENABLE,NOVALIDATE:约束有效,但不保证已有的数据是否违反约束。

DISABLE,VALIDATE:约束无效,但其中数据是有效的。

DISABLE,NOVALIDATE:约束无效,且已有数据的有效性也不保证。

一般正常情况下约束都是ENABLE,VALIDATE的。它保证表中已经存在的数据符合约束的限制条件,且以后插入到表中的数据也必须满足约束的限制条件。

ENABLE,NOVALIDATE状态也很常用,主要用于保证以后的插入的数据必须满足约束添加,而对表中的现有数据不进行检查。

DISABLE,VALIDATE状态不是很常用,一般用在数据仓库中,验证唯一性数据是否满足条件,同时避免建立没有用的索引。

DISABLE,NOVALIDATE状态一般用于批量导入数据,等导入数据后在ENABLE约束,以提高导入数据的速度。

对于建立为DEFERRABLE的约束,当发出SET CONSTRAINTS ALL DEFERRED语句后,约束的检查延迟到COMMIT的时候。可以在COMMIT之前人为的发出SET CONSTRAINTS ALL IMMEDIATE语句,来检查约束。

延迟约束需要注意两点:一、在触发器中不能使用SET CONSTRAINTS语句;二、延迟主键和唯一约束必须使用非唯一索引。

Oracle提供了监测违反约束条件的数据的方法。首先执行ORACLE_HOME/rdbms/admin/目录下的UTLEXCPT.SQL或UTLEXPT1.SQL建立EXCEPTIONS表。然后执行ALTER TABLE table_name ENABLE CONSTRAINT constraint_name EXCEPTIONS INTO EXCEPTIONS语句,将违反约束的记录的ROWID放入EXCEPTIONS表。

 

ORACLE提供了DBMS_METADATA包,其中GET_DDL函数可以返回指定对象的创建语句。

yangtingkun 发表于:2005.02.04 22:06 ::分类: ( 读书笔记 ) ::阅读:(1254次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...