01/09/2007---04/02/2007的笔记

01/09/2007
1.查看一个角色被授予的权限
  SELECT * FROM dba_role_privs;授予用户和其他角色的角色
  SELECT * FROM dba_sys_privs;授予用户和其他角色的系统权限
  SELECT * FROM dba_tab_privs;
 
2.修改数据库用户的密码
  (1)SQL> ALTER USER HR IDENTIFIED BY HRYTMF
   用户已更改。
   (2)更改当前登陆用户密码
   SQL> PASSWORD
   更改HR的口令
   旧口令: ******
   新口令: ******
   重新键入新口令:******
   口令已更改
  
   (3)alter user identified by '字符穿'
   相当与把用户帐号锁起来
  
3.如何查看当前会话的信息:
  SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER')
   FROM DUAL;
  其中:
  SYS_CONTEXT returns the value of parameter associated with the context namespace.
  You can use this function in both SQL and PL/SQL statements.
  oracle9i provides a built-in namespace called USERENV, which describes the current session.
 

01/10/2007
1.Oracle 9i Concept读书笔记一
 读了开头目录,感觉东西很多,很杂,但是很全面,应该值得仔细研读.
2.健康险vip的保险数据迁移,原先储存在一个表中,数据大量冗余,huangsp把结构做了些调整,以符合egis需求,分成了三个表,
  source table: health_vip_undwrt_std_cond
  target table: h001_schema_class_table, h001_liability_type_table, h001_underwriting_standard
--此处为简化脚本,脚本名:01_gbsman_tab_xiayang001_20061212.sql
--生成H001险种核保权限判断表
create table health_vip_undwrt_std_cond
(
             plan_sort      varchar2(10)   not null,
             sup_liab       varchar2(4)                                             ,
             sub_liab       varchar2(4)                                             ,
             day_limit      number(12,2)                                            ,
             time_limit     number(12,2)                                            ,
             top_days       number(6)                                               ,
             top_times      number(6)                                               ,
             top_sum        number(12,2)                                            ,
             top_rate       number(5,4)   not null,
             total_sum      number(12,2)  not null,
             is_req         varchar2(1)                                             ,
             FCD            date            not null,
             FCU            varchar2(10)    not null,
             LCD            date            not null,
             LCU            varchar2(10)    not null
);
-------------------------------------------------------------------------------
--脚本名: 10_egisdata_tab_huangsp.SQL
--target table: h001_schema_class_table, h001_liability_type_table, h001_underwriting_standard
CREATE TABLE h001_schema_class_table(
    schema_class_code           VARCHAR2(2)      NOT NULL,
    schema_name                 VARCHAR2(60)     NOT NULL,
    coverage_area               VARCHAR2(500)    NOT NULL,
    max_face_amount             NUMBER(14,2)     NOT NULL,   
    created_user                VARCHAR2(50)     NOT NULL,
    create_date                 DATE             NOT NULL,
    last_modified_user          VARCHAR2(50)     NOT NULL,
    last_modified_date          DATE             NOT NULL   
);

ALTER TABLE h001_schema_class_table ADD(
    CONSTRAINT pk_h001_schema_class_table  PRIMARY KEY(schema_class_code   ) USING INDEX TABLESPACE egisidx
);

CREATE TABLE h001_liability_type_table(
    h001_liability_type_id      NUMBER(20)        NOT NULL,
    schema_class_code           VARCHAR2(2)       NOT NULL,
    liability_type_code         VARCHAR2(2)       NOT NULL,
    liability_name              VARCHAR2(60)      NOT NULL,
    max_face_amount             NUMBER(14,2),                   
    created_user                VARCHAR2(50)      NOT NULL,
    create_date                 DATE              NOT NULL,
    last_modified_user          VARCHAR2(50)      NOT NULL,
    last_modified_date          DATE              NOT NULL       
);

ALTER TABLE h001_liability_type_table ADD(
    CONSTRAINT pk_h001_liability_type_table  PRIMARY KEY(h001_liability_type_id ) USING INDEX TABLESPACE egisidx,
    CONSTRAINT fk_h001_liability_type_table  FOREIGN KEY(schema_class_code ) REFERENCES h001_schema_class_table(schema_class_code)
);

