Easier said than done,just do it!
welcome to karlen's home

导航

 

第五期  使用PL/SQL

本期目标:
 1.理解PL/SQL功能和特点
 2.了解数据类型及其用法
 3.理解逻辑比较
 4.理解控制结构
 5.掌握错误处理

PL/SQL 简介
 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言
 PL/SQL 是对SQL的扩展
 支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构
 可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑
 与Oracle服务器和Oracle工具紧密集成,具备可移植性、灵活性和安全性

PL/SQL 的优点
 支持SQL,在PL/SQL中可以使用:
  数据操纵命令
  事务控制命令
  游标控制
  SQL函数和SQL运算符
 支持面向对象编程(OOP)
 可移植性,可运行在任何操作系统和平台上的Oracle数据库
 更佳的性能,PL/SQL经过编译执行
 与SQL紧密集成,简化数据处理
  支持所有SQL数据类型
  支持NULL值
  支持%TYPE和%ROWTYPE属性类型
 安全性,可以通过存储过程限制用户对数据的访问

PL/SQL 的体系结构
 PL/SQL引擎驻留在Oracle服务器中
 该引擎接受PL/SQL块并对其进行编译执行

PL/SQL 块简介
 PL/SQL 块是构成PL/SQL程序的基本单元
 将逻辑上相关的声明和语句组合在一起
 PL/SQL分为三个部分:声明部分、可执行部分和异常处理部分
  [DECLARE
    declarations]
  BEGIN
    executable statements
  [EXCEPTION
    handlers]
  END;
 eg:
  DECLARE
    qty_on_hand NUMBER(5);
  BEGIN
    SELECT quantity INTO qty_on_hand
    FROM Products
    WHERE product = '芭比娃娃'
    FOR UPDATE OF quantity;
    IF qty_on_hand > 0 THEN
      UPDATE Products SET quantity = quantity + 1
      WHERE product = '芭比娃娃';
      INSERT INTO purchase_record
      VALUES ('已购买芭比娃娃', SYSDATE);
    END IF;
    COMMIT;
  EXCEPTION 
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('出错:'|| SQLERRM); 
  END;

变量和常量
 PL/SQL 块中可以使用变量和常量
  在声明部分声明,使用前必须先声明
  声明时必须指定数据类型,每行声明一个标识符
  可执行部分的SQL语句和过程语句中使用
 声明变量和常量的语法:
  identifier [CONSTANT] datatype [NOT NULL]
   [:= | DEFAULT expr];
 给变量赋值有两各方法:
  使用赋值语句 :=
  使用 SELECT INTO 语句
  eg:
   DECLARE
     icode VARCHAR2(6);
     p_catg VARCHAR2(20);
     p_rate NUMBER;
     c_rate CONSTANT NUMBER := 0.10;
   BEGIN
     ...
     icode := 'i205';
     SELECT p_category, itemrate * c_rate
     INTO  p_catg, p_rate
     FROM itemfile WHERE itemcode = icode;
     ...
   END;

逻辑比较
 逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式
 布尔表达式由关系运算符与变量或常量组成
 布尔表达式的结果为TRUE、FALSE或NULL,通常由逻辑运算符AND、OR和NOT连接
 布尔表达式有三各类型
  数字布尔型
  字符布尔型
  日期布尔型

控制结构
 PL/SQL支持的流程控制结构:
  条件控制
   IF语句
   CASE语句
  循环控制
   LOOP循环
   WHILE循环
   FOR循环
  顺序控制
   GOTO语句
   NULL语句

条件控制
 IF语句根据条件执行一系列语句,有三各形式:
  IF-THEN、IF-THEN-ELSE和IF-THEN-ELSIF
 eg:
  DECLARE
      icode VARCHAR2(4);
      irate NUMBER;
  BEGIN
      icode := 'i203';
    SELECT itemrate INTO irate FROM itemfile
    WHERE  itemcode = icode;
    IF irate > 200 THEN
      UPDATE itemfile SET itemrate = itemrate - 200
      WHERE itemcode = icode;
    ELSE
      UPDATE itemfile SET itemrate = itemrate - 50
      WHERE itemcode = icode;
    END IF;
    DBMS_OUTPUT.PUT_LINE('itemrate='|| irate);
  END;
 CASE语句用于根据单个变量或表达式与多个值进行比较
 执行CASE语句前,先计算选择器的值
  BEGIN
      CASE '&grade'
        WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('优异');
        WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE ('优秀');
        WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE ('良好');
        WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE ('一般');
        WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE ('较差');
        ELSE DBMS_OUTPUT.PUT_LINE ('没有此成绩');
      END CASE;
  END;

