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的数据库实例由于硬件或软件的问题无法运行时发生)
介质故障(当数据库文件、文件的部分或磁盘不能读或不能写时出现的故障)
Oracle基础小结
最新推荐文章于 2024-09-29 13:56:32 发布