Oracle基础小结

来源:互联网 发布:秦皇岛seo网络营销 编辑:程序博客网 时间:2024/06/05 06:10

Oracle基础小结

sql支持数据定义语言(DDL(create,alter,drop,truncate)),数据操纵语言(DML(grant,revoke)),事务控制语言(TCL(commit,savepoint,roolback)),数据控制语言(DCL)
以下分析函数
--rownumber为有序组中每一行返回一个唯一的值
select ename,job,deptno,sal,row_number() over (order by sal desc) as sal_rank from emp;
ENAME      JOB           DEPTNO        SAL   SAL_RANK
---------- --------- ---------- ---------- ----------
KING       PRESIDENT         10       5000          1
SCOTT      ANALYST           20       3000          2
FORD       ANALYST           20       3000          3
JONES      MANAGER           20       2975          4
BLAKE      MANAGER           30       2850          5
CLARK      MANAGER           10       2450          6
ALLEN      SALESMAN          30       1600          7
TURNER     SALESMAN          30       1500          8
MILLER     CLERK             10       1300          9
WARD       SALESMAN          30       1250         10
MARTIN     SALESMAN          30       1250         11

ENAME      JOB           DEPTNO        SAL   SAL_RANK
---------- --------- ---------- ---------- ----------
ADAMS      CLERK             20       1100         12
JAMES      CLERK             30        950         13
SMITH      CLERK             20        800         14
--rank函数计算一个值在一组中的排位,如果相同的话排位是相同的
select ename,sal,comm,deptno,rank() over(partition by deptno order by sal desc,comm) rank from
ENAME             SAL       COMM     DEPTNO       RANK
---------- ---------- ---------- ---------- ----------
KING             5000                    10          1
CLARK            2450                    10          2
MILLER           1300                    10          3
SCOTT            3000                    20          1
FORD             3000                    20          1
JONES            2975                    20          3
ADAMS            1100                    20          4
SMITH             800                    20          5
BLAKE            2850                    30          1
ALLEN            1600        300         30          2
TURNER           1500          0         30          3

ENAME             SAL       COMM     DEPTNO       RANK
---------- ---------- ---------- ---------- ----------
WARD             1250        500         30          4
MARTIN           1250       1400         30          5
JAMES             950                    30          6

14 rows selected.
--denserank计算一个行在一组有序行中的排位,排位以1开头的连续整数,值相等排位相同
  1* select d.name,e.ename,e.sal,dense_rank() over(partition by e.deptno order by e.sal desc) denser
SQL> select d.dname,e.ename,e.sal,dense_rank() over(partition by e.deptno order by e.sal desc) dense
rank from emp e,dept d where e.deptno=d.deptno;

DNAME          ENAME             SAL  DENSERANK
-------------- ---------- ---------- ----------
ACCOUNTING     KING             5000          1
ACCOUNTING     CLARK            2450          2
ACCOUNTING     MILLER           1300          3
RESEARCH       SCOTT            3000          1
RESEARCH       FORD             3000          1
RESEARCH       JONES            2975          2
RESEARCH       ADAMS            1100          3
RESEARCH       SMITH             800          4
SALES          BLAKE            2850          1
SALES          ALLEN            1600          2
SALES          TURNER           1500          3

DNAME          ENAME             SAL  DENSERANK
-------------- ---------- ---------- ----------
SALES          WARD             1250          4
SALES          MARTIN           1250          4
SALES          JAMES             950          5

锁定是数据库用来控制共享资源并发访问机制
锁优点:
一致性,完整性,并发性
锁有两种级别:行级锁、表级锁
行级锁只对用户正在访问的行进行锁定,是一种排他锁,防止其他事务修改此行,但是不会阻止此行的读取。
select * from emp where sal=950 for update of ename;
update emp set ename='zhangsan' where sal=950;
commit;

for update wait的优点:
防止无限期等待被锁定
允许在应用程序中对锁的等待时间进行更多的控制
对于交互式应用程序非常有用
select * from emp where ename='zhangsan' for update wait 5;

