友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

oracle从入门到精通(PDF格式)-第8部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!



  *、包含了大量不同值的列;  

  *、包含了大量空值的列;  

  *、一个或者多个列经常被一起出现在 WHERE 条件中或者作为连接的条件出现;  

  *、表的数据量很大,而且对表的查询经常是得到表中数据的 2%到 4%(少量数据)。  

  不应该创建索引的情况:  

  *、一个很小的表;  

  *、列很少被用于查询的条件;  

  *、表上的大多数查询是得到大量数据的;  

  *、表中的数据经常发生变动;  

  *、要被索引的列被作为条件表达式的一部分。  

  查看:  

  user_indexes 得到索引的定义和唯一性。  

  user_ind_columns 得到索引的名称,表名和列名。  

  select ic。index_name;ic。column_name;ic。column_position;  ic。uniquenes  

  from user_indexes ix;user_ind_columns ic  

  where ic。index_name=ix。index_name and ic。table_name='table_name';  



                               第 40 页,共 106 页 


…………………………………………………………Page 41……………………………………………………………

资源来自网络,仅供学习!                                                     Oracle 从入门到精通 



    

  删除索引:  

  DROP INDEX index_name;  

  为了删除索引,必须拥有索引或者拥有 DROP ANY INDEX 权限。     



2。8 控制用户的访问  



1。数据库的安全性  



  系统安全性:  

    系统权限(system privilege),获得访问数据库的能力。  

       超过一百个  

       创建新用户:  

           CREATE USER user_name IDENTIFIED BY password;  

       删除用户  

       删除表  

    授予权限:  

       GRANT priv_list TO user/public/role(角色);  

       grant create session ;create table;create sequence to user_name;       

       在授予建表权限的同时也应该赋予存储空间。  

    分配配额:ALTER  USER user_name QUOTA nM ON space_name;  

    

  数据安全性:  

  对象权限(object privilege),获得维护数据库的能力。  

  每种对象的权限都不相同。  

  对象的所有者拥有对象的所有权限。  

  对象的所有者可以将自己的对象权限赋予其他人。                             

    GRANT object_priv_list '(col_list)'  

    ON owner。object TO user/role/public  

    'WITH GRANT OPTION';……将权限授予用户的同时,该用户也拥有了授予其他用户对象权限的 

  功能。(及联授予)会导致及联移除。  

    

  移除权限:  

    REVOKE priv_list/all  ON object FROM user;  

    

  方案:数据库对象的集合,包括表、视图、序列。。。。。。  

    



2。角色:  



    CREATE ROLE role_name;  

    GRANT priv_list TO role_name;  

    GRANT role_name TO user_list/role_list;  

  修改口令:  

  方法  (1)ALTER USER user_name IDENTIFIED BY password;  

        (2)password + 回车        



                                 第 41 页,共 106 页 


…………………………………………………………Page 42……………………………………………………………

资源来自网络,仅供学习!                                                            Oracle 从入门到精通 



  USER_SYS_PRIVS 当前用户的系统权限。  

  USER_ROLE_PRIVS 当前用户的角色权限。  

  USER_tab_privs_made 用户对象被授予的他人的信息。  

    



3。使用集合操作  



  UNION   

  select employee_id;job_id from employees  

  union  

  select employee_id;job_id from job_history;  

    

  两个表的并集,但不显示重复行。执行的时候要先排序再剔重,所以结果集是有序的。  

  union all  

  也是两个表的并集,而且显示重复行。  

  语法同上。  

  intersect  

  select employee_id;job_id from employees  

  intersect  

  select employee_id;job_id from job_history;  

    

  minus  

  select employee_id;job_id from employees  

  minus  

  select employee_id;job_id from job_history;  

    

  e…j=e…e 与j的交集;  

  j…e=j…j 与e的交集;  

    

  注:在 select 列表中的表达式必须有同样的数目和类型。  

    

    匹配 SELECT 语句  

    select employee_id;job_id;salary from employees  

    union   

    select employee_id;job_id;0      from job_history;     

    

  括号可以用拉修改序列的执行顺序。  

    



4。ORDER BY 子句:  



  只能在整个集合的最后出现;  

  可以按照第一个 SELECT 语句中的列名,别名或者位置号排序。    

      



                                    第 42 页,共 106 页 