循环控制
 循环控制用于重复执行一系列语句
 循环控制语句包括:
  LOOP、EXIT 和 EXIT WHEN
 循环控制的三种类型:
  LOOP - 无条件循环
   LOOP
     sequence_of_statements
   END LOOP;
  WHILE - 根据条件循环
   WHILE condition LOOP
     sequence_of_statements
   END LOOP;
  FOR - 循环固定的次数
   FOR counter IN [REVERSE] value1..value2
   LOOP
     sequence_of_statements
   END LOOP;

顺序控制
 顺序控制用于按顺序执行语句
 顺序控制语句:
  GOTO语句-无条件地转到标签指定的语句
  NULL语句-什么也不做的空语句
 eg:
  DECLARE
    qtyhand itemfile.qty_hand%type;
    relevel itemfile.re_level%type;
  BEGIN
    SELECT qty_hand,re_level INTO qtyhand,relevel
    FROM itemfile WHERE itemcode = 'i201';
    IF qtyhand < relevel THEN
      GOTO updation;
    ELSE
      GOTO quit;
    END IF;
    <>
    UPDATE itemfile SET qty_hand = qty_hand + re_level
    WHERE itemcode = 'i201';
    <>
    NULL;
  END;

错误处理
 在运行程序时出现的错误叫异常
 发生异常后,语句将停止执行,控制权转移到PL/SQL块的异常处理部分
 异常有两种类型:
  预定义异常-当PL/SQL程序违反Oracle规则或超越系统限制时隐式引发
  用户定义异常-用户可以在PL/SQL块的声明部分定义异常,自定义的异常通过RAISE语句显式引发
 常见系统异常:
  DUP_VAL_ON_INDEX :向有唯一约束的表中插入重复行
  NO_DATA_FOUND :在一个select into语句中无返回值
  TOO_MANY_ROWS :select into语句返回了多行
  VALUE_ERROR :一个算法、转换、截断或大小约束发生错误
  ZERO_DIVIDE :发生被0除

错误处理
 处理预定义异常:
  DECLARE
    ordernum VARCHAR2(5);
  BEGIN
    SELECT orderno INTO ordernum FROM order_master;
  EXCEPTION
    WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.PUT_LINE ('返回多行');
  END;
 处理用户定义异常:
  DECLARE
    invalidCATEGORY EXCEPTION;
    category VARCHAR2(10);
  BEGIN
    category := '&Category';
    IF category NOT IN ('附件','顶盖','备件') THEN
      RAISE invalidCATEGORY;
    ELSE
      DBMS_OUTPUT.PUT_LINE('您输入的类别是'|| category);
    END IF;
  EXCEPTION
    WHEN invalidCATEGORY THEN
      DBMS_OUTPUT.PUT_LINE('无法识别该类别');
  END;

引发应用程序错误
 RAISE_APPLICATION_ERROR过程
  用于创建用户定义的错误信息
  可以在可执行部分和异常处理部分使用
  错误编号必须介于-20000和-20999之间
  错误消息的长度可长达2048个字节
 引发应用程序错误的语法
  RAISE_APPLICATION_ERROR(error_number,error_message);
 eg:
  DECLARE
    rate itemfile.itemrate%TYPE;
    rate_exception EXCEPTION;
  BEGIN
    SELECT NVL(itemrate,0) INTO rate FROM itemfile
    WHERE  itemcode = 'i207';
    IF rate = 0 THEN
      RAISE rate_exception;
    ELSE
      DBMS_OUTPUT.PUT_LINE('项费率为:' || rate);
    END IF;
  EXCEPTION
    WHEN rate_exception THEN
      RAISE_APPLICATION_ERROR(-20001, '未指定项费率');
  END;


第六期  游标管理

本期目标:
 1.掌握游标管理技巧

游标简介
 在PL/SQL语句中执行SELECT,INSERT,UPDATE,DELETE语句时,Oracle会在内存中为其分配上下文区(Context Area)。游标是指向该区的指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。它为应用程序提供了一种对具有多行数据的查询结果集中每行数据进行单独处理的方法,是设计互式应用程序的常用编程接口。
 分类:
  显式游标和隐式游标(还有REF游标,用于处理运行时才能确定的动态SQL查询的结果)