--H001险种核保权限标准表
create table h001_underwriting_standard(
    h001_undwrt_standard_id          NUMBER(20)       NOT NULL ,
    h001_liability_type_id           NUMBER(20)       NOT NULL ,
    liability_item_code              VARCHAR2(4)      NOT NULL ,
    max_daily_reimburse_amount       NUMBER(14,2)                                                      ,
    max_each_reimburse_amount        NUMBER(14,2)                                                      ,
    max_reimburse_days               NUMBER(6)                                                         ,
    max_reimburse_times              NUMBER(6)                                                         ,
    max_face_amount                  NUMBER(14,2)                                                      ,
    is_need                          VARCHAR2(1)                                                       ,
    reimburse_rate                   NUMBER(3,2)      NOT NULL ,
    created_user                     VARCHAR2(50)     NOT NULL , 
    create_date                      DATE             NOT NULL , 
    last_modified_user               VARCHAR2(50)     NOT NULL , 
    last_modified_date               DATE             NOT NULL  
);

ALTER TABLE h001_underwriting_standard ADD(
    CONSTRAINT pk_h001_underwriting_standard   PRIMARY KEY(h001_undwrt_standard_id ) USING INDEX TABLESPACE egisidx,
    CONSTRAINT fk_h001_undwt_std_h_l_type_id   FOREIGN KEY(h001_liability_type_id ) REFERENCES h001_liability_type_table(h001_liability_type_id),
    CONSTRAINT fk_h001_undwt_std_li_item_code  FOREIGN KEY(liability_item_code ) REFERENCES liability_item           (liability_item_code),
    CONSTRAINT ck_h001_undwt_std_is_need       CHECK      (is_need IN ('Y','N'))  
);
--egisdata
create sequence seq_h001_liability_type                           start with 1;
create sequence seq_h001_undwrt_standard                          start with 1;  

--------------------------------------------------------------------------
--以下脚本是我自己写的,用来插入数据,脚本名:01_gbsman_dml_wangjian_LoadDataFromGbsToEgis_20070110.sql

-- Load data from gbs table health_vip_undwrt_std_cond to egis tables
INSERT INTO h001_schema_class_table
    (schema_class_code ,                                 
     schema_name    ,                                       
     coverage_area   ,                                     
     max_face_amount  ,                                   
     created_user    ,                                      
     create_date    ,                                       
     last_modified_user ,                                
     last_modified_date                                 
     )                                                   
    SELECT '01','计划一','全球(境外旅行时间:不限制;境外医疗给付比例 100%)','8000000','G000000000',sysdate,'G000000000',sysdate FROM DUAL UNION
    SELECT '02','计划二','全球(境外旅行时间:每次不超过30日,每年最长90日;且不承担以治疗疾病为目的的旅行期间发生得医疗费用;境外医疗给付比例 50%)','3000000','G000000000',sysdate,'G000000000',sysdate FROM DUAL UNION
    SELECT '03','计划三','全球(境外旅行时间:每次不超过30日,每年最长90日;且不承担以治疗疾病为目的的旅行期间发生的医疗费用;境外医疗给付比例 50%)','2000000','G000000000',sysdate,'G000000000',sysdate FROM DUAL;

COMMIT;

--------------------------------------------------------------------- 
     
INSERT INTO h001_liability_type_table
    (h001_liability_type_id  ,
     schema_class_code    ,
     liability_type_code ,                                 
     liability_name    ,                                      
     max_face_amount   ,                                     
     created_user     ,                                        
     create_date     ,                                         
     last_modified_user  ,                                  
     last_modified_date                                   
     )
    VALUES( seq_h001_liability_type.nextval,'01','01','住院及手术医疗保险金','','G000000000',sysdate,'G000000000',sysdate);
   
