0
点赞
收藏
分享

微信扫一扫

3.Oracle学习笔记

进击的铁雾 2022-03-11 阅读 49
oracle学习

第一章 Oracle 11g概述

1.1 Oracle翻译为“甲骨文”,由Oracle公司推出。
1.2 关系型数据库
1.2.1 数据库管理技术发展经历了 人工管理、文件系统、数据库系统3个阶段。数据库系统主要由层次模型、网状模型、关系模型。
1.2.2 E-R图由 实体、属性、联系组成。
1.2.3 数据库设计范式,一般满足前3个就足够。第一范式:列不可分割原子性。第二范式:要有主键,且其他键依赖主键。第三范式:不存在非关键字列对任意候选关键字列的传递函数依赖。

第二章 Oracle 11g体系结构概述

2.1 Oracle数据库管理系统3个关键概念 实例、数据库、数据库服务器。数据库存储结构分为:逻辑存储结构、物理存储结构。
2.2 逻辑存储结构:由小到大分为 数据块、数据区、数据段、逻辑对象、表空间、数据库。

  • 1数据块:逻辑最小单位,通常是操作系统块的整数倍。由块头、表目录、行目录、空余空间、行数据5部分组成。
  • 2数据区:一些数据块组成,会自行扩展。Oracle储存分配的最小单元。
  • 3数据段:一些数据区组成,用于存储表、索引或簇等占用空间的数据对象。包括:数据段、索引段、回滚段、临时段。
  • 4表空间:最大的逻辑区分,物理上对应数据文件。Oracle系统自动生成:
    • 4.1SYSTEM表空间:存放系统表与数据字典。
    • 4.2SYSAUX表空间:辅助SYSTEM。
    • 4.3UODO表空间:撤销表空间。
    • 4.4USERS表空间:用户表空间。

2.3 物理存储结构:数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件、警告日志文件等。

  • 1数据文件:保存用户应用程序数据和Oracle系统内部数据的文件。在读取数据时,Oracle会先从高速数据缓存区中取,没有再从数据文件中取。
    • 系统数据文件、撤销数据文件、用户数据文件
  • 2控制文件:记录了数据库的物理结构,包括数据库名、数据文件与日志文件的名称和位置等
  • 3日志文件:日志进程LGWR、归档进程ARCH
    • 重做日志文件:记录了数据库所发生过得更改信息(修改、删除、添加等)。
    • 归档日志文件:非归档模式会在日志记满时覆盖、归档模式会日志写满时运行归档进程。
  • 4服务器参数文件:记录了Oracle数据库的基础参数信息(数据库名、控制文件所在路径、日志缓冲大小等)。查询数据库的服务器参数:
    • 1.select name,value,ismodified from v$parameter;
    • 2.SQL*Plus 的show parameter
    • 3 修改服务器参数 ALTER SYSTEM;
  • 5密码文件:用于密码的验证:NONE表示只要通过操作系统验证,就不用通过Oracle密码文件验证。SHARED表示多个数据库实例都可以采用此密码文件验证。EXCLUSIVE表示只有一个数据库实例可以使用此密码文件验证。
  • 6警告文件:记录Oracle系统的运行信息和错误信息。
  • 7跟踪文件:后台进程跟踪文件用于记录后台进程的警告或错误信息、用户进程跟踪文件用于记载与用户进程相关的信息。

2.4Oracle服务器主要由 实例、数据库、程序全局区、前台进程组成。

  • 1实例:系统全局区(SGA)和后台进程(PMON、SMON等)。系统全局区包括高速数据缓冲区、重做日志缓冲区、共享池、大型池、java池、流池。后台进程是系统后台执行的程序,包括:1数据写入进程DBWR、2检查点进程CKPT、3日志写入进程LGWR、4归档进程ARCH、5系统监控进程SMON、6进程监控进程PMON、7锁定进程LCKN、8恢复进程RWCO、9调度进程DNNN、10快照进程SNPN等200多个。可以从v$bgprocess数据字典查看实例进程。
  • 2程序全局区PGA:也可称用户进程全局区,用户间不共享。包括:私有SQL区、会话区。
  • 3前台进程:1用户进程:连接和会话。2服务器进程:用于处理用户会话过程中向数据库发出的SQL与命令。