隐式游标
 在PL/SQL中使用DML语句时自动创建隐式游标
 隐式游标自动声明、打开和关闭,其名为SQL
 通过检查隐式游标的属性可以获得最近执行的DML语句的信息
 隐式游标的属性有:
  %FOUND - SQL语句影响了一行或多行时为TRUE
  %NOTFOUND - SQL语句没有影响任何行时为TRUE
  %ROWCOUNT - SQL语句影响的行数
  %ISOPEN - 游标是否打开,始终为FALSE
 eg:
  1).
  BEGIN
    UPDATE toys SET toyprice = 270
    WHERE toyid = 'P005';
    IF SQL%FOUND THEN
      DBMS_OUTPUT.PUT_LINE('表已更新');
    END IF;
  END;
  2).
  BEGIN
    UPDATE vendor_master
    SET venname = 'Rob Mathew'
    WHERE vencode = 'V004';
    DBMS_OUTPUT.PUT_LINE (SQL%ROWCOUNT);
  END;
  3).
  DECLARE
    empid varchar2(10);
    desig varchar2(10);
  BEGIN
    empid := '&Employeeid';
    SELECT designation INTO desig
    FROM employee WHERE empno = empid;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('Employee Not Found');
  END;

显式游标
 显式游标在PL/SQL块的声明部分精义查询,该查询可以返回多行
 显式游标的操作过程:
  数据库--(打开游标)-->表--(提取行)-->变量-->关闭游标
 示例:
  DECLARE
    my_toy_price toys.toyprice%TYPE
    CURSOR toy_cur IS
   SELECT toyprice FROM toys
   WHERE toyprice < 250;
  BEGIN
    OPEN toy_cur;
    LOOP
      FETCH toy_cur INTO my_toy_price;
      EXIT WHEN toy_cur%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE('TOYPRICE =: ' || my_toy_price );
    END LOOP;
    CLOSE toy_cur;
  END;

 带参数的显式游标:
  DECLARE
    desig VARCHAR2(20);
    emp_code VARCHAR2(5);
    empnm VARCHAR2(20);
    CURSOR emp_cur(desigparam VARCHAR2) IS
      SELECT empno, ename FROM employee
      WHERE designation = desigparam;
  BEGIN
    desig := '&desig';
    OPEN emp_cur(desig);
    LOOP
      FETCH emp_cur INTO emp_code,empnm;
      EXIT WHEN emp_cur%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(emp_code || '' || empnm);
    END LOOP;
    CLOSE emp_cur;
  END;
  
使用显式游标更新行
 允许使用游标删除或更新活动集中的行
 声明游标时必须使用 SELECT ... FOR UPDATE 语句

 CURSOR IS SELECT statement FOR UPDATE;

 //更新的语法
 UPDATE SET WHERE CURRENT OF

 //删除的语法
 DELETE FROM WHERE CURRENT OF

 eg:
 DECLARE
   new_price NUMBER;
   CURSOR cur_toy IS
     SELECT toyprice FROM toys WHERE toyprice < 100
       FOR UPDATE OF toyprice;
 BEGIN
   OPEN cur_toy;
   LOOP
     FETCH cut_toy INTO new_price;
     EXIT WHEN cur_toy%NOTFOUND;
     UPDATE toys
       SET toyprice = 1.1 * new_price
       WHERE CURRENT OF cur_toy;
   END LOOP;
   CLOSE cur_toy;
   COMMIT;
 END;