INSERT INTO h001_liability_type_table
    VALUES (seq_h001_liability_type.nextval,'02','01','住院及手术医疗保险金','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table
    VALUES (seq_h001_liability_type.nextval,'03','01','住院及手术医疗保险金','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','02','门诊医疗保险金','50000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','02','门诊医疗保险金','40000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','02','门诊医疗保险金','30000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','03','特殊门诊医疗保险金','300000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','03','特殊门诊医疗保险金','200000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','03','特殊门诊医疗保险金','200000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','04','补充器官移植手术医疗保险金','300000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','04','补充器官移植手术医疗保险金','200000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','04','补充器官移植手术医疗保险金','100000','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','05','女性生育保险金','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','05','女性生育保险金','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','05','女性生育保险金','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','06','第二医疗意见','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','06','第二医疗意见','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','06','第二医疗意见','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','07','全球急难救助服务','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','07','全球急难救助服务','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','07','全球急难救助服务','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'01','08','预防保健服务','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'02','08','预防保健服务','','G000000000',sysdate,'G000000000',sysdate);
INSERT INTO h001_liability_type_table   
    VALUES (seq_h001_liability_type.nextval,'03','08','预防保健服务','','G000000000',sysdate,'G000000000',sysdate);

COMMIT;
                   
---------------------------------------------------------------------

INSERT INTO h001_underwriting_standard
    (h001_undwrt_standard_id    ,
     h001_liability_type_id     ,
     liability_item_code        ,
     max_daily_reimburse_amount ,
     max_each_reimburse_amount  ,
     max_reimburse_days         ,
     max_reimburse_times        ,
     max_face_amount            ,
     is_need                    ,
     reimburse_rate             ,
     created_user               ,
     create_date                ,
     last_modified_user         ,
     last_modified_date        
     )
     SELECT seq_h001_undwrt_standard.nextval,
            (
            SELECT a.h001_liability_type_id
                FROM h001_liability_type_table a
                WHERE a.schema_class_code = Decode(b.plan_sort,'plan_1','01'
                                                          ,'plan_2','02'
                                                          ,'plan_3','03')
                AND a.liability_type_code = b.sup_liab
            ),
            sub_liab,
            day_limit,
            time_limit,
            top_days,
            top_times,
            top_sum,
            is_req,
            top_rate,
            FCU,
            FCD,
            LCU,
            LCD
         FROM health_vip_undwrt_std_cond b
         WHERE b.sub_liab IS NOT NULL;
        
COMMIT;

---------------------------------------------------------------------


3.做完后顺便整理了下三个表的表结构

 

01/12/2007

1.昨天重装了系统,今天把软件装上,装了oracle9i。
2.刚才在读文档的时候解决了困惑了我好久的一个问题,如何对表中的一列进行分组统计?
  可以用 GROUP By 来实现对一组数进行分组统计
  例如:
SQL> SELECT deptno, count(*), sum(sal)  FROM emp
  2      GROUP BY deptno;

DEPTNO   COUNT(*)   SUM(SAL)
------ ---------- ----------
    10          3       8750
    20          5      10875
    30          6       9400
   

01/15/2007
1.阅读DBA数据库管理员手册的一个新发现:
  oracle抽象数据类型是用户自己定义的一种数据类型,可以用用户定义的数据类型来规范应用程序
中对数据的使用。例如,你可以在任何地方像使用其他数据类型一样来使用NAME_TY数据
类型。
   CREATE TYPE NAME_TY AS OBJECT
   (first_name      VARCHAR2(25),
    middle_initial CHAR(1),
    last_name    VARCHAR2(30),
    suffix     VARCHAR2(5)
   );

2.当你给一个user授予一个role时,用户的权限并不随role的权限变化而变化,这是因为该role并没有被设置成为用户的default role,
  需要授予default权限。
 
 
01/18/2007
1.关于oracle外连接的学习
需要用到外连接的情况:a. 连接的表中仅有不匹配的数据 b.连接的表中既有相匹配的数据也有不匹配的数据.
例如:


SQL> SELECT * FROM a;

         A          B
---------- ----------
        10         20
        11         30
        12         40
                   50

SQL> SELECT * FROM b;

         C          D
---------- ----------
        10         25
        11         35
        15         55
                   65

SQL> SELECT * FROM a, b WHERE a.a(+) = b.c;

         A          B          C          D
---------- ---------- ---------- ----------
        10         20         10         25
        11         30         11         35
                              15         55
                                         65

SQL> SELECT * FROM a, b WHERE a.a = b.c(+);

         A          B          C          D
---------- ---------- ---------- ----------
        10         20         10         25
        11         30         11         35
        12         40           
                   50           

SQL> SELECT * FROM a left outer join b ON (a.a = b.c);

         A          B          C          D
---------- ---------- ---------- ----------
        10         20         10         25
        11         30         11         35
                   50           
        12         40           

SQL> SELECT * FROM a right outer join b ON (a.a = b.c);

         A          B          C          D
---------- ---------- ---------- ----------
        10         20         10         25
        11         30         11         35
                                         65
                              15         55

SQL> SELECT * FROM a full outer join b ON (a.a = b.c);

         A          B          C          D
---------- ---------- ---------- ----------
        10         20         10         25
        11         30         11         35
                   50           
        12         40           
                                         65
                              15         55

6 rows selected


01/22/2007
1. 只要是属于gbsman的object,都需要创建同义词
2.

01/23/2007
1.突然的,想到国外大学念书去了.


02/06/2007
优化的学习
1.索引:一般来说,单个多列的索引的访问将毕多个单列索引的AND-EQUAL完成的更好.
2.oracle系统中,sys密码丢了可以用system用户重置
3.删除数据时, 如果有外键约束(需要删除的数据的主键被其他表外键引用), 可以先设置忽略外键约束
  alter table xxx disable constraint 外键名称
 
 
02/08/2007
1.ORACLE有三种处理连接的方式:
  MERGE JOIN, NESTED LOOPS, HASH JOIN
  1.1关于 ORACLE怎样处理多于两个表的连接:注意连接顺序, 首先连接较小的两个表,然后在查询出结果的基础上连接较大的脚本,这样可以减少工作量.
  1.2MERGE JOIN
  MERGE JOIN 必须等待两个单独的SORT JOIN完成(如果使用索引作为数据源,可以跳过SORT JOIN这个步骤), 如果两个表的规模相差很大, 会很影响查询的性能。当查询的两个表都很大或者都很小的时候, 则应该只用MERGE JOIN,如果两个表都很小,则表扫描和分类将进行的很快;如果两个表都很大,则可以充分利用ORACLE的并行选项。
  1.3NESTED LOOPS
  NESTED LOOPS操作通过循环的方法连接两个表, 即从第一个表(称为驱动表)中检索记录,并对每个检索出的记录,执行对第二个表的访问。 第二个表的访问是通过一个基于索引的访问执行的。NESTED LOOPS连接至少涉及到两个数据访问操作,即驱动表的访问和被驱动表(通常是基于索引的)的访问。
  可以选择使用较小的表作为驱动表,并通过基于索引的访问从较大的表中选择记录。索引的选择性越高(即相同的索引项越少),查询完成的越快。
  1.4HASH JOIN
  优化程序动态的选择利用HASH JOIN 来代替MERGE JOIN 或 NESTED LOOPS来完成连接。HASH JOIN在内存中比较两个表。扫描第一个表,并且通过数据库对其应用‘散列’函数。然后,读取第二个表的值,散列函数将第二个表与第一个表进行比较。将匹配的行返回给用户。
 
 
02/09/2007
1.学习分析函数,可以极大的提高sql的性能   

02/12/2007
1.学习索引的一点心得:当一个表的某个字段只有很少量的不同的值(即重复值很多),那么通常不要在此字段上建立传统的B树索引,即使它经常在where字句中使用也是如此。
2.对于经常要增加新数据(不同于原有数据的值)的列不要使用位图索引,因为每增加一个新值就要建立一个对应的新位图。

02/13/2007
1.关于数据字典,查看table, view, sequence的权限可以用user(dba,all)_tab_privs.
2.gbs_user_tbl表中字段exec_role指的是用户所拥有的role(个人猜测),可以根据这个字段的值来确定该用户拥有的权限,而菜单只是给出一个路径,最终能不能修改表,还是决定于它所拥有的role.

 

02/25/2007
节后第一天上班,收了公司的开工大红包,680块,还收了几个结了婚的同事派发的红包,呵呵。
1. 使用绑定变量的好处:查询经过一次编译后,将查询方案存储在共享池中(库高速缓存),可以用来检索和重用。在性能和可伸缩性方面,这两者的差异事巨大的,甚至是惊人的。能够使用绑定变量的时候尽量使用绑定变量!!!
2. 学习使用分析函数,

02/27/2007
1. 删除包头的同时系统会自动的删除包体,但是使用drop package body仅仅删除包体,不删除包头, 即包头可以不依赖包体单独存在。
2.列车时刻表订票电话 亚磨票务中心 021 只接会员(65430063) 35121830
火车票 周先生 21 56711694 91838783 65664568
石化订票 火车票:62667164,62667261
现在常用的好象是火车订票 35121830 63179090上海站
订票热线 :63819207; 63816902


03/07/2007
1.小凳子妹妹邮箱是:denghuiyang123@yahoo.com.cn

03/13/2007
1.看performance tuning guide.pdf,主要就是看第九章

03/15/2007
1.运算符的计算次序:1 所有的比较运算符, 2 AND , 3 OR 。
2.在升序排列中,NULL值排在最后。
3.!=ALL作用跟NOT IN 一样 。
4.sqlplus中save命令将在缓存中的sql语句保存到文件。
5.RENAME语句的语法 : RENAME old name TO new name; 注意要是表名中包含空格,符号或数字,必须使用双引号。

03/19/2007
1.假如高吞吐量给你带来了高的性能,那么就使用它,假如你需要的是快的反应时间,就不使用它。
2.更新和重构索引的代价非常大,所有高级DML(插入,更新和删除)活动出发这种索引重构的排序。
3.查询(select)是DSS活动的目标,因为使用DSS时,数据库经常是大的,历史的和只读的。
4.不要在DSS应用代码中使用绑定变量。这直接与OLTP的建议形成对照。因为在OLTP下,你希望最小化应用进程开销(语法分析)。然而,随着相对长时间的运行DSS查询,语法分析占用增个查询时间的比例会更小。
5.在OLTP下,希望有许多相对较小的回滚断。随着DSS和长时间运行的查询,类似于长时间运行的批量生产系统,应有一到两个大的回滚段。这仅仅实现一致性读取和大量回滚数据的并发视图。加入DSS是100%只读,这不会是一个问题,但是实际中,几乎不可能存在100%只读的系统。
6.数据库管理员应当关注第一条调整规则:“应用应当首先被调整”。有如下两条理由:1)目前存在的大多数数据库系统把它们的大部分性能归于它们的应用。2)即使这条规则不使用于你的系统,作为一个数据库管理员,你也必须对系统的应用类型进行分类。
7.要将一个不受限制的WHERE语句变为受限制的,你可以1)使用已知的实际最大量,2)或者根据你的业务规则至少使用该列的理论最大值。但是,不要试图去使用sql的集合函数(MAX, MIN等),这样反而会让查询变慢。
8.实例层优化形式,inia.ora的参数OPTIMIZER_MODE设置为下列值中的一个:
1)CHOOSE-当设置为该值时,如果统计数字可用的话(已经有数据库管理员运行),优化程序选择基于成本的模式。否则,用基于规则的优化。
2)RULE-优化程序使用基于规则的方法。
3)FIRST_ROWS-优化程序选择基于成本的方法(假如统计数字可用的话)来把反应时间减到最少。也就是说,使第一行尽快出现在屏幕上。如果你有一个高度交互式的,基于屏幕的应用,例如许多OLTP和较小的DSS系统,那么使用这种模式。
4)ALL_ROWS-优化程序选择基于成本的模式(假如统计数字可用的话)来最小化吞吐量,也就是说,最小华每个时间单位内通过系统的总行数(每秒钟的事务)。假如你有一个批处理或者大型DSS系统的话,那么使用这种模式。
要在会话层指定优化形式,发出如下的DLL语句:
SQL>ALTER SESSION SET OPTIMIZER_GOAL = <value>;