2.5数据字典:存放数据信息的地方。可以查看数据库的表、视图、等等信息。

  • dba_ :包含数据库实例的所有对象信息。
  • v$_ :当前实例的动态视图,包含系统管理和系统优化等所使用的视图。
  • user_ :记录用户的对象信息。
  • gv_ :分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图。
  • all_ :记录用户的对象信息机被授权访问的对象信息。

第三章 SQL*Plus 命令

常用PL/SQL Developer,不使用命令,故了解即可。
其他博主总结:SQL*Plus 命令

第四章 SQL语言基础

4.1.1 SQL全称是结构化查询语言。特点:1集合性 2统一性 3易于移植性
4.1.2 1数据查询语言DQL、2数据操作语言DML、3事务控制语言TCL、4数据定义语言DDL、5数据控制语言DCL
4.1.3 SQL关键字不区分大小写。但字符值区分大小写。

4.2 Oracle为了便于管理用户创建的数据库对象(比如数据库、索引、视图等),引入了模式的概念。(就是常说的“用户C1”)。模式对象就是这个模式包含的所有内容。Oracle提供示例模式SCOTT。

4.3 select语法格式:
select {[distinct|all] columns|* }
[into table_name]
from {tables |views |other select}
[where conditions]
[group by columns]
[having conditions]
[order by colimns]

  • Oracle数据库中,有一个标识行中唯一特性的行标识符ROWID,伪列长度为18位字符,包含了该行数据在Oracle数据库中的物理地址。
  • distinct 表示不重复
  • 在where条件的属性比较中(= > < <> <= >=),可以添加ANY、ALL。如A {比较符}ANY B。
  • 当用户使用Group by 时,选择列表中任一非聚集表达式内的所有列都应该包含在Group by列表中。
  • Having 子句的语法与where类似,但Having中可以使用聚合函数,如count、avg。

4.3 多表关联查询

  • 1.内连接、外连接、自然连接、自连接、交叉连接。
  • 内连接关键字INNER JOIN ,INNER可以省略,取交集。
  • 外连接分LEFT JOIN、RIGHT JOIN,取主表所有与交集。FULL JOIN取两表所有,完全外连接时,Oracle会执行一个完整的左外连接和右外连接查询,然后将查询结果合并,并消除重复。
  • 两个具有相同列明的表,直接join 不需要on条件,Oracle自动添加on条件。也是内连接。
  • 交叉连接不需要任何连接条件,用CROSS JOIN。

4.4 常用系统函数
4.4.1 字符类函数:ASCII©返回字符ASCII码、CHR(I)返回ASCII码的字符、CONCAT(s1,s2)连接、INITCAP(s)驼峰、INSTR(s1,s2[,i][,j])查找s2在s1中位置、LENGTH(s)返回字符长度、LOWER(s)/UPPER(s)大小写转换、LTRIM(s1,s2)/RTRIM(s1,s2)/TRIM(s1,s2)去掉两边字符、REPLACE(s1,s2[,s3])替换字符、SUBSTR(s,i,[j])截取字符。
4.4.2 数字类函数:ABS(n)绝对值、MOD(n1,n2)取模。
4.4.3 日期和时间类函数:ADD_MONTHS(d,i)在d上加i月、MONTHS_BETWEEN(d1,d2)返回d1与d2之间的数目、SYSDATE()获取当前日期。
4.4.4 转换类函数:TO_CHAR()、TO_DATE()、TO_NUMBER()。
4.4.5 聚合类函数:MIN()、MAX()、COUNT()、SUM()。

4.5 子查询的使用

  1. 多表关联没子查询灵活,但比其块。因为外查询检索一行,内查询要检索一遍。
  2. 多行子查询可以使用 IN、ANY、ALL。
  3. 当有大量数据时,关联子查询会比较慢。

4.6 操作数据库
4.6.1 插入数据语法:
INSERT INTO table_name [(column_name1[,column_name2]…)]
VALUES(express1[,express2]…)
或省略VALUES用select语句替换。select子句中的列名可以和insert子句中的不一致,但类型必须是兼容的。
4.6.2 更新数据语法:
UPDATE table_name
SET {column_name1=express1[,column_name2=express2…]
|(column_name1[,column_name2…])=(selectSubquery)}
[WHERE condition]
4.6.3 删除数据语法:
DELETE FROM table_name
[WHERE condition]

TRUNCATE table_name truncate速度快,因为其不产生回滚记录。