表级锁(保护表数据,在事务处理过程中,表级锁会限制对整个表的访问
lock table emp in share mode;
行共享(row share,rs)允许其他用户访问和锁定该表,但是禁止排他锁定整个表
行排他(row exclusive,rx)与行共享模式相同,禁止其他用户在此表使用共享锁
共享(share,s)允许用户查询表中的行,但是不允许插入更新或删除行。
共享行排他(share row exclusive,srx)
排他(exclusive,x)对表执行最大限制。

表分区的优点:
改善表的查询性能
表更容易管理
便于恢复和备份
提高数据的安全性
注意要分区的表不能具有long和long raw数据类型的列

oracle分区有4种
范围分区(根据表的某个列或一组列的值范围)
  create table sales(id varchar2(5),sales_date date not null,sales_cost number(10))
 partition by range(sales_cost)(partition p1 values less than(1000),partition p2 values less tha
00));
散列分区(通过在分区键值上执行一个散列函数来决定数据的物理位置,范围分区中连续的值在同一分区中而散列分区不一定)
SQL> create table employ(id number(4),name varchar2(15))
  2  partition by hash(id)(partition part1,partition part2);
复合分区(范围分区和散列分区的结合)
create table sales(id varchar2(5),sales_date date not null,sales_cost number(10))
partition by range (sales_date)
subpartition by hash(id)
subpartitions 2--注意关键字
(partition p1 values less than (date '2001-04-01'),
partition p2 values less than(date '2004-07-01'))
列表分区(允许用户明确地控制行到分区的映射)
 create table myemp(id number(4),name varchar(14),address varchar2(15),depart varchar2(10))
 partition by list (address)
 (partition noth values ('aa'),
 partition west values ('bb'))

查询分区内的数据
select * from sales partition (p2);

分区的操作
添加分区(开始或中间添加分区使用split partition)
alter table sales add partition p4 values less than (4000);
删除分区
alter table sales drop partition p4;
截断分区(删除表分区所有的纪录)
alter table sales truncate partition p3;
合并分区
alter table sales merge partitions p1,p2 into partition p2;
拆分分区
alter table sales split partition p3 at (date '2005-01-01') into(partition p31,partition p32);
分区重新命名
alter table sales rename partition p31 to p3;

数据库对象
同义词是数据库对象的一个别名,这些对象可以是表,视图,序列,过程,函数,程序包,甚至是其他同义词。
同义词用途:
简化sql语句
隐藏对象的所有者和名称
为分布式数据库的远程对象提供了位置透明性
提供对对象的公共访问
私有同义词(只能被当前模式的用户访问)
SQL> grant all on emp to username;

Grant succeeded.

SQL> conn username/pwd;
Connected.
SQL> create synonym emp for scott.emp;

Synonym created.

SQL> select * from emp;
公有同义词
create public synonym emp_syn for scott.emp;
删除同义词
drop synonym emp;
 
创建用户:
create user username identified by pwd default tablespace users Temporary TABLESPACE Temp
create user wudaovip identified by wudao default tablespace users Temporary TABLESPACE Temp
用户授权
grant connect,resource,dba to username;
提交
commit;

序列是用来生成唯一、连续的整数的数据库对象。
建立序列
SQL> create sequence sal_seq
  2  start with 500
  3  increment by 20
  4  maxvalue 10000
  5  nocycle
  6  cache 30;
修改序列(不能修改start with)
SQL> alter sequence sal_seq maxvalue 20000 cycle;
删除序列
SQL> drop sequence sal_seq;

视图以经过定制的方式显示包含在一个或多个表中的数据。视图可以视为“已存储的查询”,“虚拟表”
优点:
通过限制对表中的预定一组行和列的访问
视图隐藏了数据的复杂性。
视图简化了用户的命令
视图将应用程序与基表定义隔离开了
视图通过重命名列,从另一个角度提供数据。
简单视图可以更改基表,2个表组成的视图只能更改一个基本表
创建带错误的视图
 create force view ven as select * from bb;
使用DML语句在视图中有以下的限制
视图中使用DML语句只能修改一个基表
如果对纪录的修改违反了基表的约束条件,无法更新视图
如果创建视图包含连接运算符,disinct运算符,集合运算符,聚合运算符,聚合函数,和GROUP BY ,无法更新视图
如果创建的视图包含伪列或表达式,无法更新视图。

连接视图是在from自句中指定多个表或视图的视图。
内连接:
create or replace view ven as select vm.code,ve.name,om.date,om.state from master vm,order om where vm.code=om.code;
还可以写成 这样
create or replace view ven as select vm.code,ve.name,om.date,om.state from master vm inner join order om on vm.code=om.code;
外连接:
create or replace view ven as select vm.code,ve.name,om.date from master vm left outer join order order om on vm.code=om.code;