…………………………………………………………Page 43……………………………………………………………

资源来自网络,仅供学习!                                                            Oracle 从入门到精通 



5。GROUP BY 子句的增强  



  CUBE 操作符的 GROUP BY   

  在 GROUP BY 子句中使用 ROLLUP 或者 CUBE 来产生分组小计;  

  ROLLUP 分组产生包括规则的分组结果和小计的结果的组合;  

  GROUP BY 'ROLLUP'(col_name_list)  

  ROLLUP:  

  a       ab    abc  

    

        abc  

    ab  ab  

  a a   a  

  all   all all  

    

  CUBE 分组产生包括 ROLLUP 产生的结果和交叉分组小计。  

  cube:  

  a ab  abc  

    

  a ab  abc  

  all   a   ab  

    b   ac  

    all bc  

        a  

        b  

        c  

        all  

    



6。GROUPING 函数  



  参数一定是在 CUBE 或 ROLLUP 里进行分组排序的字段或表达式之一。  

  通过 1 或0来判断结果集中的空值是由于本身列的值是空的,还是由于使用 CUBE或 ROLLUP 产 

  生的空值。  

  1 代表是由于分组产生的空值,没有参与分组。  

  0 代表是由于列本身产生的空值,参与了分组,但分组中没有包含它。  

  GROUPING SETS  

  可以使用 GROUPING SETS 在同一个语句中定义多个组集。  

  只需要访问一次基表。  

  不需要写很复杂的 UNION 语句。  

  GROUPING SETS 子句中组合的元素越多,语句的执行性能就越好。  

  group by GROUPING SETS((abc);(ab);(bc);(a);(b))   

  组合列:  

  是一个列的组合,在分组计算时被作为一个单元处理。  

    



                                    第 43 页,共 106 页 


…………………………………………………………Page 44……………………………………………………………

资源来自网络,仅供学习!                                                  Oracle 从入门到精通 



2。9 高级子查询  



1。   成对子查询:  



  行内视图的性能比成对子查询的性能高。  

相关子查询:  

  主查询的字段在子查询里做条件(特征)。  

  主查询先执行,取出第一条数据,把该数据传入子查询做比较,返回查询结果给主查询,主查 

  询根据这个结果再做查询  

  依次类推  

  直到主查询中没有可查询列为止。  

    

  EXISTS 操作符  

  EXISTS 操作符测试子查询的结果是否存在;  

  返回 TRUE 或 FALSE  

  查询机制:  

  如果一个子查询找到了结果:  

  在内部子查询中不在继续执行,条件被设为 TRUE  

  如果一个子查询没有找到结果:条件被设为 FALSE  

    

  select col_list from table_name tab_alias  

  where exists (select 'x' from table_name where col=tab_alias。col);  

  用的是相关子查询  

  NO EXISTS 操作符  

  和 NOT IN 相对应,速度要快,性能好。  

  UPDATE 中的相关子查询  

  update emp e  

  set department_name in(select d。department_name from departments d where  

  e。department_id=d。department_id);  

    

  delete 中的相关子查询  

    



2。层次查询  



  select 'level';column;expr from table 'where condition'  

  'start with'起点(自底向上/自顶向下)  

  'connect by prior + 主键/外键=外键/主键'//看你往哪个方向查  

  自顶向下 左边放主键,右边放外键  

  select employee_id;last_name;salary;job_id;manager_id  

  from employees  

  start with manager_id is null  

  connect by prior employee_id=manager_id;  

  自底向上 右边放主键,左边放外键  

  level(伪列)  

  层次的级别:不固定值。  



                               第 44 页,共 106 页 


…………………………………………………………Page 45……………………………………………………………

资源来自网络,仅供学习!                                                      Oracle 从入门到精通 



  使用 level 和 LPAD 层次化格式的显示  

  修剪分支  

    

  Oracle 9i 对 DML 和DDL 语句的扩展  

  多表插入的 INSERT 语句   

  insert 。。。。 select 语句可以被用来在单个 DML 语句中向多个表插入数据。  

  多表插入语句:  

  无条件 INSERT  

  条件 ALL INSERT  

  条件 FIRST INSERT  

  轮巡 INSERT   

    



二、Management:  