4.7事务处理

  • 事务4种重要的属性ACID(原子性、一致性、隔离性、持久性)
  • 事务结束的标准:
    • 1执行commit命令
    • 2执行rollback命令
    • 3执行一条数据定义语言DML,系统自动提交或回滚。
    • 4执行一条数据控制语言DCL ,系统自动提交或回滚。
    • 5系统断开或关闭。
  • 提交事务时后台运行:1在回滚段内记录当前事务已提交 2启动日志写入进程将日志写入重做日志文件 3释放资源 4通知用户完成。
  • 回滚事务时后天运行:1使用回滚段内记录还原数据 2释放资源 3通知用户。
  • 可以使用SAVEPOINT设置保存点。

第五章 PL/SQL编程

5.1 概述

  • PL/SQL是一种过程话语言,是Oracle独有的。
  • PL/SQL块:
    [DECLARE]
    –声明部分,可选
    BEGIN
    –执行部分,必须
    [EXCEPTION]
    –异常处理部分,可选
    END
    • 代码块中可以使用dbms_output.put_line©;语句来输出信息。
    • PL/SQL字符集:
      • 大写和小写字母、数字、制表符、空格、回车、数字符号(+,-,*,/,<,>,=等)、间隔符号(包括(),{}, [],?等)

5.2数据类型

  • 5.2.1 基本数据类型:
    • 数值类型:NUMBER、PLS_INTEGER、BINARY_INTEGER
    • 字符类型:VARCHAR2、CHAR、LONG、NCHAR、NVARCHAR2
    • VARCHAR2(maxlength)中maxlength必须输入且小于32767字节。数据库支持最大为4000字节。
    • 日期类型DATA
    • 布尔类型BOOLEAN,值包括TRUE、FALSE、NULL。
    • 特殊数据类型
      • %TYPE 表示与指定列同类型。
      • RECORD类型 记录类型,可以由多个列值组成。语法:
        type record_type is record
        (
        var_member1 data_type [not null] [:=default_value],

        )
      • %ROWTYPE类型,根据表的结构定义的类型,可以储存表的一行数据。
  • 5.2.3 变量与常量
    • 定义变量 <变量名> <数据类型>[(长度):=<初始值>];
    • 定义常量 <变量名> constant <数据类型>:=<常量值>;

5.3 流程控制语句

  • 5.3.1 选择语句
  • if <condition_expression> then
    plsql_sentence1
    else if <condition_expression> then
    plsql_sentence2
    else
    plsql_sentence3
    end if;
  • case
    when then plsql_sentence1;
    when then plsql_sentence2;

    when then plsql_sentencen;
    [else plsql_sentence;]
    end casel;
  • 5.3.2 循环语句
    • loop循环
      loop
      plsql_sentence;
      exit when end_condition_exp
      end loop;
    • while 语句
      while condition_expression loop
      plsql_sentence;
      end loop;
    • for语句
      for variable_counter_name in [reverse] lower_limit…upper_limit loop
      plsql_sentence;
      end loop;

5.4 游标(显式游标、隐式游标、具有引用类型特性的REF游标)

  • 5.4.1 显式游标
    • 处理步骤:声明游标、打开游标、读取游标和关闭游标。
    • 1声明游标:
      cursor cur_name[(input_parameter1[,input_parameter2]…)]
      [return ret_type]
      is select_sentence;
      其中input_paraeter的格式为
      para_name [in] datatype [{:=|default para_value}]
    • 2打开游标
      open cur_name[(para_value1[,para_value2]…)];
      打开游标的过程中,程序先将符合条件的记录送入内存,然后再将“指针”指向第一条记录。
    • 3读取游标
      fetch cur_name into {variable};
      打开游标后,指针会指向第一行,当执行fetch…into后,会把第一行数据付给into的变量,然后指针自动向下移动一行。
    • 4关闭游标
      close cur_name;
  • 5.4.2 游标的属性
    • %found 布尔属性,如果SQL语句至少影响到一行数据则为TRUE。
    • %notfound 与%found 相反。
    • %rowcount 数字型属性,返回受SQL语句影响的行数。
    • %isopen 布尔属性,当游标打开时为TRUE。
  • 5.4.3 隐式游标
    • 在执行SQL时,Oracle会自动创建一个隐式游标。主要处理数据操纵语言DML的执行结果。
    • 隐式游标默认名称 SQL。
  • 5.4.4 通过for语句来循环游标
    for var_auto_record in cur_name loop
    plsql_sentence;
    end loop;
    其中plsql_sentence中,可以通过var_auto_record直接点"."的方式,直接访问游标结果列。
    for循环中,不用打开游标、读取游标、关闭游标,Oracle会自动完成。