键保留表
在联接视图中,如果视图包含了 一个表主键,并且也是这个视图的主键,则这个键被保留,这个表称为键保留表。

视图中可以使用单行函数(由数字,字符,日期组成)、分组函数和表达式。使用函数和表达式时,应赋予一个别名。

索引(是与表关联的可选结构,执行对sql语句的执行速度)
create index sal_index on emp (sal);
重建索引
alter index sal_index rebuild;
索引在逻辑上和物理上都独立于关联表中的数据,在任何时候都可以创建或删除索引,而不会影响基表或其他索引
索引是独立的所以需要存储空间
唯一索引
oracle自动为表创建唯一索引
组合索引
组合索引是在表中的多个列上创建索引。最频繁访问的列放在前面
create index comp_index on emp (job,sal);
反向键索引
一种特殊类型的索引,在索引基于含有序数的列时非常有用。通常在连续增长的列上。
 create index date_index on emp (hiredate) reverse;
变为标准索引
alter index date_index rebuild noreverse;
位图索引
适用于低基数的列,也就是不同值数目比表的行数少的列。
create bitmap index bit_ind1 on order_detail (itemcode);
特点
对于大批的即席查询,可以减少响应时间
相比其他索引技术,占用空间明显减少
在配置较低的终端,也能有显著性能
不应当用于insert,update,delete频繁操作的表上。

 

基于函数的索引
create index vn_ind on vend (upper(vname));
cteate index exp_ind on itemfile(qty_hand*itemrate);
使用基于函数的索引
select * from vend where upper(vname)='SMALL';
索引组织表
索引组织表于普通表的不同之处在于,该表数据存储在与其相关联的索引中。对于表数据进行的修改只会导致对索引的更新。
索引组织表于在一个或多个列上建立的普通表相似,但是他无需为表和索引维护两个单独的存储空间。
SQL> create table mytable(id number(4) primary key,
  2  name varchar2(20))
  3  organization index;
必须有主键。

索引中的分区
局部分区索引
SQL> create table order_mast(
  2  orderno number(4),
  3  vname varchar2(14))
  4  partition by range(orderno)(
  5  partition p1 values less than (1000),
  6  partition p2 values less than (2000),
  7  partition p3 values less than (maxvalue));

Table created.

SQL> create index myind on order_mast (orderno) local;
全局分区索引
SQL>  create index glb_ind on order_mast(orderno) global
  2   partition by range(orderno)(
  3   partition i1 values less than (1500),
  4   partition i2 values less than (maxvalue));
不能在散列分区或子分区上建立全局分区索引

全局非分区索引
指的是在分区表上创建的全局索引,类似于非分区表上的索引,索引结构不会被分割。

pl/sql是一种块结构的语言,它将一组语句放在一个块中。
在pl/sql块中可以使用select,insert,update,delete等DML语句,事务控制语句(TCL)以及sql函数等。
不允许直接使用create,drop,alter等DDL语句,但是可以通过动态sql来执行
pl/sql块分为3个部分
声明部分:声明变量,游标,自定义异常
可执行部分:执行命令并操作在声明部分声明的变量和游标
异常处理部分:处理执行块时引发的异常。
pl/sql对大小写不敏感
pl/sql复合符号含义
:=赋值操作符
||连接操作符
--单行注释
/*,*/多行注释
<<,>>标签分割符
..范围操作符
**求幂操作符

声明变量(一条语句只能声明一个变量)
declare
code varchar(20):='jack';
还可以使用select..into..赋值
声明常量
declare total constant number:=20;

pl/sql数据类型及其用法
pl/sql的变量都具有一个指定存储格式、值的有效范围和约束条件的数据类型。
变量的类型可以是varchar2,integer,float,char,long,long raw,record,引用类型和lob类型等
pl/sql提供了四种内置的数据类型
标量数据类型(数字,字符,日期时间,布尔)
数字用于计算主要有number,binary_integer
字符(存储字符串或字符数据)char,raw(二进制数据或字节串),long和long raw,varchar2(string,varchar)
日期和时间数据类型(存储日期和时间)date,timestamp
布尔(存储逻辑值)boolean

lob类型(用于存储非结构化数据,包括文本,图形图象,视频剪辑和声音剪辑)
bfile(将大型二进制对象存储在操作系统文件中)
blob(将大型二进制对象存储在数据库中,支持事务)
clob(将大型字符数据存储在数据库中)
nclob(将大型nchar数据存储到数据库中)