03/20/2007
1.优化程序可以从一条可用的索引中读取和返回数据,被称为索引覆盖(index coverage),尽管偶尔也会使性能变差,但通常会导致较好的性能。假设在一张employee表的last_name, first_name, middle_name中有一个复合索引,你可以运行如下的查询以找到所有last_name是SMITH的雇员:
SELECT last_name FROM employee WHERE last_name = 'SMITH';


03/21/2007
1.USERENV函数的用法,USERENV('参数'),根据参数不同,返回不同的信息,参数可以是CLIENT_INFO,ENTRYID,ISDBA,LANG,LANGUAGE,SESSIONID,TERMINAL。
例如
SQL> SELECT USERENV('LANGUAGE') "Language" FROM DUAL;

Language
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL> SELECT USERENV('ISDBA') FROM DUAL;

USERENV('ISDBA')
----------------
FALSE

SQL> SELECT USERENV('SESSIONID') FROM DUAL;

USERENV('SESSIONID')
--------------------
             1523706

03/22/2007
03/23/2007
1.从盖国强的深入浅出Oracle,记录出一些有趣的数据字典:
在数据库启动时,Oracle动态创建X$表,在此基础之上,Oracle创建了GV$和V$视图。GV$的含义为Global V$.除了一些特例之外,每个V$对应一个GV$视图的存在。而V$视图是基于GV$视图的,增加了INST_ID列和WHERE条件限制建立,只包含当前连接实例信息。每个V$视图都包含类似语句:
     WHERE inst_id = USERENV('Instance')