5.5 PL/SQL 异常处理

  • 异常处理通常放在PL/SQL的EXEPTION代码块中
  • 两大类异常:预定义异常、自定义异常。
  • 5.5.1 预定义异常 20个左右
    • 包括除数为零ZERO_DIVIDE、TOO_MANY_ROWS结果集超出1行 等,用户可以直接捕获,不用自己定义 。
      exception
      when too_many_rows then
      dbms_output.put.line(‘返回结果集超出一行’);
      end;
  • 5.5.2 自定义异常
    • 1错误编号异常
      • Oracle系统出错时会显示错误编号和异常信息,但错误编号不宜与理解,所以可以再PL/SQL块的声明部分(DECLARE部分)使用EXCEPTION类型定义一个异常变量名,然后使用PRAGMA EXCEPTION_INIT 为错误编号关联异常名称。然后就可以像预定义异常那样捕获处理了。
        declare
        primary_iterant exception;
        pragma exception_init(primary_iterant,-00001);— -00001为主键不为一错误
    • 2业务逻辑异常
      -首先再DECLARE部分使用EXCEPTION类型声明一个异常变量,然后再BEGIN部分根据一定的业务逻辑使用RAISE语句抛出异常(再RAISE后跟异常名称),最后再EXCEPTION部分捕获异常就可以了。

第6章 过程、函数、触发器和包

  • 6.1 存储过程

    • 6.1.1创建存储过程
      create [or replace] procedure pro_name [(parameter1[,parameter2]…)] is|as

      ​ [inner_variable]

    begin
    plsql_sentences;
    [exception]
    [dowith_sentences;]
    end [pro_name];

    • 执行存储过程

      • 1通过 execute pro_name; 方式
      • 2 把存储过程放入PL/SQL代码块中
        begin
        pro_name;
        end;
    • 6.1.2存储过程的参数(包括IN、OUT、INOUT)

    • IN模式,输入类型参数,存储过程只能读取。默认模式。可以指定名称传递(parname=>value,…)、按位置传递。有默认值可以不传递参数。

    • OUT模式,输出类型参数,存储过程可以修改其值。

    • INOUR模式,输入输出类型参数。即可读取也可修改。

  • 6.2 函数

    • 6.2.1 函数的创建

      create [or replace] function fun_name ([parameter1[, parameter2]…]) return data_type is

      ​ [inner_variable]

      begin

      ​ plsql_sentence;

      [exception]

      ​ [dowith_sentences];

      end [fun_name];

    • 调用函数:调用函数时必须使用一个变量来保存函数的返回值。如:avg:=get_avg(10);

    • 删除函数:drop function fun_name;

  • 6.3 触发器

    • 6.3.1 触发器可以看作是一种特殊的存储过程,它定义了一些与数据库相关的事件(触发事件DML、DDL、数据库系统事件、用户事件等)发生时应执行的“功能代码块”。

    • 语法:

      create [or replace] trigger tri_name

      ​ [before | after | instead of] tri_event

      on table_name | view_name |user_name |db_name

      [for each row] [when tri_condition]

      begin

      plsql_sentences;

      end tri_name;

    • 行级触发器、语句级触发器、替换触发器、用户事件触发器、系统事件触发器。

    • 前触发适合强化安全性、启用业务逻辑和进行日志记录。后触发适合记录操作或做某些事后处理。

    • 6.3.2 语句级触发器:就是针对一条DML语句的触发器,不使用for each row ,无论操作多少行,只触发一次。

      • 条件谓词:inserting、updating、deleting。还可以使用updating(dname)判断某列是否被更新。
    • 6.3.3 行级触发器

      • 针对每一行数据都执行一次触发器,必须使用 for each row语句。
      • 列标识符::new.column_name 、:old.column_name。
    • 6.3.4 替换触发器

      • 使用 instead of 语句,用于替换DML操作。定义在视图上。
    • 6.3.5 用户事件触发器

      • 因进行DDL操作或用户登录、退出等操作而引起运行的触发器。
      • 常见的用户事件为CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、RENAME、TRUNCATE、SUSPEND、LOGON、LOGOFF等。
  • 6.4 程序包

    • 程序包由PL/SQL程序元素(如变量、类型)和匿名PL/SQL块(如游标)、命名PL/SQL块(如存储过程和函数)组成。

    • 在PL/SQL块中使用dbms_output.put_line语句就是程序包的一个应用。

    • 6.4.1 程序包头

      • 语法:

        create [for replace] package pack_name is

        [declare_variable];

        [declare_type];

        [declare_curosr];

        [declare_function];

        [declare_procedure];

        end [pack_name];

    • 6.4.2 程序包体

      • 包含了程序包头中声明的对象。

      • 语法:

        create [or replace] package body pack_name is

        [inner_variable]

        [cursor_body]

        [function_title]

        {begin

        ​ fun_plsql;

        [exception]

        ​ [doeith_sentences];

        end [fun_name]}

        [procedure_title]

        {begin

        ​ pro_plsql;

        [exception]

        [dowith_sentences;]

        end [pro_name]}

        end [pack_name];