属性类型(用于引用变量或数据库列的数据类型)
%type(引用变量或数据库列的数据类型来声明变量)
icode itemfile.itemcod%type
%rowtype(提供表示一行的记录类型,记录的类型可以从表中选择或由游标比去整行数据)
emp_rec emp%rowtype
优点:
不需要知道被引用的列或表的具体数据类型
如果更改了被引用对象的数据库定义,那么pl/sql运行时变量的数据类型也要更改。

控制结构
条件控制
if-then,if-then-else,if-then-ensif(ensif),case
--实例
set serveroutput on
declare
icode varchar2(4);
irate number;
begin
select itemcode,itemrate into icode,irate from itemfile where itemcode='1203';
if irate>200 then
update itemfile set itemrate=itemrate-200 where itemcod='1230';
else
update itemfile set itemrate=itemrate-50 where itemcod='1230';
end if;
dbms_output.put_line('itemcode'||''||'itemrate');
dbms_output.put_line(icode||''||irate);
end;
--实例二
SQL> set serveroutput on
SQL> begin
  2  case '&grade'--占位等待用户输入
  3  when 'a' then dbms_output.put_line('优异');
  4  when 'b' then dbms_output.put_line('youxiu');
  5  end case;
  6  end;
  7  /

循环控制
loop--end loop,while--loop--end loop,for--loop--end loop
实例一loop
SQL> set serveroutput on
SQL> begin
  2  loop
  3  if &marks >60 then
  4  dbms_output.put_line('tongguo');
  5  exit;(loop循环必须实验exit或exit when退出循环)
  6  end if;
  7  end loop;
  8  end;
  9  /
实例二
declare
mon number:=0;
dal number:=0;
begin
while mon<=4000
loop
mon:=dal*31;
dal:=dal+10;
dbms_output.put_line('ri'||dal);
end loop;
dbms_output.put_line('yue'||mon);
end;
/
实例三
SQL> set serveroutput on
SQL> begin
  2  for even in 1..25
  3  loop
  4  dbms_output.put_line(even*2);
  5  end loop;
  6  end;
  7  /