2.返回实例信息的数据字典v$instance:
SQL> SELECT instance_number,instance_name,status FROM v$instance;

INSTANCE_NUMBER INSTANCE_NAME    STATUS
--------------- ---------------- -------
              1 gd16hz           OPEN
3.记录其他视图(x$,v$,gv$)的创建方式的视图 v$fixed_view_definition
SQL> select * from v$fixed_view_definition where view_name = 'V$SESSION';
VIEW_NAME       VIEW_DEFINITION
------------ --------------------------------------------------------------------
V$SESSION       select  SADDR , SID , SERIAL# , AUDSID , PADUSER# , USERNAME , COMMAND , OW

03/26/2007
1.决定全表扫描的阈值(只是一个建议的值,具体速度可以在SQLplus使用set timing on命令来测试)。
  对于原始排序的表,仅读取少于表记录数应该使用全表扫描。
  对于未排序的表,仅读取少于表记录数7%的查询应该使用索引范围扫描。反之,对于读取记录树木大于7%的查询就应该使用全表扫描。

03/27/2007
1.几个有用的动态视图
SELECT * FROM v$session_wait;3
SELECT * FROM v$system_event;
SELECT * FROM v$event_name;

03/29/2007
1.有效的降低SQL的逻辑是SQL优化的基本原则之一。