第七章 管理控制文件和日志文件

  • 7.1 管理控制文件
    • 控制文件时Oracle数据库最重要的文件之一,每个Oracle数据库都必须至少有一个控制文件,在启动数据库实例时,Oracle会根据初始化参数查找到控制文件,并读取控制文件的内容,然后根据控制文件中的信息(如数据库名称、数据文件和日志文件的名称及位置等)在实例和数据库之间建立关联。
    • 只有Oracle进程才能安全地更新控制文件的内容。为了保证控制文件的安全,Oracle提供了备份和多路复用的机制。
    • 至少要为数据库建立两个控制文件,且保存在不同的磁盘中。实现控制文件的多路复用主要包括更改CONTROL_FILES参数和复制控制文件两步。
    • 在控制文件全部丢失后,唯一补救办法就是手动创建控制文件。使用CREATE CONTROLFILE语句。创建控制文件步骤:
      • 1查看数据文件和重做日志文件
      • 2关闭数据库
      • 3备份文件
      • 4重启数据库实例
      • 5创建新的控制文件
      • 6编辑参数
      • 7打开数据库
    • 使用alter database backup controfile语句备份控制文件,有两种方式:1二进制备份 2脚本备份
    • 备份后恢复控制文件,只需要在初始化文件中重新设置CONTROL_FILES 参数的值,指向备份文件。
    • 删除控制文件
      • 1关闭数据库 shutdown
      • 2编辑初始化参数CONTROL_FILES,清除掉打算删除的控制文件名称。
      • 重新启动数据库。startup
    • 查询控制文件信息,使用数据字典 V$CONTROLFILE等。
  • 7.2 管理重做日志文件
    • 重做日志文件(Redo Log File)通常也称为日志文件,它是保证数据库安全和数据库备份与恢复的文件。
    • 用于记载事务操作引起的数据变化,当执行DDL或DML操作时,有LGWR进程将缓冲区中与该事务有关的重做记录全部写入重做日志文件。
    • 一个Oracle数据库至少需要两个重做日志文件组,没个组包含一个或多个重做日志文件。
    • 可以通过数据字典V L O G 、 V LOG、V LOGVLOGFILE、V$LOG_HISTORY查看日志文件信息。
  • 7.3 归档日志文件
    • Oracle有两种日志模式,非归档日志模式、归档日志模式,在归档模式下,通过“归档日志文件”来提前保存因日志写满而即将被覆盖的重做日志文件。
    • 通过数据字典查看归档信息V$DATABASE等。

第八章 管理表空间和数据文件

  • 8.1 表空间与数据文件关系
    • 表空间是数据文件的逻辑层表示。查看表空间对应数据文件的信息可以用数据字典DBA_DATA_FILES。
  • 8.2 Oracle 11g的默认表空间
    • EXAMPLE:存放各样例的数据。
    • SYSAUX:SYSTEM表空间的辅助空间。
      • 通过DBA_SEGMENTS查看SYSAUX表空间信息。
    • SYSTEM:存放数据字典、包括表、视图、存储过程的定义等。
      • 可以再数据字典DBA_SEGMENTS中查询某个表空间存放的数据对象及其类型和拥有者。
    • TEMP:存放SQL语句处理的表和索引的信息,比如排序就占用此空间。
    • UNDOTBS1:存放撤销数据的空间。
    • USERS:存放“应用系统”所使用的数据对象。
  • 8.3 创建表空间
    • 1通过本地化管理方式创建表空间
    • 2通过空间管理方式创建表空间
    • 3创建非标准块表空间
    • 4创建大文件表空间
  • 8.4 维护表空间与数据文件
    • 8.4.1 设置默认表空间:系统创建用户时,如果不指定表空间,则默认是TEMP表空间,默认永久表空间是SYSTEM。这样会导致应用系统和Oracle系统竞争使用SYSTEM表空间,所以Oracle建议将非SYSTEM表空间设置为应用系统的默认永久表空间,非TEMP表空间设置为应用系统的临时表空间。
    • 表空间有两种状态:只读和可读写。只读时不能进行DML操作。
  • 8.5 管理撤销表空间
    • UNDO撤销段所在表空间。
  • 8.6 管理临时表空间
    • 临时表空间是磁盘空间,主要用于内存排序区不够而必须将数据写到磁盘的那个逻辑区域,排序完后自动释放。