顺序控制
goto语句(无条件的将控制权转到指定的语句。标签使用<<>>标识符。在pl/sql内必须具有唯一的名称,标签后必须紧跟可执行的语句或pl/sql块。
goto语句不能跳转到if语句,case语句,loop语句或子块中
null语句,什么也不做只是将控制权转到下一条语句。

动态sql
一般在pl/sql中可以使用sql的dml语句和tcl语句,但是不能直接使用ddl语句,所以要使用动态的sql实现
实例一
SQL> declare
  2  sql_stmt varchar2(200);
  3  eid= number(4):=7566;
  4  emp_rec emp%rowtype;
  5  begin
  6  execute immediate 'create table bonus1(id,number,amt number)';
  7  sql_stmt:='select * from emp where empno=:id';
  8  execute immediate sql_stmt into emp_rec using eid;
  9  end;

错误处理:
预定义异常:程序违反了oracle规则或超越系统权限时,将隐式引发内部异常。
实例一:
declare
num varchar2(52);
begin
select job into num from emp;
exception
when too_many_rows then
dbms_output.put_line('cuowu');
end;
实例二:自定义异常
 declare
 myexception exception
 kind varchar2(20);
 begin
 kind:='&kind';
 if kind not in('aa','bb','cc')then
 raise myexception;
 else
 dbms_output.put_line(kind);
 end if;
 exception
 when myexception then
 dbms_output.put_line('wufashibie');
 end;
 /

游标(在构建pl/sql中,用来查询数据,获取记录集合的指针)
静态游标(显示游标,隐式游标)
隐式游标
pl/sql为所有的sql数据操纵语句(包括返回一行的select)隐式声明游标,此类游标用户不能直接控制。
隐式游标属性包括:
%found(只有在dml语句影响一行或多行时,%found属性才返回true)
%notfound(%found相反)
%rowcount(返回dml语句影响的行数,如果dml语句没有影响任何行,则返回0)
 set serveroutput on
 begin
 update emp set sal=1000 where ename='zhangsan';
 dbms_output.put_line('xinle'||sql%rowcount||'hang');
 end;
 /
%isopen(返回游标是否已经打开。隐式游标的%isopen属性始终为false)

显示游标(用户显示声明的游标)
操作步骤
声明游标cursor cursor_name
打开游标open cursour_name
从游标中获取记录 fetch cursour_name
关闭游标close cursour_name
实例(带参数的显示游标)
declare
dept_code emp.deptno%type;
emp_code emp.empno%type;
emp_name emp.ename%type;
cursor emp_cur(deptparam number) is--声明游标
select empno,ename from emp where deptno=deptparam;
begin
dept_code:='&bianhao';
open emp_cur(dept_code);--打开游标
loop
fetch emp_cur into emp_code,emp_name;--获取记录
exit when emp_cur%notfound;
dbms_output.put_line(emp_name);
end loop;
close emp_cur;--关闭游标
end;
显示游标的特殊用法
使用显示游标删除或更新
使用游标时,如果处理过程中需要删除或更新行,在定义游标时必须使用select..for
update语句,在执行delete和update时使用where current of+游标名字

循环游标
循环游标隐式打开游标,自动从活动集获取行,然后在处理完所有行关闭游标
declare
cursor cur is
select empno,ename from emp;
begin
for toy_rec in cur
loop
dbms_output.put_line(toy_rec.empno,toy_rec.ename);
end loop;
end;


ref游标(必须声明游标变量)
隐式游标和显示游标都是静态定义的,当用户使用他们的时候查询语句已经确定。如果需要在运行的时候确定执行何种查询,可以使用ref游标和游标变量
声明游标变量的语法
type ref_cursor_name is ref cursor
打开游标变量
open cursor_name for select_statement;
游标变量的优点
可以用于从不同的结果集中提取记录
可以作为过程的参数进行传递
可以引用游标的所有属性
可以用于赋值运算

限制
不允许在程序包中声明游标变量
for update子句不能与游标变量一起使用
另一台服务器上的远程子过程不能接受游标变量参数值
不能将null赋值给游标变量
游标变量不能使用比较运算
数据库的列不能存储游标变量

子程序
是已经命名的pl/sql块,他们存储在数据库中,可以为他们指定参数,可以从任何数据库客户端和应用程序中调用他们。
命名的pl/sql程序包括存储过程和函数,程序包是存储过程和函数的集合。
创建过程
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('name'||empname);
 exception
 when no_data_found then
 dbms_output.put_line('nobody');
 end find_emp;
 /
调用过程
 execute find_emp(7900);

过程的参数模式(in(默认模式),out,in out)
in模式是默认模式如果没有指定参数模式,该参数为in参数
对于out和in out从那书,必须明确指定out和in out
在返回到调用环境之前,必须给out或in out参数赋值
可以在参数列表中为in参数赋值,不能为out,in out参数赋值。

将过程的执行全授予其他用户
grant execute on find_emp to stone;
删除过程
drop procedure fine_emp;

函数(必须由返回值)
函数只能带in参数
形式参数必须使用数据库类型不能使用pl/sql类型
函数的返回类型也必须是数据库类型
函数不能单独执行必须通过sql语句或pl/sql语句来调用

创建函数
SQL> create or replace function hello
  2  return varchar2 is
  3  begin
  4  return 'hello,word';
  5  end;
  6  /
调用函数
 select hello from dual;
函数授权
grant execute on hello to stone;
删除函数
drop function hello;

使用函数的限制
从select语句调用的任何函数均不能修改数据库表
当远程执行或并行执行时,函数不得读取或写入程序包中变量的值
如果函数调用执行update的存储过程,则该函数不能在sql语句内使用。

函数与过程的区别
函数
作为表达式的一部分调用
必须包含return语句
必须返回单个值
必须至少包含一条return语句

过程
作为pl/sql语句执行
在规范中不包含return子句
不返回任何值
可以包含return语句,但是与函数不同,它不能用于返回值。

自主事务处理(pragma autonomous_transaction包括在过程的声明部分)
不依赖于主事务的 处理状态或最终配置
自主事务处理提交或回退时,不影响主事务处理的结果
自主事务处理一旦提交,该自主事务处理结果的变化对于其他事务处理时可见的。
自主事务处理可以启动其他自主事务处理。

程序包是一种数据库对象,他是对相关pl/sql类型、子程序、游标、异常、变量、和常量的封装。
包含两部分内容:程序包规范和程序包主体。
程序包规范可以声明类型、变量、常量、异常、游标和子程序。
程序包主体用于实现在程序包中定义的游标、子程序。
创建包规范
SQL> create or replace package pack_me is
  2  procedure order_proc(orno varchar2);
  3  function order_fun(ornos varchar2) return varchar2;
  4  end pack_me;
  5  /
实现程序包主体
 create or replace package body pack_me as
 procedure order_proc(orno varchar2) is
 stat char(1);
 begin
 select ostatus into stat from order_master where orderno=orno
 调用程序包
excute pack_me.order_proc('001');

程序包优点
模块化
更轻松的应用程序设计
信息隐藏
新增功能
性能更加

通过查询user_objects数据字典视图,可以获得有关创建的子程序和程序包信息。
通过查询user_source数据字典可以获得存储子程序的文本,还可以显示子程序的代码。

触发器和内置程序包
触发器是当特定事件出现是自动执行的代码块。触发器与过程的区别在于:过程是由用户或应用程序显示调用
触发器是不能被直接调用的。
触发器的功能:
自动生成数据
强制复杂完整性约束条件
自定义复杂的安全权限
提供审计和日记记录
启用复杂的业务逻辑。

创建触发器
SQL> create or replace trigger emp_deptno
  2  before insert or update of deptno--before,after指在事件之前还是之后激活触发器
  3  on emp--insert update delete指定构成触发器的数据操纵类型,on 在那个表或视图上建立触发器
  4  for each row--表示语句级别触发器
  5  when (new.deptno<>40)--when执行触发器的条件
  6  begin--一个标准的pl/sql语句块
  7  :new.comm:=0;
  8  end;
  9  /
触发器的组成部分
触发器语句第2-4行
触发器限制第一个布尔的表达式,该值真时才激活触发器when语句
触发器的操作6-8行

触发器的类型
行级触发器
对dml语句影响的每一个行执行一次。在create trigger命令中指定for each row
create or replace trigger test_tr
before insert or update of id--在插入之前就触发了。
on test
for each row
begin
if inserting then
select seq_test.nextval into :new.id from dual;
else
dbms_output.put_line('aa');
end if;
end;

语句级触发器
对每个dml语句执行一次。语句级触发器不常用于与数据相关的活动,通常用于强制实施在表上执行额外的安全性措施。
语句级触发器时create trigger命令默认类型
create or replace trigger ordmast
after insert or update or delete
on order
begin
  if updating then
    dbms_output.put_line('更新');
   elsif deleting then
   dbms_output.put_line('删除‘);
   elsif inserting then
   dbms_output.put_line('插入');
end if;
end;

instead of触发器
在视图上而不是在表上定义的触发器
只能在行级使用,而不能在语句级使用
只能用于表,而不能用于视图

模式触发器
可以在模式级的操作上建立触发器,如create,alter,drop,grant,revoke和truncate等ddl语句。
模式触发器主要功能时阻止ddl操作以及发生ddl操作时提供额外的安全监控。
当在表、视图、过程、函数、索引、程序包、序列和同义词等模式对象上执行ddl语句会激活触发器。

数据库级触发器
可以在数据库事件上创立触发器,包括启动、关闭、服务器错误、登陆和注销等。

启用和禁用触发器
alter trigger trigger_name disable;
alter trigger trigger_name enable;

查看触发器信息
desc user_triggers;

内置程序包
dbms_output(enable,disable,put,put_line,new_line)
显示pl/sql块和子程序的输出结果,便于测试和调试
dbms_lob(append,copy,erase,getlength,instr,read,substr,write)
处理大对象的过程和函数
dbms_xmlquery
把查询结果转换为xml格式
dbms_random
生成随机数
url_fiel
读写操作系统文本文件

备份与恢复
备份是对数据库的复制,对于oracle备份分为两种
物理备份对数据的操作系统的物理文件的备份
逻辑备份对数据库逻辑组件(如表和存储过程等数据库对象)的备份。
oracle提供了导入导出实用程序来实现数据库的逻辑备份。
导出实用程序将数据库中的数据备份成一个二进制文件,即导出转储文件
导入和导出可以通过命令行参数、交互提示符和参数文件等方式调用
导入和导出都提供4中方式的操作:表方式、用户方式、表空间方式和全部数据库方式。
数据库可以在两种方式下工作:非归档日志方式和归档日志方式。

故障的类型:
语句故障(在执行sql语句过程汇总发生的逻辑故障可导致语句故障)
坏数据类型
权限不足

用户进程故障(当用户程序出错而无法访问oracle数据库时发生)

实例故障(当oracle的数据库实例由于硬件或软件的问题无法运行时发生)

介质故障(当数据库文件、文件的部分或磁盘不能读或不能写时出现的故障)