03/30/2007
1.一个很强大的功能包:DBMS_SYSTEM,功能强过SQL_TRACE,可以跟踪sql的执行情况。
2.在oracle开发中,应该尽量避免使用隐式的数据类型转换,因为隐式数据类型转换可能会带来索引失效的问题,给系统埋下隐患。

04/02/2007
1.建立索引的基本原则:经常检索排序大表中40%或非排序表7%的行,建议建索引;多表关联查询的时候,在连接的列上面建立索引; Date型列一般适合基于函数的索引;列中有许多空值,不适合建立索引;经常一起使用多个字段检索记录,组合索引比单索引更有效;把最常用的列放在最前面;合并/拆分不必要的索引。
2.表维护时,系统要同时维护索引,不合理的索引将严重影响系统资源,主要表现在CPU和I/O上,同时,插入、更新、删除数据会产生大量db file sequential read锁等待;限制每个表索引的数量。对于频繁插入和更新表,索引越多系统CPU、I/O负担就越重;删除不再需要的索引。
3.使用分区主要有3个原因
 1)为了提高可用性。
 2)为了减轻管理负担。
 3)为了提高DML和查询操作的性能。
4.随机抽取前N条记录的问题
[A]8i以上版本
select * from (select * from tablename order by sys_guid()) where rownum < N;
select * from (select * from tablename order by dbms_random.value) where rownum< N; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值