第九章 数据表对象

  • 9.2 创建数据表

    • 在创建数据表时,Oracle将在一个指定的表空间中为其分配存储空间。

    • Oracle内置的数据类型:

      • 字符型:
        • CHAR数据类型:用于存储固定长度的字符串,插入数据少于固定长度时,后补空格。插入数据大于固定长度是,会报错。
        • VARCHAR2数据类型:用于存储变长的字符串数据,保留实际字符串长度。
      • 数值类型:
        • NUMBER(precision,scale):精度和范围,如果插入数据超过指定位数,将四舍五入。
      • 日期时间类型:
        • DATE:存储日期和时间的组合数据。
      • LOB类型:
        • 用于大型的、未被结构化的数据。如二进制文件、图片文件和其他类型的外部文件。
        • BLOB:存储二进制对象。如图像、音频文件。
        • CLOB:存储字符格式的大型对象。
        • BFILE:存储二进制格式的文件。
      • ROWID数据类型:被称为“伪列类型”,记录每条记录的物理地址。
    • 9.2.2 创建数据表语法

      CREATE TABLE table_name

      {

      列名 数据类型 约束|默认值,

      表级约束|主键|外键

      }

    ​ 也可以使用
    ​ CREATE TABLE table_name as select …

    • 数据表的特性:
      • 1存储参数:Oracle创建表时,如果没指定会使用默认的存储参数。也可以通过STORAGE子句设置存储参数,这样可以控制表中盘区的分配管理方式。STORAGE子句指定INITIAL、NEXT、MINEXTENTS这3个参数。
        • INITIAL:用于为表指定分配的第一个盘区大小。
        • NEXT:用于指定分配的第二个盘区大小,在字典管理的表空间起作用。
        • MINEXTENTS:用于指定分配的最小盘区数目,在本地化管理的表空间不起作用。
      • 2数据块管理参数
        • PCTFREE和PCTUSED
          • 在管理方式为AUTO自动下,不用设置。SEGMENT SPACE MANAGEMENT AUTO
          • 在管理方式为MANNUAL手动管理,可以设置。SEGMENT SPACE MANAGEMENT MANUAL
          • PCTFREE用于指定数据块中必须保留的最小空闲空间比例,空闲空间用于插入、更新时使用。默认10
          • PCTUSED用于设置数据块是否可用的界限。
          • PCTFREE和PCTUSED和必须小于等于100,和与100差越大,存储效率越高。
        • INITRANS参数:用于指定一个数据块所允许的并发事务数目。能够访问一个数据块的事务总数由MAXTRANS参数决定,一般默认255个。
      • 3重做日志参数
        • 在创建表时,使用NOLOGGING子句,则不记录DDL日志,记录DML日志。使用LOGGING子句则都记录。
      • 4缓存参数
        • 使用CACHE子句会将全文搜索时,将读入的数据块放在LRU中最近最常使用的一端,默认是放入最近最少使用的一端。这样就提高了针对该表的查询效率。对于比较小且又经常查询的表可以用。
  • 9.3 维护数据表

    • 9.3.1 增加和删除字段

      • ALTER TABLE 表名 ADD(新字段名,数据类型);
      • ALTER TABLE 表名 DROP [(列名1,列名2) | column 列名];
    • 9.3.2 修改字段

      • alter table table_name modify column_name colun_property;
    • 9.3.3 重命名表名

      • alter table table_oldname rename table_newname;
      • Oracle会自动更新数据字典中的外键、约束定义以及表关系。但不会更新存储过程、客户应用以及依赖该对象的其他对象。
    • 9.3.4 改变表空间和存储参数

      • 1修改表空间:若要将一个“非分区”表移动到一个新的表空间,则可以使用

        alter table table_name move tablespace newtbsp_name;

      • 2修改存储参数:alter table table_name pctfree newvalue pctused newvalue;

    • 9.3.5删除表

      • drop table table_name [cascade constraints];
      • 如果表存在约束、关联的视图和触发器等,必须使用子句 cascade constraints。
      • 一般删除后只是在数据字典中删除,并没有清理空间,而是把表放在了回收站。所以删除后可以参看回收站是否存储而闪回还原。
        • 查看回收站:数据字典RECYCLEBIN
        • 闪回:FLASHBACK TABLE table_name to before drop;
        • 如果drop时使用purge选项就彻底删除了。
    • 9.3.6 修改表状态

      • 用户可以将表置于READ ONLY(只读)状态,然后就不能执行DML和某些DDl操作了。
      • alter table table_name read only;
  • 9.4 数据完整性和约束性:非空约束、主键约束、唯一约束、外键约束、检查约束、默认约束。

    • 1非空约束:NOT NULL
    • 2主键约束:可以在列名后,也可以再所有列之后声明,包含非空约束、唯一。
      • constraint key_name primary key (column1[,column2…])。constraint 可以省略,省略时系统自动生成约束名。
      • alter table table_name add [constraint key_name] primary key(column);
      • alter tbale table_name drop constraint key_name;
    • 3唯一性约束:可以在列名后,也可以在所有列之后声明。
      • CONSTRAINT u_name UNIQUE;不允许重复,但可以有多个空值。
      • ALTER TABLE table_name ADD CONSTRAINT u_name UNIQUE (column_name);
      • ALTER TABLE table_name DROP CONSTRAINT u_name;
    • 4外键约束:两个表关联
      • CINSTRAINT f_name FOREIGN KEY(本列名)REFERENCES 关联表名(关联列名)[on …];
      • 关联列名与本表列名相同时,关联列名可以省略。
      • 可以通过关键字 ON 指定引用行为的类型。
        • NO ACTION 当删除应用表中被引用类的数据时,将违反外键约束,报错。默认。
        • SET NULL 删除时外键表中外键被设置为NULL
        • CASCADE 级联删除。例如: ON DELETE CASCADE;
      • 5禁用和激活约束
        • 创建后默认激活,可以在创建create时或之后用alter指定 disable关键字禁用。
        • 禁用主键约束时,会一起删除其包括的唯一索引。可以在禁用时使用关键字KEEP INDEX放在约束后面,来保留唯一索引。使用CASCADE关键字会级联禁用关联的外键约束。
        • 使用ALTER TABLE table_name ENABLE [novalidate | validate] constraint con_name;
      • 6删除约束
        • ALTER TABLE … DROP CONSTRAINT …;