1。Oracle的构件和组件  



  instance 实例/例程  

  database 数据库  

  SGA  系统全局区  

  shared pool  共享池  

  library cache  库高速缓存区  

  data dictionary cache 字典高速缓存区  

  database buffer cache  数据库高速缓存区  

  redo log buffer 重做日志缓冲区  

  java pool     java 池  

  large pool   大池  

  PMON   进程监视进程  

  SMON   系统监视进程  

  DBWR  数据库写进程  

  LGWR  日志写进程  

  CKPT    检查点进程  

  data file  数据文件  

  control file  控制文件  

  redo log file  重做日志文件  

  parameter file  初始化参数文件  

  password file   口令文件  

  archived log file  归档日志文件  

  user process  用户进程  

  server process  服务进程  

  PGA   程序全局区  

  tablespace 表空间  



                                 第 45 页,共 106 页 


…………………………………………………………Page 46……………………………………………………………

资源来自网络,仅供学习!                                       Oracle 从入门到精通 



2。数据库的物理结构:  



1。控制文件  



2。   数据文件  



3。   重做日志文件  



4。   data file  数据文件:  



5。   作用:存放数据。  



6。   数据文件大小可以扩展。  



7。 tablespace 表空间:一个或多个数据文件的逻辑组成。  



 一个数据库最少有一个 system 表空间,一个表空间最少有一个数据文件。  



8。   redo log file  重做日志文件  



 重做日志:在数据库中发生的所有改变,改变的每一条信息都叫做一条重做日志信息。  

 存放重做日志信息的文件就叫做重做日志文件。  

 作用:利用日志记录可以恢复损坏的数据库,保证数据的可恢复性。  

 重做日志组:包含一个或多个日志文件。  

 特点:  

 一个数据库最少有两个组,一个组最少有一个组成员。  

 重做日志的大小是固定的。  

 写入方式是顺序写入,按时间。  

 切换(一个写满往下一个写),循环(都写满了就重新回到头组写)。  



 9。   control file  控制文件  



 数据库中的核心文件。  

 存放内容:  

 数据库的名称和编号,数据库的结构信息(数据文件和重做日志文件的地址)  

  当前的 SCN system change number 系统改变号:  

   给系统的每一次改变编号(最后一次同步的 SCN 号)。  

   控制文件的 SCN 号和所有存放数据文件的头部的 SCN 相同。  

   启动的时候,一样启动,不一样恢复。  

 特点:一个数据库最少需要一个控制文件,但一般情况下都会有复用/副本。                  



 10。 parameter file  初始化参数文件  



 非必要文件  

 跟实例有关。  



                         第 46 页,共 106 页 


…………………………………………………………Page 47……………………………………………………………

资源来自网络,仅供学习!                                             Oracle 从入门到精通 



 11。 password file   口令文件  



  非必要文件。  

  作用:做特权身份认证。  

  sysdba/sysoper/普通身份  



 12。 archived log file  归档日志文件  



  非必要文件。  

  内容:  

  重做日志文件(redo log file)内容的备份。  

  作用:使数据库所有的日志都会保留下来。  

 特点:每个重做日志内容都会对应一个归档文件。  

 LOG SEQUENCE 日志序列号:重做日志内容的序列号。  

  非归档日志:  

   没有归档日志文件;  

   性能要好一些;  

  可以选择归档模式或非归档模式。  

   



3。instance 实例/例程  



  启动的步骤:  

  (1)启动实例;  

  实例包含:  

 1。SGA   

  2。后台进程   

  一个实例只有一个 SGA,可以有多个 PGA,建立一次连接(会话)就产生一次PGA。  

   

  ORACLE 的内存结构:  

      SGA 在实例启动的时候分配,是 ORACLE 实例的基本组件; 大小可以动态改变(内部大 

  小)  

         通过 SGA_MAX_SIZE 定义大小(总大小是静态的)  

      PGA 程序全局区(私有区域):在服务进程启动的时候分配。  

   

 PGA 程序全局区  

  是为每个用户进程连接 ORA 数据库提供的内存区域;  

  当进程创建时分配;  

  当进程结束时释放;  

  一个 PGA 只被一个进程使用;  

  包含:有连接的信息  

   

  SGA  系统全局区  

  所有数据库的后台进程和服务进程的共用内存区域。  

  包含:  

  1。shared pool  共享池  



                            第 47 页,共 106 页 