循环游标
 循环游标用于简化游标处理代码
 当用户需要从游标中提取所有记录时使用
 循环游标的语法如下:
  FOR IN
  LOOP
   
  END LOOP;
 
 eg:
  DECLARE
    CURSOR mytoy_cur IS
      SELECT toyid, toyname, toyprice
      FROM toys;
      BEGIN
    FOR toy_rec IN mytoy_cur
    LOOP
          DBMS_OUTPUT.PUT_LINE(
                             ‘玩具编号:'||' ' ||toy_rec.toyid||' '           
              ||‘玩具名称:'||' '||toy_rec.toyname||' '
              ||‘玩具单价:'||' '||toy_rec.toyprice);
     END LOOP;
      END;

游标变量的优点和限制
 游标变量的功能强大,可以简化数据处理。
 游标变量的优点有:
  可以从不同的 SELECT 语句中提取结果集
  可以作为过程的参数进行传递
  可以引用游标的所有属性
  可以进行赋值运算
 使用游标变量的限制:
  不能在程序包中声明游标变量
  FOR UPDATE 子句不能与游标变量一起使用
  不能使用比较运算符


第七期  子程序

本期目标:
 1.创建和使用子程序
 2.创建和使用程序包

子程序
 命名的PL/SQL块,编译并存储在数据库中
 子程序的各个部分:
  声明部分
  可执行部分
  异常处理部分(可选)
 子程序的分类:
  过程-执行某些操作
  函数-执行操作并返回值
 子程序的优点:
  模块化-将程序分解为逻辑模块
  可重用性-可以被任意数目的程序调用
  可维护性-简化维护操作
  安全性-通过设置权限,使数据更安全

过程
 创建过程的语法:
  CREATE [OR REPLACE] PROCEDURE
    [()]
  IS | AS
   
  BEGIN
   
  [EXCEPTION
    ]
  END;
 eg:
  CREATE OR REPLACE PROCEDURE
    find_emp( emp_no NUMBER)
  AS
    empname VARCHAR2(20);
  BEGIN
    SELECT ename INTO empname
    FROM emp WHERE empno = emp_no;
    DBMS_OUTPUT.PUT_LINE(' THE EMPLOYEE'S NAME IS ' || empname );
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('THE ID NOT FOUND');
  END find_emp;
 
 过程参数的三种模式:
  IN -默认的参数模式,用于接受调用程序的值
  OUT -用于向调用程序返回值
  IN OUT -用于接受调用程序的值,并向调用程序返回更新的值
 
 执行过程的语法:
  EXECUTE procedure_name(parameters_list);
 
 将过程的执行权限授予其他用户:
  GRANT EXECUTE ON procedure_name TO user_name;
 
 删除过程:
  DROP PROCEDURE procedure_name;


第八期  触发器和内置程序包

本期目标:
 1.理解和应用触发器
 2.了解内置程序包

触发器
 触发器是当特定事件出现时自动执行的存储过程
 特定事件可以是执行更新的DML语句和DDL语句
 触发器不能被显式调用
 触发器的功能:
  自动生成数据
  自定义复杂的安全权限
  提供审计和日志记录
  启用复杂的业务逻辑
 创建触发器的语法:
  CREATE [OR REPLACE] TRIGGER trigger_name
  AFTER | BEFORE | INSTEAD OF
  [INSERT] [[OR] UPDATE [OF column_list]]
  [[or] DELETE]
  ON table_or_view_name
  [REFERENCING {OLD [AS] old /NEW [AS] new}]
  [FOR EACH ROW]
  [WHEN (condition)]
  pl/sql_block;

触发器的组成部分
 触发器由三部分组成:
  触发器语句(事件)-定义激活触发器的DML事件和DDL事件
  触发器限制-执行触发器的条件,该条件必须为真才能激活触发器
  触发器操作(主体)-包含一些SQL语句和代码,它们在发出了触发器语句且触发限制的值为真时运行
 eg:
  CREATE OR REPLACE TRIGGER aiu_itemfile
    AFTER INSERT ON itemfile FOR EACH ROW
  BEGIN
    IF (:NEW.qty_hand = 0) THEN
      DBMS_OUTPUT.PUT_LINE('警告:已插入记录,但数量为零');
    ELSE
      DBMS_OUTPUT.PUT_LIEN('已插入记录');
    END IF;
  END;

启用、禁用和删除触发器
 启用和禁用触发器
  ALTER TRIGGER aiu_itemfile DISABLE;
  ALTER TRIGGER aiu_itemfile ENABLE;
 删除触发器
  DROP TRIGGER aiu_itemfile;

查看有关触发器的信息
 USER_TRIGGERS数据字典视图包含有关触发器的信息
  SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='EMP';
  SELECT TRIGGER_TYPE,TRIGGERING_EVENT,WHEN_CLAUSE FROM USER_TRIGGERS WHERE TRIGGER_NAME='BIU_EMP_DEPTNO';

内置程序包
 扩展数据库的功能
 为PL/SQL提供对SQL功能的访问
 用户SYS拥有所有程序包
 是公有同义词
 可以由任何用户访问

 一些内置程序包:
  STANDARD和DBMS_STANDARD -定义和扩展PL/SQL语言环境
  DBMS_LOB -提供对LOB数据类型进行操作的功能
  DBMS_OUTPUT -处理PL/SQL块和子程序输出调试信息
  DBMS_RANDOM -提供随机数生成器
  DBMS_SQL -允许用户使用动态SQL
  DBMS_XMLDOM -用DOM模型读写XML类型的数据
  DBMS_XMLPARSER - XML解析,处理XML文档内容和结构
  DBMS_XMLQUERY -提供将数据转换为XML类型的功能
  DBMS_XSLPROCESSOR -提供XSLT功能,转换XML文档
  UTL_FILE -用PL/SQL程序来读写操作系统文本文件

DBMS_OUTPUT
 显示PL/SQL块和子程序的调试信息
 eg:
  BEGIN
    DBMS_OUTPUT.PUT_LINE('打印三角形');
    FOR i IN 1..9 LOOP
      FOR j IN 1..i LOOP
        DBMS_OUTPUT.PUT('*');
      END LOOP for_j;
      DBMS_OUTPUT.NEW_LINE;
    END LOOP for_i;
  END;

DBMS_LOB & DBMS_XMLQUERY
 前者提供用于处理大型对象的过程和函数,后者用于将查询结果转换为XML格式
 eg:
  DECLARE
    result CLOB;
    xmlstr VARCHAR2(32767);
    line VARCHAR2(2000);
    line_no INTEGER := 1;
  BEGIN
    result := DBMS_XMLQUERY.getXML('SELECT empno,ename FROM employee');
    xmlstr := DBMS_LOB.SUBSTR(result, 32767);
    LOOP
      EXIT WHEN xmlstr IS NULL;
      line := SUBSTR(xmlstr, 1, INSTR(xmlstr, CHR(10))-1);
      DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
      xmlstr := SUBSTR(xmlstr, INSTR(xmlstr, CHR(10))+1);
      line_no := line_no + 1;
    END LOOP;
  END;

DBMS_RANDOM
 可用来生成随机整数
 eg:
  DECLARE
    l_num NUMBER;
    counter NUMBER;
  BEGIN
    counter := 1;
    WHILE counter <= 10
    LOOP
      l_num := DBMS_RANDOM.RANDOM;
      DBMS_OUTPUT.PUT_LINE(l_num);
      counter := counter + 1;
    END LOOP;
  END;

UTL_FILE
 UTL_FILE包用于读写操作系统文本文件
 操作文件的一般过程是打开、读或写、关闭
 UTL_FILE包指定文件路径依赖于 DIRECTORY 对象
 eg:
  SQL> CREATE DIRECTORY TEST_DIR AS 'C:\DEVELOP';
  SQL> GRANT READ,WRITE ON DIRECTORY TEST_DIR TO SCOTT;

  DECLARE
    input_file UTL_FILE.FILE_TYPE;
    input_buffer VARCHAR2(4000);
  BEGIN
    input_file := UTL_FILE.FOPEN('TEST_DIR', 'employees.xml', 'r');
    LOOP
      UTL_FILE.GET_LINE(input_file, input_buffer);
      DBMS_OUTPUT.PUT_LINE(input_buffer);
    END LOOP;
    UTL_FILE.FCLOSE(input.file);
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('-------------');
  END;


第九期  备份与恢复

本期目标:
 1. 了解数据库备份与恢复的基础知识
 2. 理解在Oracle环境中可能发生的故障类型
 3. 掌握导出和导入实用程序
 4. 了解数据库归档模式

备份与恢复简介
 备份是数据库中数据的副本,它可以保护数据在出现意外损失时最大限度的恢复
 Oracle数据库的备份包括以下两种类型:
  物理备份-是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份
  逻辑备份-是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份

故障类型
 导致数据库操作中止的故障包括甲种类型:
  语句故障-在执行SQL语句过程中发生和逻辑故障可导致语句故障。如果用户编写的SQL语句无效,就会发生逻辑故障
  用户进程故障-当用户程序出错而无法访问数据库时发生用户进程故障。导致用户进程故障的原因是异常断开连接或异常终止进程
  实例故障-当Oracle的数据库实例由于硬件或软件问题而无法继续运行时,就会发生实例故障
  介质故障-在数据库无法正确读取或写入某个数据库文件时,会发生介质故障

导入和导出实用程序
 导出和导入实用程序用于实施数据库的逻辑备份和恢复
 导出实用程序将数据库中的对象定义和数据备份到一个操作系统二进制文件中
 导入实用程序读取二进制导出文件并将对象和数据载入数据库中
 导出和导入实用程序的特点有:
  可以按时间保存表结构和数据
  允许导出指定的表,并重新导入到新的数据库中
  可以把数据库迁移到另外一台异构服务器上
  在两个不同版本的Oracle数据库之间传输数据
  在联机状态下进行备份和恢复
  可以重新组织表的存储结构,减少链接及磁盘碎片
 
 使用以下三种方法调用导出和导入实用程序:
  命令行参数-在命令行指定执行程序的参数和参数值
  交互提示符-以交互的方式提示用户逐个输入参数的值
  参数文件-允许用户将运行参数和参数值存储在参数文件中,以便重复使用参数
 
 导出和导入数据库对象的四种模式是:
  完全数据库-导出和导入整个数据库中的所有对象
  表-导出和导入一个或多个指定的表或表分区
  用户-导出和导入一个用户模式中的所有对象
  表空间-导出和导入一个或多个指定的表空间中的所有对象

导出实用程序
 导出实用程序有以下常用命令参数:
  USERID -确定执行导出实用程序的用户名和口令
  BUFFER -确定导出数据时所使用的缓冲区大小,其大小用字节表示
  FILE -指定导出的二进制文件名称,默认的扩展名是 .dmp
  FULL -指定是否以全部数据库方式导出,只有授权用户才可使用此参数
  OWNER -要导出的数据库用户列表
  HELP -指定是否显示导出表中的数据
  TABLES -按表方式导出时,指定需导出的表和分区的名称
  PARFILE -指定传递给导出实用程序的参数文件名
  TABLESPACES -按表空间方式导出时,指定要导出的表空间名
 eg:
  //按用户方式导出数据
  exp scott/tiger@accp file=scott_back owner=scott
  //按表方式导出数据
  exp scott/tiger@accp tables=(emp,dept) file=scott_back_tab
  //按表空间方式导出数据
  exp system/aptech@accp tablespaces=(users) file=tbs_users
  //使用参数文件导出数据
  exp system/aptech parfile='c:\parameters.txt'

导入实用程序
 导入实用程序有如下常用命令参数:
  USERID -指定执行导入的用户名和密码
  BUFFER -指定用来读取数据的缓冲区大小,以字节为单位
  COMMIT -指定是否在每个数组(其大小由BUFFER参数设置)插入后进行提交
  FILE -指定要导入的二进制文件名
  FROMUSER -指定要从导出转储文件中导入的用户模式
  TOUSER -指定要将对象导入的用户名。FROMUSER与TOUSER可以不同
  FULL -指定是否导入整个导出转储文件
  TABLES -指定要导入的表的列表
  ROWS -指定是否要导入表中的行
  PARFILE -指定传递给导入实用程序的参数文件名,此文件可以包含这里列出的所有参数
  IGNORE -导入时是否忽略遇到的错误,默认为N
  TABLESPACES -按表空间方式导入,列出要导入的表空间名
 eg:
  //将整个文件导入数据库
  imp accp/accp@accp file=item_back.dmp ignore=y full=y
  //将scott用户的表导入到martin用户
  imp system/aptech@accp file=scott_back fromuser=scott touser=martin tables=(emp,dept)
  //使用参数文件导入数据
  imp system/oracle parfile='c:\parameters.txt'

数据库归档方式
 Oracle数据库可以运行在两种归档方式:
  非归档日志方式
  归档日志方式
 非归档日志方式可以避免实例故障,但无法避免介质故障。在此方式下,数据库只能实施冷备份
 归档日志方式产生归档日志,用户可以使用归档日志完全恢复数据库

 非归档日志方式下数据库的工作原理:
  表空间脱机 --> 备份表空间 --> 恢复表空间 --> 表空间联机
 归档日志方式下数据库工作原理:
  日志文件1填满 --> 准备向日志文件2写入信息 --> 备份日志文件2 --> 清空日志文件2 --> 向日志文件2写入信息
 
配置归档日志方式
 配置数据库在归档日志方式下运行,包括以下三个步骤:
  确保数据库当前不处于归档方式 -->
  设置相关数据库初始化参数 -->
  在归档日志方式下启动数据库

自动归档和手动归档
 数据库的日志归档方式有两种:
  自动归档-对非活动日志文件进行自动归档
  手动归档-允许用户手动归档非活动日志文件的已填充组

获取归档日志信息
 可以通过数据字典视图查看归档日志信息
  V$ARCHIVE_DEST -显示当前所有归档日志存储位置及其状态
   SELECT DEST_ID,DEST_NAME,STATUS,DESTINATION FROM V$ARCHIVE_DEST WHERE STATUS='VALID';
  V$ARCHIVED_LOG -显示历史归档日志信息
   SELECT DEST_ID,NAME,ARCHIVED FROM V$ARCHIVED_LOG;

posted on 2008-12-17 16:00  karlen  阅读(309)  评论(0)    收藏  举报