第十章 其他数据对象

  • 10.1 索引对象

    • Oracle对索引和对表的操作相似,会在数据字典中保存索引的定义,还在用户默认表空间中分配实际的索引段。
    • 按存储方式分为:B树索引、位图索引、反向键索引、基于函数的索引。按唯一性分为:单一索引、复合索引。
    • 建立索引的要求:
      • 1索引因建立在WHERE子句频繁引用表列上,并且检索行数不低于总行数15%。
      • 2经常用于排序的列建立索引。
      • 3索引会减低DML速度。
      • 4索引块空间是为了以后INSERT操作预留的空间,所以INSERT大量的表应该设置PCTFREE较大,则索引块空间会较小。
      • 5将表和索引部署到相同的表空间,可以简化表空间管理。将表和索引部署到不同的表空间,可以提高访问性能。
      • 6在大表上建立索引时,使用NOLOGGING可以节省日志空间、降低索引建立时间。
      • 7不要在小表上建立索引。
      • 8在表链接的列上建立索引。
    • 创建索引:使用CREATE INDEX语句
      • 1建立B树索引:默认,以B树结构组织并存放索引数据。分配均匀满树下,无论获取哪个页块都可以保证经过的索引层次是相同的。
      • 子句TABLESPACE用于指定索引段所在表空间,不指定就在用户默认表空间。
      • 2建立位图索引:当列的基数低于1%时,适于建立位图索引。使用 create bitmap index inx_name on table_name(column_name);
        • 位图索引默认分配位图区大小为8MB,可以使用CREATE_BITMAP_AREA_SIZE参数修改。
      • 3建立反向键索引:在Oracle中,系统会自动为表主键建立索引,默认是B树索引。但表主键通常是自动增长的序列编号,如果数据量非常大时将导致索引数据分配不均,可以使用反向键索引(将主键值反向),将数据随机分散到索引中。
        • create index inx_name on table_name(clumn_name) reverse;
        • alter index inx_name rebuild reverse;
      • 4基于函数的索引:基于函数的索引是常规B树索引,它存放的数据是由表中的数据应用函数后所得到的。
        • create index inx_name on table_name(函数(clumn_name));
    • 修改索引
      • 有两种方式可以清除索引碎片:重建索引和合并索引
        • 合并索引:alter index inx_name coalesce deallocate unused;
        • 重建索引:alter index inx_name rebuild;
    • 删除索引:
      • drop index inx_name;
    • 索引信息数据字典:
      • DBA_INDEXES显示数据库的所有索引;ALL_INDEXES显示当前用户可以访问的所有索引;USER_INDEXES显示当前用户的索引信息。
      • DBA_IND_COLUMNS显示所有索引的表列信息;ALL_IND_COLUMNS显示当前用户可以访问的所有索引列信息;USER_IND_COLUMNS显示当前用户的所有索引列信息。
      • DBA_IND_EXPRESSIONS显示数据库所有函数索引对应的函数或表达式;USER_IND_EXPRESSIONS。
      • DBA_SEGMENTS显示索引段位置及大小。
  • 10.2 视图对象:数据库只在数据字典中存储视图的定义信息,不存储数据值。

    • 10.2.1 创建视图

      • create [or replace] view <view_name> [alias[,alias]…]

        as

        [with check option] [constraint constraint_name]

        [with read only]

      • 简单视图:单个表,不包含函数、表达式、分组数据时,可以对视图DML操作。

      • 只读视图、复杂视图、连接视图 不可以执行DML。

    • 管理视图:

      • 数据字典USER_VIEWS查看视图定义信息。
      • create or replace view 重新定义视图。
      • alter view view_name compile;重新编译视图
      • drop view view_name;
  • 10.3 同义词对象

    • 同义词是表、索引、视图等模式的一个别名(公有同义词、私有同义词)。
    • 建立公