…………………………………………………………Page 48……………………………………………………………

资源来自网络,仅供学习!                                                 Oracle 从入门到精通 



   设置大小的参数:SHARED_POOL_SIZE  

   包含:  

  library cahce  库高速缓存区  

   大小由共享池决定。  

   包含:SQL 语句和 SQLPLUS 文本,分析代码,执行计划  

   存储目的:与性能有关。  

   当两个语句相同的时候不需要重新分析,使用相同的执行计划即可。  

   管理方法:采用 LRU (最近使用算法)least recent used 当空间不足的时候,使用 LRU。  

   结构:  SQL 区域、PL/SQL 区域  

  data dictionary cache 字典高速缓存区  

          内容:最近最多使用的数据字典信息  

          作用:为了能够在分析的时候所需要的字典信息能在内存中找到,避免使用物理 I/O。  

          管理方法:采用 LRU (最近使用算法)                   

     

  2。database buffer cache  数据库高速缓存区  

  单位:块。  

  内容:最近最常数据块  

  作用:减少物理 I/O,提高性能  

  参数:DB_BLOCK_SIZE 决定主数据块的大小。  

 会影响性能;  

  设置后不允许修改;  

  管理方法:采用 LRU (最近使用算法)  

  由独立的自缓冲区组成:  

 DB_CACHE_SIZE  

 CB_KEEP_CACHE_SIZE  

 DB_RECYCLE_CACHE_SIZE  

  可以通过 ALTER SYSTEM 命令动态增加或收缩:  

 ALTER SYSTEM SET DB_CACHE_SIZE =96M;  

         

 redo log buffer 重做日志缓冲区  

 记录了对数据块所作的所有修改。  

  作用:数据库的恢复  

  大小由 LOG_BUFFER 决定。  

 顺序单条写入,批量写出到文件。  

   

  java pool     java 池  

  可选  

  java_pool_size 大小  

  large pool   大池  

  可选  

 减轻共享池的负担。  

   被用于:   1。在共享服务器中的会话的内存需求(UGA);  

             2。I/O 辅助;  

             3。备份恢复操作或 RMAN;  

             4。并行执行的信息缓冲区;  

  large_pool_size 大小  



                              第 48 页,共 106 页 


…………………………………………………………Page 49……………………………………………………………

资源来自网络,仅供学习!                                            Oracle 从入门到精通 



   



4、进程结构  



1。   用户进程:开始于数据库用户请求连接数据库  



2。   服务进程:与 ORA 实例连接,开始于用户会话的建立。  



  分为:    专用服务进程、共享服务进程  

  性能专用更好。  

  利用资源方面共享更好(网站方面)。  



3。   后台进程:当 ORA 实例启动时启动  



  后台进程包含:  

1。PMON   进程监视进程  

  监视用户进程(客户端连接服务器的进程)到服务进程(在服务器端响应用户进程的进程)的 

  连接。  

  创建会话。  

   监视会话是否异常中断,如果中断:PMON 会回滚事务、解锁、释放资源。  



2。SMON   系统监视进程  



  任务:会检测 SCN 号,相等:启动  

  不相等,实例恢复(1)前滚将日志应用  

                   (2)打开数据库  

                   (3)恢复数据库  

         恢复的起点是走后一次 CHECKPOINT 的位置。  

   每 3 秒合并空闲空间  

  释放临时段  

      临时段:暂时存放在排序时中没有空间的字段值。  

         在排序中产生的。  

         数据量大的时候,排序是分成若干块执行的,当字段值排好序之后就放到临时段中。  

   



1。  DBWR  数据库写进程  



  /DBW0/DBWn   n:0…9  

   将脏数据写回到数据文件中。  

   

  当发生以下情况执行:    

  当发生检查点事件的时候,checkpoint  



                            第 49 页,共 106 页 


…………………………………………………………Page 50……………………………………………………………

资源来自网络,仅供学习!                                             Oracle 从入门到精通 



  脏块达到极限值;  

  没有空间的缓冲空间  

  超时  

  RAC PING 请求  

  表空间离线  

  表空间只读  

  在表执行 DROP 或TRUNCATE  

  表空间上执行 BEGIN BACKUP         



2。   LGWR  重作日志写进程  



返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!