zoukankan      html  css  js  c++  java
  • Oracle 学习笔记 (七)

    一、数据库的启动

    启动数据库的三个阶段: nomount, mount,open

    mount 阶段:.
      1.读参数文件
      2.分配内存
      3.启动后台进程
      4.初始化部分v$视图

    mount 阶段:

      读参数文件中的控制文件 --> 校验控制文件的正确性 -->  将控制文件的内容加载到内存       

      mount 是挂载的意思,将一个没有实际意义的实例挂载到任意数据库。控制文件包含: 数据文件和日志文件                                                                              

    Open 阶段:
      读取控制文件中的数据文件 ---> 验证数据文件的一致性,(如果不一致,使用日志文件将数据文件恢复到一致状态)--> 数据库 open 后,普通用户才能访问数据库

    二、数据库的停止

    Shutdown NORMAL

    • 新的会话不接受
    • 等待非活动的会话结束
    • 等待事物结束
    • 产生检查点
    • 停止数据库

    Shutdown TRANSACTIONAL

    • 新的会话不接受
    • 不等待非活动的会话结束
    • 等待事物结束
    • 产生检查点
    • 停止数据库

    Shutdown immediate

    • 新的会话不接受
    • 不等待非活动的会话结束
    • 不等待事物结束
    • 产生检查点
    • 停止数据库

    Shutdown abort

    • 新的会话不接受
    • 不等待非活动的会话结束
    • 不等待事物结束
    • 不产生检查点
    • 停止数据库

    一致性 shutdown,产生检测点

    • Shutdown NORMAL
    • Shutdown TRANSACTIONAL
    • Shutdown IMMEDIATE
    • 数据库再次启动的时候不要恢复

    不一致性 shutdown,不产生检测点

    • Shutdown abort
    • Startup force
    • Instance 崩溃(停电)
    • 数据库再次启动的时候需要恢复,自动的,透明的
        conn sys/sys as sysdba
        Shutdown abort;
         Startup nomount;
         select instance_name,status from v$instance;
         alter database mount;  -- 切换到 mount
         alter database open   -- 打开数据库 Open
    

      

    三、oracel 数据库的创建

    一般通过板库创建,板库位置: %oracle_home%assistantsdbca emplates 目录下

    数据字典的创建

    在创建数据库时,数据字典是自动创建的,数据字典的位置:%oracle_home% dbmsadmincatalog.sql v$ 的字典是数据库在启动时初始化的

    数据库字典的使用

    • 数据库自己使用字典获取信息
    • 数据库自动维护
    • 查看字典获取数据库的相关信息

    查看oracel 安装的实例(数据库)
     select instance_name from v$instance;

    四、 触发器

      触发器的类型 

    • 行级触发器 FOR EACH ROW: 受影响的每一行都会执行触发器 
    • 语句触发器 :默认的模式,一句话才执行一次触发器

    何时触发

    • BEFORE 在条件运行前触发
    • AFTER 在条件执行后触发
    • INSTEAD OF 替代触发,作用在视图上

       触发器的创建

    		CREATE or replace TRIGGER  触发器名
    		AFTER  delete or update of  字段 ON  表名
    		FOR EACH ROW
    		BEGIN
    		IF(UPDATING AND :old.字段名 != :new.字段名)
    		THEN UPDATE E 
    		SET 字段=:new.字段名
    		where 字段=:old.字段名
    		END IF;
            IF deleting THEN
    		delete e where 字段= :new.字段名;
    		end it;
    		END;
    		/
    

         查看 触发器的状态

    select trigger_name,status from user_triggers;

    禁用触发器

        alter trigger 触发器名 disable;

    禁用某个表上的所有触发器

      alter table 表名 disable all triggers;

    删除触发器

      drop trigger 触发器

    五、函数

    • 函数是有名称的 pl/sql 块是
    • 函数有返回值
    • 存储在服务器端
    	 CREATE OR REPLACE FUNCTION 函数名
    	(v_id IN emp.empno%TYPE)
    	 RETURN NUMBER
    	IS
    	v_salary emp.sal%TYPE :=0;
    	BEGIN
    	SELECT sal INTO v_salary FROM emp WHERE empno = v_id;
    	RETURN (v_salary);
    	END get_sal;
    	/ 

    查看函数
    select object_name,object_type from user_objects;

    查看原程序
    select text from user_source;

    调用函数
    select 函数名(7839) from dual;

    删除函数
     DROP FUNCTION 函数名;

    建立索引用的函数

      要使基于函数的索引被使用要先收集统计信息DETERMINISTIC(确定性)要在函数的定义中指明(意思为输入的值相同时函数的返回值也相同,如随机数发生函数,日期函数就不符合)函数中不能含有集合函数Or 运算时不会使用函数索引

      QUERY_REWRITE_ENABLED=TRUE
      QUERY_REWRITE_INTEGRITY=TRUSTED

    六、存储过程

    • 存储在服务器端
    • 编译好的
    • 可以在程序中调用
    • 完成一定的功能。
    • 可以没有返回值,也可以有多个返回值 

    创建存储过程

       CREATE OR REPLACE  PROCEDURE  存储过程名
       (参数)
       is 
       BEGIN
         -- DML 语句
       commit;
       End 存储过程名;
       /
    

      验证原程序

    select text from user_source where name='存储过程名';

    单独运行
    EXECUTE 存储过程名(参数)

    BEGIN
    存储过程名(参数)
    end;
    /

  • 相关阅读:
    关于Windows程序设计的初步认识
    C++虚函数作用原理(二)——类的继承
    史诗级Java资源大全中文版
    马上加薪!测试,你的职业发展...
    你不知道的接口自动化测试!
    69道Spring面试题和答案,简单明了无套路
    大厂都在问的多线程面试题,你不了解下嘛?
    现代Java进阶之路必备技能——2019 版
    80后程序员降薪6K,预感中年危机来袭,准备跳槽却碰壁
    微服务、分布式、高并发都不懂,你拿什么去跳槽?
  • 原文地址:https://www.cnblogs.com/wisdo/p/7898424.html
Copyright © 2011-2022 走看看