第十一章 表分区与索引分区



  • 11.4 管理表分区

    • 11.4.1 添加表分区 ALTER TABLE … ADD PARTITION

      alter table table1 add partition hebei values(“河北省”)

      storage(inital 10k next 20k) tablespace tbsp_1

      nologging;

    • 11.4.2 合并分区

      • 合并散列分区 alter table … coalesce partition;
      • 合并复合分区 alter table person2 modify partition par3 coalesce subpartition;
    • 11.4.3 删除分区

      • 可以从范围分区或复合分区中删除分区,但是散列分区和复合分区的散列子分区,只能通过合并分区来达到删除的目的。
      • 删除一个表分区 alter table … drop partition
      • 删除有数据、全局索引、有完整性约束的表分区,要先删数据和禁用完整性约束,再删分区,最后重建索引。
    • 11.4.4 并入分区

      • 使用merge partition语句将相邻的范围分区合并变成一个新分区。合并完需重建索引。
  • 11.5 创建索引分区

    • Oracle索引分区分为本地索引分区和全局索引分区。

    • 本地索引分区:就是使用和分区表同样的分区键进行分区的索引。

      • create index par_name on table_name(clumn_name)

        local

        (

        partition p1 tablespace ts_1,

        ) ;

      • 可以通过DBA_IND_PARTITIONS来查看索引分区信息。

    • 全局索引分区:

      • 就是没有与分区表相同分区键的分区索引,当分区中出现许多事务时,采用全局索引分区。

      • 无论表是否采用分区,都可以对表采用全局索引分区,不能对Cluster表、位图索引采用全局索引分区。

      • create index index_name on table_name(clumn_name) --全局范围索引分区

        global partition by range(clumn_name)

        (

        partition p1 values less than(number_value),

        );

      • global partition by hash(clumn_name); --全局hash索引分区

  • 11.6 管理索引分区

    • 删除索引分区 alter index … drop partition…

    • 删除后若只剩一个索引分区,需要重建 alter index … rebuild partition…

    • 重命名索引分区:alter index index_name rename partition old_name to new_name;

第十二章

举报

相关推荐

0 条评论