我们拒绝平庸,拒绝随波逐流,拒绝墨守成规,让梦想不再流浪。

Oracle 从入门到精通 续

上一篇 / 下一篇  2014-05-29 10:53:54 / 个人分类:甲骨文


dS?K.hd~R}P!b2m0
0fl5_2{%qo/mL9f~A024、管理用户51Testing软件测试网]p2Al}t
1. 用户:
4g } d_mcD0操作系统权限
D$f@4Mc!ztx0用户口令
u8ZQ3s)r,Uvn H\0用户状态:锁定、未锁定51Testing软件测试网l*M2f-XWX!?9]!t
默认表空间(创建时设置)可选位置,不一定能放东西。51Testing软件测试网Dt~(a6D(O7{)W
临时表空间51Testing软件测试网A9] r s ytt&C
表空间配额(永久类型表空间才有)
b,WF"v-e y*Qs0如果用户创建对象的时候只是指定了默认表空间而不指定表空间配额的话,对象是不能51Testing软件测试网V w*]JT:N iox6g
被创建的。51Testing软件测试网k^Ns rZ!A
2.数据库的方案:51Testing软件测试网8swdq6ueqi
是命名的对象集合;
0m}_0w,H,E0资源来自网络,仅供学习Oracle 从入门到精通
5y oT8q6O q2h a0第 74 页,共 106 页
^ou6_GJpu.Z0一个用户被创建,方案也同时被创建;
p*@*y4]MBE0一个用户只能用于一个方案关联;51Testing软件测试网1`y,zQ!IY
用户名经常和方案交替使用;
q ^-z a,~ x|'@}p*qBc03.创建用户的步骤:51Testing软件测试网3]_5I4iK B{z|V@ N
确定用户用于存放对象的表空间;51Testing软件测试网SM,Vn kJ q~,\|
确定每个表空间的配额;
i,K2]x[ o4h0指定默认表空间和临时表空间;51Testing软件测试网_b ]0GPL6k7~} a H
创建用户;51Testing软件测试网!_9W1mM7X6|
为用户分配权限和角色;51Testing软件测试网#kkZw'M)PV`
4.创建一个新的用户:数据库认证
.Df)XQPp0create user user_name identified by password
)k6R[kz0DEFAULT tablespace space_name
h3j#IhZ U `/p/f0temporary tablespace temp_table_name51Testing软件测试网yM,W.O r MCy
quota nM on data
{?`l0N2hxs0quota nM on users51Testing软件测试网6B)w8m5iH9P4N'u
quota nM on index
h(s?F1gp6|8J0.....
n*jb9q2]1i$Gh0password expire;
5rh#k } X05.改变用户的表空间配额:
V"Xx-N,Qo9P0在下列情况下需要修改:
0~;G:h;~8R.m%U0用户的表异常增长;
,\2Tl-^^eg0应用被增强并需要更多的表和索引;51Testing软件测试网$WFo!\/u
对象被重组并被放在不同的表空间上;51Testing软件测试网H]7DYS#\9L
ALTER USER user_name quota nM on user_name;
!kO C I X;G)fZn0ALTER USER user_name quota 0 on user_name;
;_S%bs$q7S'l A0为0:51Testing软件测试网 gZ+As0M
不能再使用空间了;
5G1h)t;WrR5]Pe0原有空间可以使用;51Testing软件测试网_%]4Cp ke_
6.删除用户:
#y+To$B8H6E XW^1d$B0drop user user_name cascade;
w2atiC#i@.nW3FD0删除方案中包含的所有对象;51Testing软件测试网Uu,S#\j^ f
正在连接服务器的用户不能删除;51Testing软件测试网BrEoc5{5_
7.查看:
j4ZWniWR-d[8V0dba_users dba_ts_quotas
f!I |1E$MF025、管理权限51Testing软件测试网!Y ]@9[t&F:H8t&I
start restrict(启动到限制模式)
;QM/@%YQ4u:m0unlimited tablespace 无限空间配额
a2l}Bg9e6L_0资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网o)I)toK
第 75 页,共 106 页51Testing软件测试网fo7?+G"cA
只能直接授予,不能传递授予
n"Qk#BN*} Q+VK01. 两种用户权限:
?:w4s|~)P3]0系统:使用户可以在数据库中执行特定的任务;
%c:qn3Ac,P[4C0对象:使用户可以操作访问特定的对象;
X z9F4e K(\_ r02.系统权限:
;Nw+R"RlbZ0在权限中的ANY 关键字表示用户在所有方案中都有权限51Testing软件测试网0\NI7i1}8]P
GRANT 将权限授予一个用户或一组用户
8l3`L+ad Y4Y0REVOKE 将权限从用户身上移走51Testing软件测试网E5y6D@)Us {\
3.授予系统权限:
.zc I_'rQsm!M9o0grant priv_list to users with admin option;不及联删除51Testing软件测试网1P"|6Z2A:f&hr
4.授予对象权限:51Testing软件测试网Io-]8IX9V[
grant priv_list to users with grant option;及联删除51Testing软件测试网&Fd7pARy
sysoper51Testing软件测试网 ^EhF,FU
startup51Testing软件测试网J J^c{+MSA/Np
shutdown51Testing软件测试网iC;ust0{1R D*\
alter database open | mount 备份控制文件
Jp0f4F:X f0alter datadase backup controlfile to recover database 恢复数据库51Testing软件测试网[vK'aY[
alter database archivelog51Testing软件测试网qgbp;e#F
restricted session51Testing软件测试网O+v[oO4z{
sysdba
}A4u-eSG4M+R0sysoper privileges with admin option
1dee6F/a%~Z0create datadase51Testing软件测试网~5X#}Hs
alter tablespace begin/end backup51Testing软件测试网5Pv XOM J
restricted session51Testing软件测试网 Xu'o2B4Q-_ F
recover database until
jC7xu?6rZI0O7_dictionary_accessibility 参数:
_9C {,] NNY0控制SYSTEM 权限的限制;51Testing软件测试网^EQMi-w9j
如果设置为TRUE,可以访问SYS 方案中的对象;51Testing软件测试网n~3k4ASZw}&]5p,~C
默认问FALSE:确保能访问其他方案的用户不能访问SYS 方案中的对象;51Testing软件测试网:lM7SdV2A`y$t*z
5.移除系统权限:
I#c^2u"n&u0使用 REVOKE 命令从用户上去除系统权限;
&~.X%x^v+s0具有 ADMIN OPTION 选项的用户可以移除系统权限;51Testing软件测试网Ull%U_+B)Uu%C]
只有用 GRANT 命令授予的权限可以被移除;
],x&Sbq.v0revoke create table from emi;51Testing软件测试网x%vC9@[k
6.对象权限:
be8g7Wvx0VIEW 没有 ALTER 权限;51Testing软件测试网(aR1oBkDp,}S
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网"g$^7WvI(q-qzV%[
第 76 页,共 106 页
[&yBq@6GJC2_i07.移除对象权限:51Testing软件测试网uw'P(QX Fo'D?$IT7_
移除对象权限的用户必须是要移除对象权限的对象的拥有者;51Testing软件测试网:]?ET9? qv5w{$F7l d
revoke select on owner.object from user_name;
5`8@Y~#O08.查看:51Testing软件测试网&}(V+`)?&N mL
SESSION_PRIVS 当前会话拥有的通过角色授予的权限信息;51Testing软件测试网 aQeA7A
DBA_SYS_PRIVS 关于被授予用户或角色的系统权限信息;
-rKL5E:NK8|:n4Znc0dba_tab_privs
#t H&?.I,v(^0dba_col_privs51Testing软件测试网&K TK*w$I+J$k Q S3u
26、管理角色51Testing软件测试网2n$DK[#~Ai"P;a
􀂋 角色的好处:51Testing软件测试网] ZvPSL;e&P8a
简化了权限的管理51Testing软件测试网@ V O sL*Pg
实现了动态权限管理
RK Q{4@0可以选择可用的权限51Testing软件测试网 u*E(RWAtzv@gD
􀂋 管理过程:51Testing软件测试网Lx [b'}
1.创建角色:51Testing软件测试网7p3tv Dz1XH
CREATE ROLE role_name;
l4p4z(y|j7AE$G0CREATE ROLE role_name IDENTIFIED BY password;51Testing软件测试网 rf Ak R[_|@
创建的角色不属于任何一个用户;
v%QNS,eB9I02.赋予角色权限:51Testing软件测试网N_;U|/R o@R
GRANT priv_list TO role_name;
&f`!_2X4aJJ S C03.将角色赋予用户;51Testing软件测试网OW*tahH$o O
grant role to user with admin option;51Testing软件测试网)e)~J/{`9clBk(I
grant role_name1 to role_name2; 将角色赋予角色
2Q:D[y#U&o1y}04.设置用户的默认角色在需要的时候启用或禁用角色;51Testing软件测试网)h$tCy:o?@N#A7^
一个用户可以被分配许多角色
%m-es%w,J;B(H0一个用户可以被指定默认角色51Testing软件测试网.TH.z a$dDf
可以限制用户的默认角色51Testing软件测试网 Z^n,C&zA
ALTER USER user_name DEFAULT ROLE role_name1,role_name2;51Testing软件测试网y3I DJ Da d?9`7^
ALTER USER user_name DEFAULT ROLE all;51Testing软件测试网*ME3jf#EY?3h*H3J
ALTER USER user_name DEFAULT ROLE all except role_name;除了这个角色其他的都授
9q$v1cAcW)E5zv5J0
[t)?W7d0ALTER USER user_name DEFAULT ROLE none;51Testing软件测试网EU9TR dn$S
启用和禁用:
f\ O'd)k Q?s T0禁用角色将从一个用户身上暂时移走角色;51Testing软件测试网5]/N\f[9PG,@f
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网4p)N1Z `b~
第 77 页,共 106 页51Testing软件测试网l!w}s Dh
默认角色自动启用;51Testing软件测试网j*L9_E]qF4V g
启用角色的时候可能需要口令;
m~4{eman/u0启用角色暂时将角色授予用户;51Testing软件测试网fm!U(B4h{p jXMN
set role role_name;51Testing软件测试网'Lr$eq.h
set role all except role_name;51Testing软件测试网!H T0_pc
set role all;
A-T.P#q7@.GP0set role role_name1 identified by password,role_name2,role_name3;51Testing软件测试网P.Y#]'zk T-J|!c\)y
5.移除角色;
TVNXK+h z%u#M8N0从用户上移除角色需要 ADMIN OPTION 或者 GRANT ANY ROLE 权限;
7q a0HV1h'Q0revoke role_name from user_name;51Testing软件测试网}(p:Zy~f8y
6.删除角色;51Testing软件测试网 B5ec0g2Q4to[3?,N/\r c
从所有被授予的用户和角色上移除角色
#YDs(d6S0从数据库中移除;51Testing软件测试网 T O)DK1l
需要 ADMIN 或者 DROP ANY ROLE 权限;51Testing软件测试网@l D+[ Cp7P c
DROP role role_name;51Testing软件测试网\1A3z3@w!n J
7.预定义角色:
;L${P6ctx0connect,resource,dba 为了满足向后兼容性而保留51Testing软件测试网7V$p8K!n0q nkm/b
连接 资源 管理员51Testing软件测试网+wEc+k se Vz-o^
当授予resource 角色给用户的时候,数据库自动把unlimited tablespace 这个系统权限授
E9h'A$ni-P0予用户;
)uwYPo)A5R!Z]X o0exp_full_database 导出数据库权限
/A&U5xbpz$_0imp_full_database 导入数据库权限51Testing软件测试网Ew0ih EG3t.B\\
delete_catalog_role 在数据字典上的删除权限51Testing软件测试网G?H HO P
execute_catalog_role 在数据字典包上的execute 权限 ?
[gCy8Lhx0y0select_catalog_role 在数据字典上的查询权限
'fIfF wm*ZF08.查看:
;YM/Sm*Y M@0session_roles 查看当先会话可用的角色;51Testing软件测试网2](MG)A1v%}jw+i
dba_roles 所有存在于数据库的角色51Testing软件测试网g#q_h1`v m
dba_role_privs 授予用户或角色的角色
%?BYX@ n^b8ek;l0role_rol_privs 授予角色的角色51Testing软件测试网){{O5g B
dba_sys_privs 授予用户和角色的系统权限51Testing软件测试网ah4`!_8cvm@U
role_sys_privs 授予角色的系统权限
(D5[z0f.M5b4k-i0role_tab_privs 授予角色的对象权限51Testing软件测试网$Az*G7bhE
高权限身份用户的权限跟角色无关,它是靠身份得到权限的;
V4}(_0ko r:q-S(D0带口令的角色51Testing软件测试网EiU+\2^ _@
27、使用全球化支持
]7m1o"Wk,v$EKS1Q;~ wX0􀂋 全球化支持特性:
}#G { S3_CX'e0资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网%s Tx p0dz
第 78 页,共 106 页51Testing软件测试网FO!hxro_
语言支持51Testing软件测试网#E0` p2^t `rp
区域支持:地区支持,对不同地区的特定规则的支持
%P-Z5W.R;^0D8e-n0字符集支持51Testing软件测试网kS)ij6PI
语言排序
&R6Q:L-FN8J8iVA0信息支持51Testing软件测试网OC~i SW
日期和时间格式
{eb&B8?#l/n0数字格式
&l%p;tVj6@-N }0货币格式
cY5_~!F0􀂋 不同类型的编码方案:
QM.PV5G `0单字节字符集:
0v~ h#ymQ07-bit 8-bit
KK Sg K4Z;q0变长多字节字符集51Testing软件测试网!r ?7LY6qIp
定长多字节字符集51Testing软件测试网 KlV+j4sh Wx
Unicode(AL32UTF8,AL16UTF16,UTF8)51Testing软件测试网nfI;L9F.c9j:W:p^\A i
全球统一字符集:国际标准组织,能兼容大多数国家的字符集。51Testing软件测试网/\T2^b2C6Q(S _h
􀂋 数据库字符集:VARCHAR VARCHAR2 CHAR
*o-b"i,yU`.m0􀂋 国家字符集: NVARCHAR、NVARCHAR2、NCHAR
(J%y e|%e0􀂋 设置服务器基于语言的行为:51Testing软件测试网$qCRh z{L
基于数据库服务器设置
*kRC0jQ1RBAJ0NLS_LANGUAGE SPECIFIES51Testing软件测试网,X9N:QFvY4j Mlp'k
信息的显示语言51Testing软件测试网`b3P*QM n/Oj
天和月份的名称
J;dCdxC/g1^^'V"K0A.D,B.C,A.M,P.M的符号
q6I6|2T!UDm7q p r~2O`0默认的排序方式(二进制)51Testing软件测试网U Jjg4nL!KX
NLS_TERRITORY SPECIFIES
Nd0ej ]jE028、基本的ORA 网络服务器端配置
.wo7e Z@1r O/Gj m0􀂋 连接字符串:HOST:1521:SID
[S:yrxQR(~a0􀂋 监听器:conn hr/hr@服务命名
"H,l9rk"tl V!A0􀂋 服务命名:连接字符串的命名51Testing软件测试网v/~`5XM,xv_
􀂋 服务端: 配置监听器 listener.ora51Testing软件测试网L*k\d2o FZ)u}
􀂋 客户端: 1.tnsnames.ora 命名方法选择的配置文件(用什么方法来解析连接字符串)51Testing软件测试网#jU yT J` a2`
2.sqlnet.ora51Testing软件测试网yso/nXA
􀂋 监听进程:51Testing软件测试网'i)dH&L3ef tM
特点:监听多种网络协议;
3\-hfe~D2j0单个监听器可以监听多个数据库的连接;
:N,m K W \9i0多个监听器可以监听单个数据库;51Testing软件测试网c2`,o Q$f%?9MJ
监听器是有名称的,在同一台主机上的监听器不能重名;
ijwq n/F0不管有几个监听器,都只有一个监听文件存储它们的内容。51Testing软件测试网sx,z/iz2@
􀂋 配置监听器:51Testing软件测试网b8i1O#j5u!{-~ n;b
1.静态配置:
!S;w'~ O*G6~5K0由于8I 以前的版本;51Testing软件测试网 E2[vm;{4tN|
需要配置listener.ora;51Testing软件测试网c Fc$MvN
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网9f2QX&sP'Gz.r ANS
第 79 页,共 106 页51Testing软件测试网%RZs n vx~%q$|
使用OEM 连接数据库必须使用静态配置;51Testing软件测试网#J5J_ JQayA
listener.ora 的默认设置:
d]"u/is/aw0listener name listener51Testing软件测试网j6D2P,[] T)y
port 152151Testing软件测试网2N5jx3A$qL3d
pro*—*51Testing软件测试网o^} ^ s)A:E e
2.动态的服务注册:
dkR*`W7B}8i0不需要配置listener.ora 文件
B7N!w+X'oxr(}0Z U$fa0监听器依赖于PMON 进程
?6y)c(jQ}0􀂋 监听器处理连接的方法:
:@+[![~8x|-y{h q ^?01.传递会话:(专用会话)
4E b X1E;z6C$J%~0会话请求到监听器51Testing软件测试网&Y t/BF(sf%y&ur
监听器判断如果没有问题,监听器通知数据库51Testing软件测试网&WfT {2C Z0\$`
2.重定位会话:(多线程服务器:共享服务器)51Testing软件测试网t*K7u5p5j| YPoG
预先生成调度器进程和服务进程放到监听器中
?)XM0C,_+SJ3s C`Sy\0连接建立的时候服务进程才启用
F"po QP+p!x9K0􀂋 服务名:是数据库对外的名称。
d&[M9Et0􀂋 主机名称和 IP 地址会影响监听器。51Testing软件测试网i)tXOW"P4r1R6`1{
􀂋 共享服务器:共享连接/专用连接51Testing软件测试网rY5_ g.y"o
􀂋 专用服务器:专用连接
~NEwK0􀂋 故障解决方法:
E"E9sn:S X01. 检查物理连接 PING51Testing软件测试网He({:[^-}9{T
2. 服务器端做本地连接51Testing软件测试网K4Z)XD:m5g D
3. lsnrctl status 检测监听器配置运行是否正常
zHr|&f~2L04. 客户端执行 TNSPING (命令:TNSPING +主机字符串)服务器名,检测服务器命名是51Testing软件测试网-~@'?3sg5|L.Q
否能连通
*?c*x3Ze F*p05. 检测 TNSNAMES.ORA 配置是否正常。
.x"X!X9e0J\:c T8Jj0三、PL/SQL
,BE EE"SW&]#}0pl/sql program language 是能够进行一定程度控制的程序语句。将SQL 语句嵌入到ORA 程序
.t8if?/?6U;}4D0语句中。
E h&E8wT8v0pl/sql developer4.1 pl/sql 开发工具51Testing软件测试网GdzR+wCS5Ro'T\
PRO*C ORA 提供的C 语言的编辑器51Testing软件测试网k3kn'B8~;Kb
SQLJ ORA 提供的JAVA 的编辑器51Testing软件测试网2B:Y&`A q`
Declaring Variables
r'h2Aw%\0􀂋 pl/sql 的存储程序单元:命名的pl/sql 块,作为数据对象存储在数据字典中。
nh,r5jx fA0􀂋 匿名的存储程序单元:临时的 pl/sql 语句,只对当前有效。
,N-B:q] ay B/H0􀂋 存储过程:一定执行某个操作,意味着数据或数据对象的改变。
VSLj6G)XW'H0􀂋 函数:做计算,不能包含任何的数据操作,只能出现 SELECT 语句。51Testing软件测试网+_%f'Fu q/P
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网#G }(We&L9k
第 80 页,共 106 页
-VuF!V_I;A^0􀂋 包:逻辑上相关的一组存储过程和函数的集合体。
4~4T){ m `0􀂋 触发器:当事件发生,就会触发,仍然是用 pl/sql 语句。51Testing软件测试网 Rd!K.?8j7{6_F
􀂋 结构:51Testing软件测试网qR1r;d"KXr
1.DECLARE(可选)
q5V5S O Nlo b0定义标识符,标识符:变量,常量,游标
q y%D+N%~%e.s02.BEGIN:开始执行主体(必须)51Testing软件测试网 n6O4YmZ~z0m k
SQL 语句
KVu)lw`0PL/SQL 语句
x(Er%v5d8Cu9G03.EXCEPTION(可选)
r8}][ b/^e(W0异常处理51Testing软件测试网I M/va9Dob8T:\/b
4.END:结束执行主体(必须)51Testing软件测试网(SF!ysp by1D4S?
􀂋 程序头定义:51Testing软件测试网$r+yD+Q!M
1. 匿名块:
0`R:[r6|b0[declare]
1F'_df(w nI0begin51Testing软件测试网5A1?AI*Wf:t.l
statements
H*Yaa/Co0....51Testing软件测试网+q5dg2[qe6_'YR
[exception]
EDjH!G^0fT;fU0end;
7[6`L;Zv_k02. 存储过程:51Testing软件测试网!g.IQe G1]Q
PROCEDURE name
,Gn:oj9p0ad*| S7p-`P0IS
qSr/e7U3xu5ID A0begin
iv o Z4W5xSK0statements51Testing软件测试网&mj Mz1_6Wl }a
....
h:Ur"f c f0w0[exception]
p$UV#v9i p0end;51Testing软件测试网}+@Y,GY
3. 函数:
N!|K jzH0FUNCTION name51Testing软件测试网!~7mnz A8w
RETURN data_type
1XQO9D Si Q3Y0IS51Testing软件测试网!?B#pUqv%p
begin
1w(F#S P4eH%b{0statements51Testing软件测试网7qW(FT.j-z"W2wK
RETURN value
&x&p&x~ X'w0....
b)RGe*Pv0[exception]
T2Xt$u@o!V#I x0end;
8K!q$xF\v5F @\9l01、创建PL/SQL 语句的过程:51Testing软件测试网 s#lM@2X2B
选择开发环境51Testing软件测试网o#\.k6^5S\
写程序51Testing软件测试网VWm*j$az~o!m
编辑(语句)
6JX3] |M0编辑(逻辑)51Testing软件测试网c$aq_$V`"pYr
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网A-{}7E(hr`+M2}
第 81 页,共 106 页
EH.D(Jk6Dl0执行
b w F'c9?7F2u0􀂋 变量类型:
3]W"w%cT'Ew5s,U3s5T0单值变量(Scalar)51Testing软件测试网7XuZ!G rvWfW j
BOOLEAN :true, false, null.
2p[:@k(BI m0组合变量
"M wh?-W C0大对象
7`0E'r\f0参照变量51Testing软件测试网Q1JKS_%pkB+]f
􀂋 输出变量值:51Testing软件测试网TA7vI ]p*@ l,F1sF
1.建表输出;2.使用包输出;51Testing软件测试网N!q2Mx|0X+G6gp4m
􀂋 可以使用替换变量或绑定变量。
P#pWHV0ATW,ca01.绑定变量使用时: “: var_name”。
o,hpz Y#b"K02.替换变量使用时:“&var_name”。
5S1LP1Ea%{5[0􀂋 变量定义规则:
2^Q#f o#c'n01. 命名规则;51Testing软件测试网&ZA/R1VM O
2. 如果使用 NOT NULL 必须给变量或常量赋值;51Testing软件测试网1AT A8S-b8e
3. 每行只能定义一个标识符;
W#m e1Ede#Yqf%y04. 赋值操作符“:=”51Testing软件测试网2N v ac.i:u
5. 变量名称在同一块内不能重名;51Testing软件测试网kEc_X3x9y'z
6. 变量名称不要跟查询中的字段名称相同;
(v-{7Ql5{%N$n0􀂋 %type 属性(也是一种声明单值变量的方法)51Testing软件测试网%};\T_&OB ko*V
已经声明好的属性
t'HG1w.R'^r5d0以字段名称或声明好的变量作为前缀。
7M5Hhq.EP:J KI&`n0保证变量的匹配关系。51Testing软件测试网+smBu0O9ag O~6p
􀂋 显示变量输出命令
"I R1Z|;n)PA0print var_name51Testing软件测试网?,b6~m4g`'G0]}HD
在使用了DBMS_OUTPUT.PUT_LINE()的时候,用set serveroutput on。51Testing软件测试网3n,DM2La
例:51Testing软件测试网Q&icw.Nk(Ip_$Y)\
define manager_sal = 1000/var manager_sal =100051Testing软件测试网M_JN;Ce+J2q!a
declare
b/lZ"\ j ph0wc_sal employees.salary %type;51Testing软件测试网!an6B!^f/jl(gq n9U9t,m
begin
4m't!dv+p2[y9?0select salary into wc_sal from employees where manager_id is null;
T!X_2jW7YF%_0wc_sal:=wc_sal+&/:manager_sal;
y;[ c0k0h8T2M-Q0dbms_output.put_line(wc_sal);51Testing软件测试网KBopzD,}(lZ y
end;51Testing软件测试网w0{(JO5RVL:h#}!Q
书写正确的执行语句,每一条语句必须有分号。51Testing软件测试网g]:^b,W#II^ ]Th
在语句中:
'G$M/GM0?(u@0不可以使用组函数和DECODE 语句;51Testing软件测试网w0Lcm\)l
其他的字符函数和转换函数都可以使用;
$D!e&n*Rj*yac9[0CHR(ASCII)将ASCII 值转换成其对应的字符
3p#bwAh0Y0赋值语句
dI-I4~dF?0资源来自网络,仅供学习! Oracle 从入门到精通
?3J-[K acgx0第 82 页,共 106 页
e Q3bmjx#O n0条件判断语句:可以有 NOT AND OR 来连接单行比较操作符(>,<,=)。51Testing软件测试网:P-SB4]rT2@!WFO7b
循环控制语句51Testing软件测试网.]t&_8d|Q
注释语句:1./* */ 2.--
lYj)~U Az$Tt9O4Og02、PL/SQL 中的SQL 语句51Testing软件测试网Kf!J+Ni)M6]
1. 查询语句:可以直接使用,语法和规则有改变。51Testing软件测试网/F.{0` c5K8]#u o
select select_list into variable_name_list/record_name from table where condition;
.|U;] s4Z8lt R'o{F0􀂋 规则:一个查询必须并且只能返回一条数据,无返回或多条数据都会出现异常;51Testing软件测试网MQH p+Ii t
如果想要得到多条记录就必须使用游标;51Testing软件测试网EZ:vY i{)Z6Z!H
DML 操作和事务控制:可以像SQLPLUS 一样使用51Testing软件测试网M[C$p8[ bm N yn
DDL 语句不能被直接执行,不可以直接使用
@y.YBE0􀂋 执行的使用方法:
uVwTN W_s@0通过DBMS_SQL 包使用,适合动态SQL;
&IXN-@9Tr0execcute immediate 'DDL 语句';51Testing软件测试网h-Vih0SlD
2. 循环控制:51Testing软件测试网 m(dH"zYw(m#S~k
􀂋 Baisc loop51Testing软件测试网Qj+Z \5{U z8L})J
loop
X?$B0JNT"kp c0statement1;
nS2`1?;b0.....
B`.z\'D X2w'F-o%m0exit [when condition];//退出循环约束51Testing软件测试网}k"j p@6T@ E7{;r
end loop;
$b%T'x7][.C0􀂋 While loop
/R |tFi!S e5[nl0while condition loop51Testing软件测试网9[ c6n9Cw]q%E
statement1;51Testing软件测试网P$L.JH_kUBz
statement2;51Testing软件测试网!ET(mT:D}
.....
9sb-W8I5cx2bc0end loop;
)uwN)l.k;Wq^%L0􀂋 For loop
~[4j3nh8XFp#^(QH0for counter in [reverse]//取反51Testing软件测试网r)J i&mMJ Zu$E
lower_bound .. upper_bound loop
Q#K-p@#obx%@*V;d]0statement1;
8~luP9Hc"f%e0statement2;51Testing软件测试网b+quN\&{4U q o
....
jqxjS_:yp0end loop;
;bhkPz|#{7c0counter 不需要声明,不能在FOR 循环中为其赋值,但他能在循环中参加运算或赋予其他变
4w#dTm.] ~0量counter 值。51Testing软件测试网cq8C`']J[.v7|
例:
Aj*xu8TE#i c0declare51Testing软件测试网Qn%o/{Et#Y^j'SBg
empl_name employees.last_name %type;51Testing软件测试网4[6Vj[k"e
empl_id employees.employee_id %type :=100;51Testing软件测试网U bxJOQE |"z
empl_sal employees.salary %type;51Testing软件测试网(R~1]8M{ l0f3YYV
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网&Nu(\]Wr
第 83 页,共 106 页51Testing软件测试网 eJ"jG L%K
begin
$]n+`4} W0for i in 1 .. 10 loop
YD4sdc];s2T5o0select last_name,salary into empl_name,empl_sal from employees51Testing软件测试网kF5r{f2JP-Wo
where employee_id=empl_id;51Testing软件测试网-l2PP(F a k7X
empl_id :=empl_id + i;
n%fY-H.n.QHg0dbms_output.put_line (empl_name ||chr(32) ||empl_sal);
.R7U%e:mN4E6x0exit when empl_sal<5000;
V@f SN0end loop;51Testing软件测试网 r"pg!z(k
end;
,}2R/]W,T-E7k Y/U|c0declare51Testing软件测试网{x|d;f/\C3]bC1d
empl_name employees.last_name %type;51Testing软件测试网2joH-[n
empl_id employees.employee_id %type :=100;
/n)N \[]WOZ5_A0flag number :=1;
1un |pe)C0begin51Testing软件测试网(OVT$~#I@
while flag<=10 loop51Testing软件测试网mT)J3b1It*Ff
select last_name into empl_name from employees
K(rNn&n0where employee_id=empl_id;51Testing软件测试网+T%r?/K/|U
flag :=flag+1;
bL`XD0empl_id :=empl_id + flag;
zb&`2Ff#k0dbms_output.put_line (empl_name);
&A1fwq.kl0end loop;51Testing软件测试网g y+Vao9d
end;51Testing软件测试网4o%c3\i#p.D0kM
􀂋 嵌套循环要使用标签 << >>51Testing软件测试网``#A)w)P
records 组合类型51Testing软件测试网_ m6cjB6^${
每一个域都可以是不同的数据类型;
j8qC KDV:M~0使用其来记录表中一行的数据;51Testing软件测试网X*Q l7R:Q0x V:UMQ v
type type_name is record
(ac{&ts7H:jk0(field1,field2,field3,.....);51Testing软件测试网,H9OU6IUI2w4G+I Rmz
􀂋 %rowtype 参照一个表的结构。
7~3omf!x vr"mC`'g0declare
_%pQ2Tm6y(]2r0type_name table_name %rowtype;51Testing软件测试网*^C+FqhCv n3}Iz
例:
A#w'Nk:J0declare51Testing软件测试网2Y__` N
depart_type departments %rowtype;51Testing软件测试网]rdb5t|
begin
O4k4mh#a"nK_N S;E*L0select * into depart_type from departments where department_id = 10;51Testing软件测试网f;L?.fna
dbms_output.put_line(depart_type.department_id||chr(32)||depart_type.department_na
_%U\AkE0me);51Testing软件测试网O8C"HP+HO @ll
end;
S*j"_O+^C8px ^0index by tables 类型
4T~Cs:pj;HFp0资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网\,Xz]9yDE?
第 84 页,共 106 页
9O*[%Q7i,qF2d[0􀂋 组成:
S&S.R K[u,b c!O0(一)起主键作用的BINARY_INTEGER 类型的字段。
7i G:mn5M5\R0(二)简单类型或records 类型的字段。51Testing软件测试网oa*L5T$J:A-|!X
不需要定义长度,但最大长度是由BINARY_INTEGER 的最高值来决定(-32767~32768)。
6qd/HnbR6`0􀂋 语法:
-L/s'RV tU4[^0TYPE type_name IS TABLE OF
WfWz eU4s0col_type / variable %type / table.col %type[not null]
#E&vfg}z0/table %rowtype51Testing软件测试网dD+^g9S3Y`7R
INDEX BY BINARY_INTEGER;
[&C*uFQt0identifier type_name;
fF+][(C,G03. index by tables 中的方法:
yW pXqq#J0identifier.functions 引用形式。51Testing软件测试网(E~+[2K8o9z
exists (下标) 判断该下标位置有没有值
,qpTgd0count 计算该数组中有值的个数51Testing软件测试网1{ ^Kd\k&Z"S/DFam
first 数组中第一个有值的下标
:?RiNMi0last 数组中最后一个有值的下标51Testing软件测试网3] }r&C/XwHh)\+o p.U
prior 前一个
9PQ$v?B4g,q'h0next 后一个51Testing软件测试网6ZIYO-D1p%xE
trim 截取数组
-~*b/J J }kq.{op0delete 删除51Testing软件测试网XwFPco
declare51Testing软件测试网 g;Yop:`4~
type depart_sum_type is table of51Testing软件测试网1@Q,^*~^!? A
departments %rowtype
3[D9cA7R3e0INDEX BY BINARY_INTEGER;51Testing软件测试网X.b7n]d-ry
depart_sum depart_sum_type;
a%S*B9u'H,q8f7s(nY@0begin
snHPFcn Q+q[E0for i in 1 .. 20 loop51Testing软件测试网:[ b\|x]%^$?i
select * into depart_sum(i) from departments51Testing软件测试网-X k7yOo+V&\ p
where department_id=i*10;51Testing软件测试网5t c4X]#F5i+Q4{
if i<=80 then
SmPt pcE0dbms_output.put_line(depart_sum(i).department_name);51Testing软件测试网 m z tNay(n({
else
t;|fd/``-Z0dbms_output.put_line(depart_sum(i).department_id);51Testing软件测试网'| C hy/M
end if;51Testing软件测试网2@'UFG#]Wg-J u
end loop;
q H,tyd6~*FW\0end;51Testing软件测试网.Rz4RCJy
4. SQL Cursor51Testing软件测试网9et-O\)zRj|$s
一段私有的SQL 内存区域;
n-GHN,mb \"Qa0􀂋 类型:1、隐式游标 2、显式游标:51Testing软件测试网AZswS7A
定义:CURSOR cursor_name is select_statement;
9S-D iKI C7A~ fK {0打开:OPEN cursor_name;51Testing软件测试网EGP:V~#_1C
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网d0k*M]2W
第 85 页,共 106 页51Testing软件测试网;HbE!y5W)},Gn)f-t;H-T
FETCH:51Testing软件测试网v%wN/d_)w Q [
FETCH cursor_name INTO [var1,var2,....] / [record_name];51Testing软件测试网 Y*|N$xF;h
个数,顺序和类型都必须匹配;51Testing软件测试网6V-yD#Xa
关闭:CLOSE cursor_name;51Testing软件测试网'x&F+U9\"@%`7auqcD
如果想再次利用,必须重新打开。51Testing软件测试网o-hlC(\Az
􀂋 游标的属性:
1Ta&T*H,hBi01. sql%rowcount SQL 语句影响到的行数,在显式里是指FETCH 出的行数。
A M{MK+l02. sql%found SQL 语句是否访问到数据的属性,在显式里是指FETCH 是否访问51Testing软件测试网y|9?*I,`s zU;I;l
到数据:返回TRUE/FALSE(while loop)51Testing软件测试网 OUmK4D^ F2}*\
3. sql%notfound SQL 语句是否没访问到数据的属性, 在显式里是指FETCH 是51Testing软件测试网? S.m}i"W| j
否没访问到数据:返回TRUE/FALSE(Basic loop)
A5`s(KF#|5Gp|04. sql%isopen 对显式有效,在隐式中始终为FALSE51Testing软件测试网g,x\&D6Gp2n
if not cursor_name %isopen then open cursor_name;
%Hn:?Wp6`{E0􀂋 显式引用: cursor_name %属性,在关闭状态下也可以查看。51Testing软件测试网z3An7Js y!]
􀂋 隐式引用: SQL%属性,如果有多条的SQL 语句,该属性取出的是离SQL%属性最近的那条SQL
iMq'o X%d {0语句。51Testing软件测试网4h(F Ib1m
例:51Testing软件测试网5a.g'V-m6_H
declare
2l9kRbrD0cursor empl_dep is51Testing软件测试网 q?|Z,cO;`(EnY
select last_name,department_name from employees,departments
;qv7MkF0where employees.department_id=departments.department_id;
/v9Utl$J0empl_name employees.last_name %type;51Testing软件测试网$zx-|I)N,\-v
depart_name departments.department_name %type;51Testing软件测试网 sL!L/q?W
begin51Testing软件测试网4vt#dpZE&Q
open empl_dep;51Testing软件测试网0sYn#T}u2D
fetch empl_dep into empl_name,depart_name;
vt Sc+jk8E0dbms_output.put_line(empl_name ||chr(32)||'work in'||chr(32)||depart_name);51Testing软件测试网#V}V6{_)N a!@
while empl_dep%found loop51Testing软件测试网BeI*P v R4C
fetch empl_dep into empl_name,depart_name;51Testing软件测试网UQ u} SuU3T
dbms_output.put_line(empl_name ||chr(32)||'work in'||chr(32)||depart_name);
e X6Ag/s1p%I z0end loop;
,G p |h)MF^%EL0if empl_dep%isopen then
D u#{I8o @0dbms_output.put_line(empl_dep%rowcount);
e.?k|}gf0end if;51Testing软件测试网/Oh dVZ0Z3FM1YY
close empl_dep;51Testing软件测试网R`%cT\)Ub
end;51Testing软件测试网ZW^*{ } q/bc6g
5.FOR 循环的游标使用:
*k6\,xc%v;Q;w#E0for record_name in cursor_name loop
o@o&` S7^ M&K0statement1;51Testing软件测试网 I `2P$~0_5M/F
statement2;
4`0v(R4O.~YD"E0......51Testing软件测试网v1E?$}%u,O/M]'[)PG3}
end loop;51Testing软件测试网v~+iS(ZC|
游标不需要打开,FETCH 和关闭,直接在循环中使用record_name.col_name(子查询中的
:{i,~H&[1}t6U0资源来自网络,仅供学习! Oracle 从入门到精通
:{i"{'x/_Z z0第 86 页,共 106 页51Testing软件测试网2Nz ^%YUZ2w#Bs
col_name)就可以。
[&Q FC L1Q;l zm0declare51Testing软件测试网3m6rl;m/B
cursor cur_empl_dep is51Testing软件测试网 uNx)I ls-XO+N
select last_name,department_name from employees,departments51Testing软件测试网kW+qQn L!l/b
where employees.department_id=departments.department_id;51Testing软件测试网z R~tX}FWM
begin
O$E4xr4w0for re_empl_dep in cur_empl_dep loop
r(^0nZ \K.WQw}U2u0dbms_output.put_line(re_empl_dep.last_name||' work in
I d]4?pY#t0'||re_empl_dep.department_name);
Y SR"? o0end loop;51Testing软件测试网5sy@(R @r
end;51Testing软件测试网L5BL7XX }D r
begin
2|2jZ2@?0for re_empl_dep in (select last_name,department_name from employees,departments
gyM {e9[0where employees.department_id=departments.department_id) loop51Testing软件测试网5t/_-sfB t#N2Xz Ea o
dbms_output.put_line(re_empl_dep.last_name||' work in51Testing软件测试网+j9v _'yG
'||re_empl_dep.department_name);
8S}^*[W!v)H0end loop;51Testing软件测试网!EO*p8oX:KNGn@Zu
end;51Testing软件测试网u)@b t:wg
6.带参数的游标:
gP p6{6?6U y0处理串行化数据(一个执行完才能执行下一个)。51Testing软件测试网gV)s(Mt[
CURSOR cursor_name [(parameter_name datatype,.....)]
Z5y`uC.i \0IS
;Sj#oO_9^0select_statement;
?\uwWaS c0OPEN cursor_name [(parameter_name datatype,.....)];
,}h;mr{*O9L0􀂋 限制:不能实现多个游标的并行打开。
@,H jy~ M RFK6b0例:51Testing软件测试网&N2D,K'Y'{
declare51Testing软件测试网%^U+d5g*N
cursor dep_cur
:_r.Hd'M`w0(dep_id employees.department_id %type)
c-bT"N+L0is
O#jw ZagF0tw0select employee_id,last_name,department_id from employees51Testing软件测试网,O(o XqR9uCG8x[(m
where department_id=dep_id;51Testing软件测试网 n.G5Tgi
begin51Testing软件测试网"a;xx]&E[)xs,I!Q1d
for j in 1 .. 5 loop51Testing软件测试网 | i ^ JO\
for i in dep_cur(j*10) loop51Testing软件测试网-` cuQxQ} [u;S O
dbms_output.put_line(i.employee_id||' : '||i.last_name||' in '||i.department_id);51Testing软件测试网.B8Z7jN8O&DwY V
end loop;
!Y0Hh%e4UG0end loop;51Testing软件测试网%AZR/PH!g.FD
end;
(Tf}1t;T gM$gy0􀂋 在查询的同时锁定数据:
0XC lP]R0select .... from .... for update [of column reference] [nowait];51Testing软件测试网x^@S8bJZ
[nowait] 如果得不到访问资源就立即返回。
W3LKW W9h`)i4Je0如果要使用游标修改数据的话,一定要在游标定义中 SELECT 语句中加上 FOR UPDATE。51Testing软件测试网:gO-?#@ RJ
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网Be h}A~LR
第 87 页,共 106 页51Testing软件测试网8Y1z3\ l:iN-X[pv:E
在游标执行过程中的 UPDATE 语句:51Testing软件测试网 q MHG b \Gn
UPDATE....SET...WHERE CRRENT OF cursor_name;
d*^O$o0~,L&L.e07.异常处理51Testing软件测试网QAFK.fq m
异常:在执行过程中出现的错误。51Testing软件测试网z)o3a0y.I2{,M}
错误触发:语句执行错误(规则)。51Testing软件测试网2hH~&Usu b
显式触发:人为认定的异常,人为规定出现异常的数据范围(逻辑)。51Testing软件测试网s G,RGD
8.预定义异常:
1_*c3gyo(|0有编号,有名称。使用异常名称扑捉;
kAs`q#Qz0NO_DATA_FOUND
a_(Ts d7@6s;J$a0TOO_MANY_ROWS51Testing软件测试网7wRp*is%_
INVALID_CURSOR
va'~ O7tD0ZERO_DIVIDE51Testing软件测试网 ?'cn4p:I9X
DUP_VAL_ON_INDEX 在索引上出现重复数;51Testing软件测试网1g J9_b.DZE
exception51Testing软件测试网-m~l| hqE;aX
when NO_DATA_FOUND then
kr-N3x_cy9{0statement1;
z^xi@0statement2;51Testing软件测试网lL!`\E!ash
........;51Testing软件测试网1X*dv1@D;s5@h
when TOO_MANY_ROWS then51Testing软件测试网'dN5jJv;v NJ)gQW
statement1;51Testing软件测试网GLi@ i
statement2;
)?)O.n*sC+Ij0...........;
UR%lSW n0when others then
5T C R}r*|:q4e0statement1;
iw;_~V%f,hr'Dj-p0statement2;51Testing软件测试网T3WW"H+Gq
...........;51Testing软件测试网1A-R!u y Oj
9.非预定义异常:51Testing软件测试网d*LZ8n}-n0b
有编号,没名称。需要先定义名称再扑捉;51Testing软件测试网G-k `(Q#ZD
(1)在DECLARE 部分定义一个异常的名称; exc_name EXCEPTION;
`xSN YT0(2)把名称和异常编号连接起来; PARGMA EXCEPTION_INIT(exc_name,-exc_number);
!i.VR%dJX(f [03、函数:
xkzzb0SQLCODE :返回错误编号51Testing软件测试网/Ch6o"d1F1ZY)e4U
SQLERRM :返回错误信息
g j{7C et0写入错误日志的内容: 用户,时间,对象,操作,错误编号,错误信息。
3M\ F/g$R V0􀂋 用户定义异常:
5CJ @ [`"y [0(1)命名;
4F'Pz6`Oo;]!}2X0(2)raise 关键字在BEGIN 后触发;51Testing软件测试网Ads#L \d(fe
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网%Mej)s`Q
第 88 页,共 106 页51Testing软件测试网3@s4h0o~u ^&e
(3)捕捉;
w[!{md$}@/\8K)Y0􀂋 语法:
*u"mpHJ+V6k0exception
^FQG:}a9j X3nA u0when exception1 or exception2 then
l/HDb@z&M)u4\A6cI0statement1;51Testing软件测试网/DM\ |;dq K ^
statement2;51Testing软件测试网}%G8A5FP c7m
........;
kv2WY5A0when exception3 or exception4 then
GWEqJj@&k`0statement1;51Testing软件测试网V}V6oTwjH
statement2;51Testing软件测试网B9Fi%}5s b
...........;51Testing软件测试网o.FRc-|v5F
when others then51Testing软件测试网B!b'? ^m3Ot@
statement1;51Testing软件测试网W!T8z9?CNIu p3@
statement2;
:v5q9jBc+K q9xb0...........;
8[p|^Kg3f [0能够判断出的异常放到 WHEN 语句中,将那些无法预测的异常放在 OTHERS 中做成错误日志表。51Testing软件测试网\$eQ6Oa;^x;\
在程序内部的在程序内部捕捉,程序外部的程序外部捕捉,只有都没捕捉到,才会传到环境中。
0L/Y-b7Z` U5F$~)eL0􀂋 抛出异常:
/}*ejk)A%_9K4E d0RAISE_APPLICATION_ERROR51Testing软件测试网"s5k/j g'qC4L7Z
RAISE_APPLICATION_ERROR(自定义错误编号,自定义信息);51Testing软件测试网 T'}}!~%\gkc,hRo,C
不会被 EXCEPTION 捕捉到,而是直接回显到界面上给用户看到。
G ^pyBt*y/[%`0在EXCEPTION ...WHEN ...THEN 之前或之中都可以使用。
.K!y!}f@g#v0􀂋 函数:
"~ueW J0不能独立出现,只能作为表达式来使用。
Ov+['Yh;`3W0create [or replace] function fun_name51Testing软件测试网;Y6D9H7]k"q G)ODi%I+tw
[(parameter1 [mode] datatype,parameter2 [mode] datatype, ...)]
u1Q#f%CF"K0}1T\'L0return datetype51Testing软件测试网vC6@5KZ/j
is/as
5jf#F9ggM v"F8Y M0pl/sql block;51Testing软件测试网a)uRW g[+n4[]
只能返回一个且必须有一个返回类型。
v~(I(mmF0在pl/sql block 中必须有一个可以执行的RETURN 子句。51Testing软件测试网,|f(}0AH*b~9w7O
只允许接受IN 模式的参数。51Testing软件测试网5m T#@p4b
函数可以返回BOOLEAN 类型,但不能将返回BOOLEAN 类型的函数应用到SQL 语句中。51Testing软件测试网 I0B-Ddj
􀂋 函数的限制:51Testing软件测试网WH hB7|&MC9MD
只能出现查询语句;51Testing软件测试网DYGyDc G(?
不允许出现DML 操作;
+b(O]A8l+PjG LI b0如果在对表T 进行DML 语句操作调用函数F,该函数F 不能对编辑表T 进行查询;
xrZ Z"X@u:f,n0不允许出现DDL 语句;
)\Nqh eEj$\0例:51Testing软件测试网%A&D"pP`)u ~5\s
create or replace function sal_comm_fun(empl_sal number) return number is
#pM&ew0wV$cK3z0Result number;
%Y)I T*yR A6J0begin
%WX4a2D i~PW0资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网7m WOd9s#~-y2l:x(D
第 89 页,共 106 页51Testing软件测试网Oq%e VOA.j k
if empl_sal <= 1000 then51Testing软件测试网'L"WJ0tEa p
return(empl_sal * 0);
E:J8y@l.B I4b]0elsif empl_sal <= 2000 then51Testing软件测试网]NoVG d
return(empl_sal * 0.1);51Testing软件测试网0_3F YWg.Y
elsif empl_sal <= 5000 then
7bob @I LWcu0return(empl_sal * 0.15 + empl_sal * 0.1);
6O~9qXJ/Y`0elsif empl_sal <= 20000 then51Testing软件测试网uC/h2E/l3z
return(empl_sal * 0.2 + empl_sal * 0.15 + empl_sal * 0.1);51Testing软件测试网|+@$l c~ | i1oU@
else
]X5I \pv q+m$kv/j0return(empl_sal * 0.3 + empl_sal * 0.2 + empl_sal * 0.15 +51Testing软件测试网)S@d,fW
empl_sal * 0.1);51Testing软件测试网/d ]x$DmL A`
end if;
3si Tm*p rY {'EY0end sal_comm_fun;51Testing软件测试网py-tV4{+j;^%x
4、存储程序单元51Testing软件测试网{Y],q{J
存储过程(Procedure)
Y w.lpe1Q0create [or replace] procedure pro_name51Testing软件测试网;ZEq g\O&C
[(parameter1 [mode] datatype,parameter2 [mode] datatype, ...)]51Testing软件测试网;s|,Y5ej`
is/as
N RKiV*]p0.....//声明部分51Testing软件测试网4HE7M,\.C4M ["k E;?
begin
7{ s0e#[X9W A4K0....//函数主题51Testing软件测试网 h|*UG[r1eT*pr
exception51Testing软件测试网]?8ypx(I"E
....//异常处理51Testing软件测试网}|*uVo^i}.H
end;
n7uFE4ctc:h[0􀂋 mode:
dp*k MP)AlXuy$MS01. in 传入(形参)默认,可以有默认值;51Testing软件测试网U&vdt0U0F(pI:\{
create or replace procedure empl_sal_pro(empl_id employees.employee_id %type)51Testing软件测试网0Vx*v}3eg g TrB
is51Testing软件测试网%{%m-l-y)?6d
begin51Testing软件测试网%d9BevqwH8X
update employees set salary = 170000 where employee_id = empl_id;51Testing软件测试网Wi x`5T#]
end empl_sal_pro;51Testing软件测试网a0{Zm wIe*C
exec empl_sal_pro(empl_id=> 100)
.k_ @/r6iD02. out(实参)先将初始值传入经过处理后在传出,必须定义名称;51Testing软件测试网 ~M*{WZ6_]
先在SQLPLUS 中定义 VAR 变量,然后执行EXEC 将定义好的 VAR 变量 传入到存储51Testing软件测试网4]k,xG#Ji\.u
过程中的参数位置。
^-}){d/w6[*aB0SQL> create or replace procedure empl_info(empl_id51Testing软件测试网 Xe#F/KI8@ k5K7J
employees.employee_id%type,51Testing软件测试网3L ?(P5]oa(g3X#xez
2 empl_name out employees.last_name%type,
&PJLE*b r dXv|03 empl_sal out employees.salary%type) is51Testing软件测试网'p }E-q,aQs
4 begin51Testing软件测试网KTv9B` C9sV mo[
5 select last_name,salary into empl_name,empl_sal from employees51Testing软件测试网1eX5p2V`5f#j S
6 where employee_id=empl_id;51Testing软件测试网/~1C#p*A6smR_
7 end empl_info;
6W.RL5w*@6E08 /51Testing软件测试网Dy Am,zb5~
资源来自网络,仅供学习! Oracle 从入门到精通
Lw9|Z ^#S+u S0第 90 页,共 106 页51Testing软件测试网0p ] Z htEF%l8I
过程已创建。51Testing软件测试网b;?R$A$_1j
SQL> exec empl_info(100,:name,:sal)
+s `y G0OuO0PL/SQL 过程已成功完成。
(IL.Ts4?+x8U7K {0SQL> print name
[d#^/O~3X%s0NAME
/_{r tvo0--------------------------------51Testing软件测试网v9Gt'PUPzO;}
King51Testing软件测试网Z$GqN$d d
SQL> print sal51Testing软件测试网tOxF6r%c$c
SAL51Testing软件测试网4`0QJ6I$~-k-xz2f/b
----------
-\@#[/y'Z@7M024000
8BXI/j5O J0begin51Testing软件测试网&e \reh
-- Call the procedure51Testing软件测试网L gnK*ld Xm R {
query_emp(p_id => :p_id,
O4n:}G:l-L(@0p_name => :p_name,51Testing软件测试网["dS X w"H"qc(fL
p_salary => :p_salary,
?"q[g^:{x4{0p_comm => :p_comm);51Testing软件测试网z4i9]9bSoPm(?
end;
LT vh3s4]W1l03. inout 先传入后传出,可以直接赋予默认值;51Testing软件测试网 O4r%xv?x Gm
编辑并存储;
'ZW i,Y`I;rw$Ek0SHO ERR 查看编辑时错误的命令;
fjSeji6N2]#L0exec 执行存储过程命令;
x:u;}NQ'h'c2w/w}0删除:DROP procedure;
L,f+Ii(x#pG{05、管理PL/SQL 程序块:51Testing软件测试网.H'I8}a5u.]~A4bi
管理PL/SQL 程序块:51Testing软件测试网/T I9z,zk
在用户自己的方案下有CREATE 权限
__#ZH&n4wi"U0对于其他用户的方案有CREATE ANY 权限51Testing软件测试网0su$WX:hOA A
存储过程,函数和包需要执行权限,触发器不需要。51Testing软件测试网o9KRD/pe
当用户使用其他用户的存储过程或函数去访问其他用户的对象,
Q,Y6} Xnz'T%?@0能否访问到对象取决与该存储过程或函数的拥有者的权限。
%S%[?,R@(pd8]0TUTHID CURRENT_USER 表示存储过程不依赖他的拥有者,而依赖与当前调用他的用户。
$KJ+H `;](]'c4j[||i0在CREATE PROCEDURE 的最后添加。
%F5OJ*F9L*w0􀂋 查看信息:51Testing软件测试网!H5c*A$O5v{(WCV3J5D
user_objects;
X]%D iO8pD[P0user_source;51Testing软件测试网[@2oU&eU Z5n
user_errors;
&Z Xq$i.v*h0资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网.l2p7?,t``d I)T
第 91 页,共 106 页
en F$f c x.q0query_emp;对过程的描述。
T OU~X'T*z]#D-Q'V06、包(package)
w?L^ l?#i\/M/@?0一组相关类型的变量,常量,游标,存储过程,函数的集合。51Testing软件测试网G/`v-}/L [%V
1.组成:51Testing软件测试网W(x @i-_$TFn
包头:声明部分,只声明PUBLIC PROCEDURE/VARIABLE;
'bYy*Us k0包体:程序实体,包含PRIVATE PROCEDURE/VARIABLE 、PUBLIC PROCEDURE/VARIABLE 和 LOCAL51Testing软件测试网7y&xB X s$HS6A
VARIABLE;51Testing软件测试网8]2Y n3E KM0B5[C
包头没有包体是可以独立存在的。
P wSiuz0􀂋 包头:51Testing软件测试网w3[Hv?,b%\.[G1N
CREATE [OR REPLACE] PACKAGE package_name51Testing软件测试网1mi"h(N*LH\R
IS51Testing软件测试网%O j1e2M8}EA2^Q*J
public_type51Testing软件测试网y m&?'h]*]
PROCEDURE procdeure_name (parameter.... );51Testing软件测试网6Oy3b k*O/[n u
END package_name;51Testing软件测试网#Z!EQh6S#N*lO Q
􀂋 包体:
g!ykN,X,\ol S2I u8F0CREATE [OR REPLACE] PACKAGE BODY package_name
'YnQN8M0IS51Testing软件测试网u@ d/icGs)y"Zz
private type and item declarations
2D]7w]!P!]x'X0subprogram bodies
)IaZn)| i9`'K1PHPQ0end package_name;
CdJ Zd'c02.构建没有包头的包:51Testing软件测试网HV-}\Yy!@Eg'\
为了在整个会话中的全局变量设计。
Jm D2H#o,Rb-y0如果其他会话访问的话,和定义时候的回话得到的包的值有可能是不一样的。
1i#oe G ^0包体的部分可以通过WRAP 程序加密。
`m+`3W#@:K+T0只有局部过程和被打包的过程才能OVERLOAD(重载)。51Testing软件测试网{AR xv
􀂋 前项声明:51Testing软件测试网8U+z-G C1Y$n
将过程或函数的名称和参数放在包体的头部声明;51Testing软件测试网#D?%x&}Fhp8o
􀂋 建立一次性的过程:51Testing软件测试网%L l%AMI0j!\F[(y
就是在包体中插入了一个匿名块,在包体执行的时候,该匿名块一定会先执行一次该匿名块,
}I Uo-WP0然后再执行包体中的其他部分。51Testing软件测试网5v(j"uZ+FwY&N1U
3.SQL 中使用包函数的限制51Testing软件测试网'Mu;RJ*F~W$B A9O
函数中不能包含影响当前事务的语句;
$[ciET3oPE^!m0如果在对表T 进行DML 语句操作调用函数F,该函数F 不能对编辑表T 进行查询;51Testing软件测试网/CJ/I)~ k
包中变量的稳定性:51Testing软件测试网Io4TB;zv!lS5i7~
PUBLIC VARIABLE 发生改变的情况:51Testing软件测试网.^7C5N.Yo)Lp
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网9Q4n/R9w4o {(i&_
第 92 页,共 106 页51Testing软件测试网;Q [J2PH Nl9h h4uL
重新建立会话51Testing软件测试网d0tYcH:U
符合规则51Testing软件测试网!G'Ex0c,U/qy;w g:Z
4.与开发相关的系统包:
R`-M_r5} j9`j+X i0􀂋 DBMS_SQL51Testing软件测试网%f7yC f.Z+K
(1)能过生成动态的SQL 语句;
Dfz*Y9pp0(2)能过执行DDL 语句;
%ydOy l |0􀂋 包使用的主要步骤:51Testing软件测试网pE"nV7cC
OPEN_DURSOR51Testing软件测试网.c kRBQv'zA(n2Y
PARSE
.{5d/p7[N7\/s)F*F0BIND_VARIABLE51Testing软件测试网,Z7ZO a%Q.o#s h
EXECUTE
@9NT2c)l.i$q'C0FETCH_ROWS
a0@\4VDBL sID2^#|0CLOSE_CURSOR
7IN!D!r6D0EXECUTE IMMEDIATE51Testing软件测试网:bzxd)Z T4z2b'g
EXECUTE IMMEDIATE dynamic_string51Testing软件测试网q7KV&t N#uIp!B
[INTO {define_variable51Testing软件测试网y z,k"@0Fw%^
[, define_variable] ... | record}]51Testing软件测试网P#m0T8R8r.@zn
[USING [IN|OUT|IN OUT] bind_argument51Testing软件测试网O:U.c p#r h#Z|8r
[, [IN|OUT|IN OUT] bind_argument] ... ];
*c4[ }_+C|BG0􀂋 DBMS_DDL51Testing软件测试网9}i/Yd4jw})y:_
ALTER_COMPILE(object_type,owner,object_name);强制编辑51Testing软件测试网G B-?wksR8~O
􀂋 DBMS_JOB
9{y5@0c/^m+GOa R0设置用户的任务;
;Z;Abn"G"}0在某个指定的时刻执行一定的操作;
(H#X2x2f$J0手动强制执行;51Testing软件测试网6y8J` ^4tU d h H
挂起任务;
o$u"i\x2`d0提交51Testing软件测试网1~ J v"eaO0y&L
删除
'EN0kgQ0修改
X%he&pbSw0要执行什么,可以跟语句或过程51Testing软件测试网Z k2ys z_4M#N4npu
下一次的执行时间51Testing软件测试网|(_'i2?AkV [.E
任务执行的时间间隔51Testing软件测试网(E7o}9|f/n$s
挂起51Testing软件测试网Ps)zm7pF{'Djut#P6X
手动强制执行
^gu;J#B*G0查看:
!_)l;QZuGAA0USER_JOBS;51Testing软件测试网1~;P1w3k.zG'K
􀂋 DBMS_OUTPUT51Testing软件测试网7[8[*D0f5gX%x
PUT 输出多行数据51Testing软件测试网uQ9c^@Q1PH
NEW_LINE 起一个新行
+Wt1u@+j#B;N0PUT_LINE 输出一行数据51Testing软件测试网1X%~$Qw X
GET_LINE 得到一行信息
r.RT2n(q0GET_LINES 得到多行信息
x `,R*E9m2I0􀂋 UTL_FILE
:~o3R8oU/_$q2Q0对操作系统文件进行操作;51Testing软件测试网2\ P/x$Bl
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网9B*~&wJ,U'B7w
第 93 页,共 106 页
W ~ j7l#s_c0􀂋 DBMS_LOB
#K'D2Lh1e*Nu0对LOB 对象的读和写
T!x(x y6v5H Ko|;z&s0􀂋 UTL_HTTP
dN*d]i*l0可以把指定的网页的内容摘取下来51Testing软件测试网_ QcK _1H^2w
􀂋 静态的 SQL 语句的执行过程:51Testing软件测试网?#W l-OC i
分析 PARSE
~ rx4g ^h]0绑定 BIND51Testing软件测试网W*{RYl@r K
执行 EXECUTE51Testing软件测试网1E9tI0zy
取操作 FETCH51Testing软件测试网W)E#I&zM0K| t
用户可以通过DML 语句对LONG 类型的数据可以直接访问;51Testing软件测试网Ys4I#t'dF(G
7、触发器51Testing软件测试网Ch qqUdy1b"gx
触发器:
!F&zw G K l0不能直接调用,必须得事件触发,一般情况下是与对象、数据库和方案有关。
f]2n$@p6O/U8{6v`7o%Q'c01. 数据库触发器
a6MLEsr wo!g8s)]02. 应用触发器51Testing软件测试网\X[%_{or r
当一个操作与另一个操作有密切关系的时候;51Testing软件测试网A h_En#?9v@
触发器不要太大,如果代码量大,要把触发器放到一个可执行的存储过程中;
F.Cy+c'MH+i s2@0不要在一个对象上建立太多的触发器;
(`W%[l.LY%xT'm03. 表触发器51Testing软件测试网9~'zp!X/h!Z
BEFORE 做数据校验
6Iv8wG@|0AFTER 在操作以后对操作和数据进行记录51Testing软件测试网 HR-|-HDHM3X
4. 视图触发器51Testing软件测试网v*~7g4Yz)N-A%Sy7`
INSTEAD OF 对视图的操作替换成对视图的基表的操作51Testing软件测试网(i7]PA%E0e4[@ lT
5. 行级触发器51Testing软件测试网 qg3g$E)M&yd
对多行的操作,每操作一行都会触发触发器。
X-W)I'oJ6zV#V/Zmi06. 语句级触发器
t(m*]n O?#gh^b+e0当一条语句执行的时候触发,执行一次触发一次,与操作的行数无关。51Testing软件测试网.x WC5t.Pj|
WHEN CLAUSE 触发器执行条件
C |p,_gyu01.语句级:51Testing软件测试网] t([Ju N
CREATE [OR REPLACE] TRIGGER trigger_name51Testing软件测试网:kH1L#mG;xZ w
timing(before/after)51Testing软件测试网%j:q0d,xu(ayS
event1 [or event2 or event3] ON table_name51Testing软件测试网 R5m8e2s+O3R9e~*dQ
trigger_body
@8~{5h`(h0在同一个方案下不允许重名。
@'a$yT"?8u6KI0CREATE OR REPLACE TRIGGER secure_emp
D+{G4Su+P3v7|0BEFORE INSERT OR UPDATE OR DELETE ON employees51Testing软件测试网)A-}C1]`;Lm`
BEGIN51Testing软件测试网*|V g5s)Er7wQm
IF (TO_CHAR (SYSDATE, 'HH24') NOT BETWEEN '08' AND '12') AND DELETING
jpk,P!dL7Sw1f UV0THEN51Testing软件测试网%P4?n+a&U
RAISE_APPLICATION_ERROR (-20502,'You may delete from EMPLOYEES table
H'v9d}`S}W0only during business hours.');51Testing软件测试网ScT,q^'A
资源来自网络,仅供学习! Oracle 从入门到精通
|"wi/L0L H"E0\-J6o0第 94 页,共 106 页
"{$g;W/F?#nd~(D0ELSIF (TO_CHAR (SYSDATE, 'HH24') NOT BETWEEN '12' AND '18') AND INSERTING THEN51Testing软件测试网yg:P.P m.~
RAISE_APPLICATION_ERROR (-20500,'You may insert into51Testing软件测试网?7goD8zjy)j
EMPLOYEES table only during business hours.');51Testing软件测试网(k$?D1\*B{%H
ELSIF (TO_CHAR (SYSDATE, 'HH24') NOT BETWEEN '8' AND '18') AND UPDATING ('SALARY')51Testing软件测试网G KRC!P)c?/C*D"R
THEN
P6{$C.r~`~%Q[0RAISE_APPLICATION_ERROR (-20503,'You may update51Testing软件测试网2X]$D3nH@:G
SALARY only during business hours.');
gkg2b)E$_-t v0ELSE
czM1C4w0RAISE_APPLICATION_ERROR (-20504,'You may update51Testing软件测试网&l l,A3c2m4P
EMPLOYEES table only during normal hours.');
tM v)p&b)TO0END IF;
j vtq$f rv%U0END;
O ffWEe`EPH02.行级触发器:
?4DR2o9N"O l0CREATE [OR REPLACE] TRIGGER trigger_name51Testing软件测试网6hRW&h_A
timing51Testing软件测试网9iT0yCp,V:]2J%Z
event1 [OR event2 OR event3]
xMJ{+c_5b5m*^c}0ON table_name51Testing软件测试网]y^2I)O6C\2?&A
[REFERENCING OLD AS old / NEW AS new]
?2L0Vab!Q+k0z[0FOR EACH ROW
+J?z9FUnn~ e0[WHEN (condition)] //执行条件51Testing软件测试网O*W$l3~3Sz3nfp mi
trigger_body
#f O+l@g8r/a ?0:OLD.字段名/:NEW.字段名 引用格式。
X^T{5e)S7]0例:
1koD5t _S?R ff'h0CREATE OR REPLACE TRIGGER restrict_salary
q0~E,^gR0BEFORE INSERT OR [UPDATE OF] salary ON employees51Testing软件测试网0QR6e^L:s S$jg
FOR EACH ROW51Testing软件测试网dL)m j"f*n-I&Nuhx
WHEN (new.salary is not null) //在出发器头里,new.salary 相当与本身的变量
3_-P#L9J$KFvr!v0BEGIN51Testing软件测试网qFr;onY%t
IF :NEW.salary>2*:old.salary //在TRIGGER_BODY 里,:NEW.salary 相当与一个绑51Testing软件测试网"~;C:Q(W/e
定变量51Testing软件测试网9}m\ u"WhX?*O
or :NEW.salary <0.5*:old.salary
V\#^I:`v:s1Jf;d}2r0THEN
Oo4A$a8Gf4`z2K0RAISE_APPLICATION_ERROR (-20202,'Employee cannot earn this amount');51Testing软件测试网 zNe'G+w-O
END IF;
+ED T_4U_9g0END;
X }5a{:fz boo0􀂋 自建的日志表:
/VYBUn6d q3nl0CREATE OR REPLACE TRIGGER empl_table51Testing软件测试网/_'NL3c:V*e2Z7K
AFTER DELETE OR INSERT OR UPDATE ON employees51Testing软件测试网%n Dti+i0k3w
FOR EACH ROW51Testing软件测试网 q+^?:s TA7Q E
BEGIN
`1G2o'm2H Wv0资源来自网络,仅供学习! Oracle 从入门到精通
)eQ!}x1Q3]D(N0第 95 页,共 106 页
uuoNd0INSERT INTO empl_table (user_name, timestamp,
,X~T+h sM!A4Q,_d0id, old_last_name, new_last_name, old_title,
P-O`V"SwCO!D4a0new_title, old_salary, new_salary)51Testing软件测试网A3dVj1U8M mZ
VALUES (USER, SYSDATE, :OLD.employee_id,51Testing软件测试网2olvbk
:OLD.last_name, :NEW.last_name, :OLD.job_id,
9j1~1Btkt0:NEW.job_id, :OLD.salary, :NEW.salary );51Testing软件测试网[F`w:LW
END;51Testing软件测试网 Z/y'h hG0M#mp'j
/51Testing软件测试网X&W~7D*{;B
CREATE OR REPLACE TRIGGER derive_commission_pct
.Y1](o5aT2r$] qb0BEFORE INSERT OR UPDATE OF salary ON employees51Testing软件测试网&] Fe4v j(]
FOR EACH ROW51Testing软件测试网4B ?qpZ1mSz
WHEN (NEW.job_id = 'SA_REP')51Testing软件测试网,L},|T3tO-M
BEGIN
rxaz(D!Y7jKq0IF INSERTING51Testing软件测试网qrKg6^8ghD
THEN :NEW.commission_pct := 0;
FZ @8}PS0ELSIF :OLD.commission_pct IS NULL
V2od[dB2L"z0THEN :NEW.commission_pct := 0;
x5X*p3{IL0ELSE51Testing软件测试网wa ]'m$Tl+r-@%U8g
:NEW.commission_pct := :OLD.commission_pct + 0.05;51Testing软件测试网(a&XAte
END IF;
;? a i4je%H0END;
F Lyb'm.G7|a0/51Testing软件测试网)e+X^8{@F
3.INSTEAD OF TRIGGER:替换类型触发器
:H5c iDR4yjd?Mk;}0CREATE [OR REPLACE] TRIGGER trigger_name
Cs%]gIl#L'R d#@0INSTEAD OF51Testing软件测试网:k } NI_v
event1 [OR event2 OR event3]51Testing软件测试网U:@aj6vXM
ON view_name
blU%VS0[REFERENCING OLD AS old | NEW AS new]51Testing软件测试网4~9L_Z dW i_:sI|
[FOR EACH ROW]
i-v.T-g`'a0trigger_body
IXo6?+AybC,\b'^!l0不允许在触发器中进行事务的操作。51Testing软件测试网 N#w P.M*KI&}7_c
4.DDL 触发器:
5i&S#v5d#N M0CREATE [OR REPLACE] TRIGGER trigger_name51Testing软件测试网`D/{$ET'^L
timing//
&S8|G.DbWPm0[ddl_event1 [OR ddl_event2 OR ...]]
'I`Gs"r#D'a!Vs0ON {DATABASE|SCHEMA}
;}|h/[(~c+x n2oU#e0trigger_body51Testing软件测试网 Zh7w$i&a`?
当用户在数据库中对方案执行CREATE ALTER DROP 操作时触发。51Testing软件测试网*Q,X n(}*\
5.系统事件触发器:
Bj_ f#s#c.@y@S0CREATE [OR REPLACE] TRIGGER trigger_name51Testing软件测试网b ?f ptH
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网 prL8L#|
第 96 页,共 106 页51Testing软件测试网SrNU{%^TzJA$Oq
timing51Testing软件测试网 q._&N8l+cyH+R M
[database_event1 [OR database_event2 OR ...]]
)m#o0I6d)\0ON {DATABASE|SCHEMA}51Testing软件测试网p_2_)\/kU?
trigger_body51Testing软件测试网8s.X)Y9J] |M
在数据库启动后,和关闭前触发。
V7P9o6bRX{9t0对数据库权限进行CREATE ANY,ALTER ANY.....操作时触发。
~'j;j7n:Qh0如果是 ON SCHEMA ,该触发器是当前方案下的触发器,不能在连接其他用户登陆或断开时触发,
2V$X!I7J&nO0ON DATABASE 可以。
'T;p&CB`(mD0sys_context('userenv','ip_address'/'isdba'/'HOST'/'os_user');51Testing软件测试网+a^9J9om4\Qa
对日期格式的操作只能通过修改环境变量或用 TO_CHAR 来实现;51Testing软件测试网2H ?lc^qn!T.A
当触发器代码量大的时候,把触发器体整体放入一个存储过程中。51Testing软件测试网rnx RAs
CREATE [OR REPLACE] TRIGGER trigger_name51Testing软件测试网5C2Nw#I.?cQ,\
timing
r8?'r8h+b;t7A&s#Y0event1 [OR event2 OR event3]
.N+Ot zgw-G2i4o0ON table_name51Testing软件测试网"{[7ZS;@
[REFERENCING OLD AS old | NEW AS new]
-g#o }Yr\u0[FOR EACH ROW]
ovK]!Qjl0[WHEN condition]51Testing软件测试网m2Ed pl+X7z
CALL procedure_name;
m:m ?6|3f0CREATE OR REPLACE TRIGGER log_employee51Testing软件测试网'o[k0bD4K
BEFORE INSERT ON EMPLOYEES51Testing软件测试网n#fY$cs3pe
CALL log_execution51Testing软件测试网u'KD#G&fWj V
/
3F fH(QQ4`u0如果能用数据库的功能就用,不能的时候才考虑使用触发器。
D+N u!^/Y(Y(g?f0CREATE OR REPLACE TRIGGER owner_tri51Testing软件测试网c a0l}5p R#P8O
BEFORE DELETE OR INSERT OR UPDATE ON EMPLOYEES51Testing软件测试网1a-NQ\&LH6B@I
BEGIN
?9jEU&Y0@0if sys_context('userenv','HOST') not in ('305\wnj') then51Testing软件测试网9]G:I W-U1Qe|
RAISE_APPLICATION_ERROR(-20202,'You cat not do anything on this SCHEMA!');51Testing软件测试网x`"|;O]
end if;51Testing软件测试网To)Q0{1|] h3O:b
if user<>'HR' then
#L!|5\+xCEq B%fjx0RAISE_APPLICATION_ERROR(-20202,'You cat not do anything on this table!');51Testing软件测试网${"m4qm,YUx/t I0h
end if;
a2Yn ~ O9F$vq%n0end;51Testing软件测试网R*Y4k/}"\u*c5sG?v
8、审计51Testing软件测试网6nj/z\uegk+i
AUDIT INSERT, UPDATE, DELETE51Testing软件测试网^tY-}jM3p
ON departments51Testing软件测试网;?-JN}8lc`3S
BY ACCESS
F{/Hv,q)sP,X0H:}q0WHENEVER SUCCESSFUL;
&}#`rXX`Yh"z0每一次访问都会产生审计信息,记录用户对数据库对象的操作,操作时间和次数。但不会记录51Testing软件测试网Bz JQ w3z$^n
对哪些数据进行操作,51Testing软件测试网0]+?5of9[e?
使用触发器完成记录对哪些数据进行操作。51Testing软件测试网6IeD3O^
资源来自网络,仅供学习! Oracle 从入门到精通
xNR}3M:DC1o0第 97 页,共 106 页51Testing软件测试网9}e4c[-k*W;X%I
CHECK 约束只能做确切值的比较;51Testing软件测试网cbQ-x)`5PF
9、数据同步:51Testing软件测试网[uz'nZ0} c
stream
P-uu-se"PE0CREATE SNAPSHOT emp_copy AS SELECT * FROMemployees@ny;51Testing软件测试网/FH"R7b,p fR;O
四、backup and recover 备份与恢复51Testing软件测试网(\j,wr+K#X
1、备份与恢复概论:51Testing软件测试网U%F!G4K1z7]/a
􀂋 备份恢复的相关问题:
1`){qQ*Fk$ow3q0*、防止数据库在运行中可能发生的各种故障51Testing软件测试网?Av S6aDt8M
*、增加数据库的连续可用时间Mean-Time-Between-Failures (MTBF)
*ju"E)L v;`T0*、减低数据库的恢复用时间Mean-Time-To-Recover (MTTR)51Testing软件测试网 h4z!S%q?
*、最小化数据的丢失51Testing软件测试网 tN}r8e Q Gi
􀂋 故障类型:51Testing软件测试网*I5QJ)~vQ1q!X
*、语句失败51Testing软件测试网LE`*W|"o}z5L
*、用户进程失败
\*BB0I8~!U(]5H0*、实例失败51Testing软件测试网Xyx-_%kq ?(R
*、用户错误51Testing软件测试网.OM&Bi-@ Cog
*、介质故障
Z _:_!n RU2u0*、网络故障
Ft2C.cA+q$y'^n0􀂋 引起语句失败的原因:51Testing软件测试网X)kpLf:vk
*、应用的逻辑错误51Testing软件测试网,Vo o6zi_5{
*、试图在表中存放不合法的数据
}OuL)wa3jcw+Z0*、试图执行无权限的操作
.nD4~jy&{&G0*、试图创建表,但是已经超过了空间配额的限制
EO*`+D{`0*、试图对表执行 INSERT 或者 UPDATE 操作,导致新区的分配,但是在表空间上已经没有足够
9h3O0EX m$o~-I0的自由空间
*rb,_ \}Bl-KP{0􀂋 解决语句的失败:
i r2kn_.{1c3\ ^0*、修改程序的逻辑流.51Testing软件测试网@G2j)i/V)F
*、修改并重新执行SQL 语句.
)\8mfG o6]+o i0*、提供必要的数据库权限.
US'DW'm#I0*、使用 ALTER USER 命令改变用户的配额.
,C?1`2Jp\_{0*、为表空间增加新的空间.51Testing软件测试网\k*_ Zs8Jm6G]
*、Oracle9i 给用户了当因空间不足导致应用挂起时,通过分配空间而使挂起程序继续执行的
(EQ"qkB3Sf0能力.51Testing软件测试网u4hM#tl
􀂋 用户进程失败的原因:
Y1~3_\p6Gn)w D0*、用户异常的断开了会话.
:If;H a z)G0*、用户会话被非正常终止.
%R{KDl_4wlR Ey0*、用户的程序触发了地址异常,导致了会话的终止.
@:HN/?i*yG{9K0􀂋 解决用户进程的失败:51Testing软件测试网Wddqgv
资源来自网络,仅供学习! Oracle 从入门到精通
G^H/K};S0第 98 页,共 106 页51Testing软件测试网v7z D1Y2~ l%sm
*、PMON 进程自动检测用户进程的非正常终止.
(X BN.x h;Rq(] m0*、PMON 自动回滚事务并释放所有被用户占用的资源和锁.51Testing软件测试网2lwI4C\7H
􀂋 用户错误:51Testing软件测试网C0GyKu9z3bKm
就是连接到数据库的用户有意或无意地做了删除了某些不该删除的数据或更新了某些不该更51Testing软件测试网$Dq?2CpU%EI
新的数据等等不该做的事。51Testing软件测试网"q0AzZOU
􀂋 解决用户错误:51Testing软件测试网7\+LP P7w_gY m
*、培训数据库用户.51Testing软件测试网1sP\B/Nq
*、从以前的备份中恢复.51Testing软件测试网X"g$X4}2p$B?
*、从导出的文件中导入表.51Testing软件测试网~_/yn4PPZq d)r;P
*、使用 LogMiner 确定出现错误的时间.51Testing软件测试网2o[B5B/{ ^%N9Y
*、执行基于时间的恢复.51Testing软件测试网\DgD&oE C\
*、使用 LogMiner 执行对象级的恢复.
B{ ]E5c.n0*、使用 FlashBack 察看并修复历史数据.
'Yj+O2v*w KEd0􀂋 介质故障的原因 :
n M%l+i |7v1k,S0*、磁盘驱动器头损坏51Testing软件测试网!pz7CA WG oaV7]Z
*、读写数据文件时遇到了物理故障
;g:D{(WN9t0*、文件被意外的删除了51Testing软件测试网z5} kPJ9yX
􀂋 解决介质故障:
;N*w ^^H"pHJ0*、恢复策略依赖于选择了哪种备份方法以及那些文件需要恢复.
v BPz l.d.pP0*、如果可能,使用从上一次备份开始产生的所有归档重做日志文件执行恢复.51Testing软件测试网Z*i;S-U|8i pG2D
2、定义一个备份、恢复策略:51Testing软件测试网pP?J7@
*、商业需求:51Testing软件测试网dyZ6gU E d H{r N
恢复所需时间最少(Mean-Time-To-Recover)51Testing软件测试网(u:O T#iGn
连续无故障时间最长(Mean-Time-Between-Failure)51Testing软件测试网v)TC2e-oX+Ft*w'PE
备份策略的制定是一个持续的过程,需要不断的调整
/R#zS4T3]3p ~$_,M0*、操作需求:
&e8o$g|`4As*HZ-`d m024-hour 的连续操作51Testing软件测试网!{I0^VN;]5k$J
能不能在数据库运行时执行策略的测试,有没有完善的备份恢复文档
m6h D X7eT?L*rUa"_0数据库的数据是不是不断变化的51Testing软件测试网a ^n WyMx ^ @ a
*、技术上的考虑:51Testing软件测试网%Ip c'L4LJr
资源方面: 硬件, 软件, 电源, 以及时间51Testing软件测试网7| @ mEA0Hd
执行操作系统级数据文件的物理影像拷贝
Rqi/mf ^0执行数据库对象的逻辑拷贝
LbsyG0数据库的配置51Testing软件测试网*`b A4_P_+l
事务的大小也影响着备份的频率51Testing软件测试网K8bHa_ t
*、灾难恢复的问题:
q K i4U q9ms0如果遇到天灾人祸,对具有备份策略的数据库有多大的影响?51Testing软件测试网rw,np]W{
地震, 洪水, 火灾51Testing软件测试网#F;u Z(q1R;D8?D y
机器完全丢失
2? wI N Gfh0软硬件的存储故障51Testing软件测试网OKA:NjA4I7G
数据库的关键人物不在了, 例如数据库管理员51Testing软件测试网(BOU3y U"Nn*V]U
能不能周期性的测试备份恢复策略51Testing软件测试网 G2P+^pbu+g4O&R0Y
根据以上四大方面的各种因素以及各个的不同情况来定义一个备份与恢复的策略。
A,G/g`)`!Dj(u2A0资源来自网络,仅供学习! Oracle 从入门到精通
{ ?'z7GlJ0第 99 页,共 106 页
)w4j-Z'~3SAQ03、数据库的同步:
!eVpHA1j;PY(S:k0*、所有的数据文件(除了离线状态和只读状态的)必须同步(数据文件的SCN 号与控制文件中
zy5? gogY;T,B0SCN 号相同)数据库才可以打开.51Testing软件测试网bzlD/Gtc"y
*、同步是基于当前的检查点的.51Testing软件测试网X^,JOC1o!@
*、应用重做日志文件中的修改记录以同步数据文件.51Testing软件测试网'b3k4e0J2G _ F
*、重做日志文件在实例恢复时被Oracle 服务器自动使用.
6kxHW_?^Y5F0K0􀂋 实例恢复的过程 :
0E`S#Zj4P2Z$[i01、出现数据不同步;
r|nAo4o].m02、前滚(redo);
+O2_Kg2}%G03、在数据文件中存在提交的数据和未提交的数据;
Q.a n _@0xs?)qL04、回滚(undo);51Testing软件测试网&P\U!K9t4Be5T~
5、文件中只剩下提交的数据;
9H-k8]6U;{3Rx0配置数据库的归档模式51Testing软件测试网V\i:Iid
􀂋 数据库的两种模式:
8ot3D&`(XGCX0非归档模式(noarchivelog) 如果对数据操作非常频繁的话一定要选择非归档模式。
]q;e^!X:_ p${0归档模式(archivelog) 不需要关闭数据库就可以恢复数据库,也可以实现数据库的不完51Testing软件测试网'y^FPr6gS
全恢复。
2w r&{!H-b(m%f0􀂋 改变归档模式:
Fae a4@ s8r3Dm01、SHUTDOWN IMMEDIATE51Testing软件测试网 nk:t$t lk"a
2、STARTUP MOUNT51Testing软件测试网v(r;mP"Qpzrf1O
3、ALTER DATABASE ARCHIVELOG/[NOARCHIVELOG];
H.w*F6GS8i7U04、ALTER DATABASE OPEN;
/g&G*F?:v)ZM!IE)T05、在切换模式后做数据库的完全备份;51Testing软件测试网 l _ JYPY1Mx)b%yB
􀂋 自动和手动归档:
Xb1re}2cj0自动:LOG_ARCHIVE_START=TRUE
g-v'klY4| p0手动:LOG_ARCHIVE_START=FALSE
M)|5})FOiq0􀂋 设置多个 ARCn 进程:51Testing软件测试网#M8x[N2zH2D
动态参数 LOG_ARCHIVE_MAX_PROCESSES 控制在实例启动时启动的归档进程数.
U5t,CTG0最多可以设置10 个ARCn 归档进程.51Testing软件测试网FPR*K5e[u
ARCn 进程数可以使用ALTER SYSTEM 命令改变.
S5oi)^8J3Y0ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 3;
:{$v%S3v4\ b0ALTER SYSTEM ARCHIVE LOG START [TO ‘?/dbs/arch’]; 切换为自动归档模式51Testing软件测试网:S/[S!M!?f] y A
使用LOG_ARCHIVE_DEST_n 最多可以设置10 个归档目的51Testing软件测试网gh {];Hrw9Sz
使用LOG_ARCHIVE_DEST_n 选项:
8n J8q\.Sb.?0*、可以设置归档目的为 MANDATORY (强制的,归档不成功就REOPEN)或者
JA%kOd]%^?G0OPTIONAL(可选的,默认).51Testing软件测试网5kWNp c I,b}
*、定义失败时重试等待的时间.
7W _ q.Q.wm0log_archive_dest_1="LOCATION=/archive MANDATORY REOPEN"51Testing软件测试网E!p[@&Z#[pM~
log_archive_dest_2="SERVICE=standby_db1MANDATORY REOPEN=600"51Testing软件测试网)|Uj8_j5@
log_archive_dest_3="LOCATION=/archive2 OPTIONAL"51Testing软件测试网 G/DGw?T
资源来自网络,仅供学习! Oracle 从入门到精通51Testing软件测试网$nUl v4vT$_@){
第 100 页,共 106 页51Testing软件测试网Q#[0b JX N
Log_archive_dest_1 必须为MANDATORY,其他随意
"eeQp/Gl0设置在本地成功归档的最少个数:
1y(H#x4S3O~p0LOG_ARCHIVE_MIN_SUCCEED_DEST 参数51Testing软件测试网R,_C5bCj
ALTER SYSTEM LOG_ARCHIVE_MIN_SUCCEED_DEST = n [scope = both];51Testing软件测试网 S3_)F(o.S6r;cZje1nG
一个在线重做日志组仅仅在下面的条件满足时可被重用:51Testing软件测试网7fh5\&F U }%Zx?1q
所有被设置为mandatory 的目的都已成功归档
Gz,\Plzl.SM0本地成功归档的目的数大于或等于LOG_ARCHIVE_MIN_SUCCEED_DEST 参数51Testing软件测试网 o7TN)b_P+U;h r'h(A
控制归档的目的:51Testing软件测试网].j0A&M^+I nrT
*、归档目的可以通过LOG_ARCHIVE_DEST_STATE_n 动态参数禁用.51Testing软件测试网d1yd c S
ALTER SYSTEM SET log_archive_dest_state_3 = DEFER
-^O {6C!R/Hy0*、也可以再次启用归档目的.
a{(bP%|2lUQ3UH6M0ALTER SYSTEM SET log_archive_dest_state_3 = ENABLE51Testing软件测试网 ky*_6W)o/s-{
使用 LOG_ARCHIVE_FORMAT 设置归档文件的命名格式, 日志序列号和线程号是默认51Testing软件测试网2I,nDh Y A?h(P(t
命名的一部分.
~@:OGa0设置归档文件的命名格式:
n-dmbh0/ORADATA/archive/ arch%s.arc
6KeT@+}~D3~0其中:
9ef ]Cd+fh4q f0LOG_ARCHIVE_DEST_n 控制 /ORADATA/archive/
NR^.w7_kA:ys0LOG_ARCHIVE_FORMAT 控制 arch%s.arc51Testing软件测试网^X6QO'Z,nDa V!V
􀂋 得到关于归档的信息:
O%vkn z'@B0*、V$ARCHIVED_LOG 已经成功的归档日志
e_.AF9gN k0*、V$ARCHIVE_DEST 归档目的的信息51Testing软件测试网 u4_ EGvw/g`C
*、V$LOG_HISTORY 日志历史
-|v?8s:w r)k9K?#hg0*、V$DATABASE
_}r%MfCt;_0Select log_mode from V$DATABASE;51Testing软件测试网k dP0rA/G%[3M
*、V$ARCHIVE_PROCESSES51Testing软件测试网5d o'K9U c+[L5w
􀂋 命令行:51Testing软件测试网#{8kb c9Wv2fal4U
ARCHIVE LOG LIST;
:y7|t dbc0show parameter archive --AS SYSDBA connected
u){%lb iu04、数据库的备份51Testing软件测试网 OdE_uL!] GL F
1.物理备份与逻辑备份:51Testing软件测试网Xc2jDQ0X&v&h
ORACLE 提供的 exp 和imp 实用程序可以处理ORACLE 数据库的逻辑备份和恢复。
)~-B.M0L-G"qW0exp 用与逻辑备份;
[f pv!I C*x7e k0imp 负责恢复这些逻辑备份;
m@ aIxR O0L0对于逻辑备份来说,时间点恢复是不可能的。
Ts*jfN0Zq$rK1C"Ey0下边介绍的备份和恢复的方法都是物理备份与恢复,对于此处的了解会有助与更好的使用RMAN。51Testing软件测试网4[u5M7[s2R A.B
资源来自网络,仅供学习! Oracle 从入门到精通
:kos Jbo0第 101 页,共 106 页51Testing软件测试网BN#o`|"I8H/CD;b+AR!V
􀂋 术语:
#g4i Rd w?hM01. 完整数据库备份 -- Whole database backup51Testing软件测试网)s.xFi ^cT\
目的数据库可能是打开或者关闭状态
wYF Y'U0备份所有的数据文件和控制文件
e0B$G xO0F(x02. 部分数据库备份 -- Partial database backups
&d[T\)NI&cI0表空间
nM F ZSxE0数据文件
6D o]j I0控制文件51Testing软件测试网*R{ ~q P
3. 一致的备份 -- Consistent backups51Testing软件测试网MXk%g)s
在数据库没有启动的情况下的备份又称为冷备份,SCN 号相同。
\)snX5i {/D04. 不一致的备份 -- Inconsistent backups
!a+h bg:M%N*U @({-iA P0在数据库打开状态下备份又称为热备份,SCN 号不同。
1uKN lG6G|0􀂋 察看视图以得到数据文件的信息:
BW|:pSy0V$DATAFILE
2eL;S&|6rK.xdy0V$CONTROLFILE
^P{*?b0V$LOGFILE51Testing软件测试网"hf8x;}1T.P
DBA_DATA_FILES51Testing软件测试网h/a8o:@W
􀂋 执行一致的完整数据库备份(NOARCHIVELOG 模式):51Testing软件测试网i$I w!onQE
1、SHUTDOWN IMMEDIATE
%F9b;C5QE02、操作系统COPY 所有的数据库数据文件、控制文件和联机重做日志文件;51Testing软件测试网 YY3PLx
3、重新启动数据库;
b~F-k+jMF/B0􀂋 在两种模式(NOARCHIVELOG 和ARCHIVELOG)下都可以进行脱机备份;51Testing软件测试网6p)`3o Dgiv+j?a
1. 打开数据库的备份的优势:51Testing软件测试网)i1\qF n_ s/R+\
*、维护了数据库的高可用性51Testing软件测试网/Sg|F^
*、可以在表空间或数据库级执行
`$YV U F{0*、提供了对不停顿的商业需求的支持51Testing软件测试网,tO$o2i0O{Pm
2. ARCHIVELOG 模式下的物理备份:冷备:
f L1aO7P01、SHUTDOWN IMMEDIATE
%PW3j@2wz:X%O'Ii02、操作系统COPY 所有的数据库数据文件
:P;C5o\U03、重新启动数据库51Testing软件测试网0a D)JR J/c
4、使用 ALTER SYSTEM SWITCH LOGFILE 命令强制执行一个联机重做日志的切换。一旦51Testing软件测试网E1N)O,CG
归档了联机重做日志,那么就备份所有的归档日志;51Testing软件测试网F*v^nLX
5、使用ALTER DATADBASE BACKUP CONTROL FILE TO TRACE 命令和ALTER DATABASE BACKUP51Testing软件测试网 ?t)S6WA7P0sOU
CONTROLFILE TO 'file_path' 命令创建一个控制文件的备份。51Testing软件测试网v }gh#M%X J
􀂋 备份表空间和数据文件:51Testing软件测试网Jk4}{G?5X
1、alter tablespace space_name begin backup;51Testing软件测试网hW8b~l
2、backup db_file.dbf(操作系统COPY)51Testing软件测试网J%S9\,s I@s7} C%q
3、alter tablespace space_name end backup;51Testing软件测试网 ^0I-@P7L5_ H
4、使用 ALTER SYSTEM SWITCH LOGFILE 命令强制执行一个联机重做日志的切换。51Testing软件测试网3tJt n1QM5t
5、一旦完成了日志的切换并归档了当前的联机重做日志,就备份左右的归档重做日志。51Testing软件测试网zCde&_h
需要注意的是:日志切换和归档日志的备份是必须的,这是因为恢复操作必须应用在备份期
7w?x5fpu%qL8N0间生成的所有重做。51Testing软件测试网B y.B-Su6HO` `Nd
资源来自网络,仅供学习! Oracle 从入门到精通
8tV R_-P|I:|[0第 102 页,共 106 页
6J([ `8d+[{:u6~ H-zs0SCN 冻结的表空间(BACKUP 状态)仍然可以对数据进行操作。51Testing软件测试网-O8]-ah+Q4D4}&H,d1T
􀂋 备份状态的信息:
m{'c"Ed0V$BACKUP51Testing软件测试网 G"tO'cc ZwA
􀂋 只读表空间备份的问题:
j,YFM7`!E5[$u0*、当表空间被切换到只读状态后,只需要备份一次.
_U&u1^ h4bl0*、在只读表空间切换回读写状态后,重新加入到正常备份的策略中.
e3bH.MP%zm ? S q0*、控制文件必须能够正确的表示出表空间的只读状态,否则必须执行数据库的恢复操作.51Testing软件测试网[s_#@(L.Fq#X
􀂋 手工执行控制文件的备份:
"^ w$\)U+Z!G2M0创建二进制映像
\gv(Mmq1H"`+CY0ALTER DATABASE BACKUP CONTROLFILE TO ‘control1.bkp`;打开状态下创建文本跟踪文件51Testing软件测试网%|0Z|P-G-Cw
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;51Testing软件测试网6heM FO4]i8R*}+K\
2.数据库的恢复
G j4_@ Z5M Y:{8D{01.在NOARCHIVELOG 模式下的恢复:51Testing软件测试网0s)s3M7s\9J N(^
1. 完全依赖手动备份。51Testing软件测试网X#o!]3Y+N)\ }&G
2. 必须恢复的文件:51Testing软件测试网}0Y$[ u5_
数据库数据文件;51Testing软件测试网4{+K:xCZ1|apM
控制文件;51Testing软件测试网6DUTen N
3. 可选的恢复文件:51Testing软件测试网bOV m!D o3Wy
重做日志文件;
3d7lt2R!I?1}.g0参数文件;
I hrXM)F!zz*^0口令文件;
6gp+r/?8K;q*a!d0可以简单的恢复所有的数据库数据文件、控制文件和联机重做日志文件,然后在启动数据库。51Testing软件测试网j/{ d_ V
这种恢复只能恢复到恢复到最后备份的时间点,而不能恢复这个备份时间点后的任何更改。51Testing软件测试网#@!lwi(B-I O9K,S1o F1R
任何数据库中的一个数据文件损坏都必须恢复所有的数据文件。51Testing软件测试网 i%v0FGXC,p]
2.在非归档方式不使用备份的重作日志进行恢复:51Testing软件测试网0mNV w"J]k$n
1.关闭数据库.
1Z;}#j}T J5| D[_02.从最近的完整数据库备份中回复数据文件和控制文件.
}$Up C ]03.执行基于cancel(放弃)的恢复.51Testing软件测试网3LPUdx(T%^_ M
4.使用RESETLOGS 选项打开数据库.
.f^ZW_-i#@` ld1p03.ARCHIVELOG 模式下的完全恢复:51Testing软件测试网]\Q inX
概念:51Testing软件测试网5IzcRsX RaD
􀂋 完全恢复:
H'S/i*j*vs%t]3y"VAK0使用重作日志记录或者增量备份以更新数据库到最接近当前的时间51Testing软件测试网:lNlO{(D
应用所有的重作日志记录
R W(M:O%r5cp0􀂋 不完全恢复:
?9Y'B@.w0资源来自网络,仅供学习! Oracle 从入门到精通
(C]\/Wu0第 103 页,共 106 页
j,[ H7o#En0使用备份和重作日志记录以生成一个非当前版本的数据库51Testing软件测试网uuAU:_2f
􀂋 完全恢复的优点和缺点:
c&PA2_'J8oth;]*R0优点:51Testing软件测试网n1dsE MPv
只需要回复丢失的文件51Testing软件测试网 NnB:M(^L2U%G1Sk
恢复所有数据到数据库故障的那一刻51Testing软件测试网.eWA`3pp&l6u2@0bi
恢复时间是回复丢失文件的时间与应用所有归档日志文件时间的总和
C A ]vc7@0缺点:
S2@BMA e CH0必须有从备份开始的所有归档日志文件
D3e8PG2^F X4];T0􀂋 决定哪个文件需要被恢复:51Testing软件测试网HZ?_[
*、察看V$RECOVER_FILE 视图以决定哪个数据文件需要被恢复51Testing软件测试网UX ~0D7F5[(X(P:~
*、察看V$ARCHIVED_LOG 以得到数据库的所有归档日志文件列表
1tq(U5`W.Pd)a0*、察看V$RECOVERY_LOG 得到所有在恢复中需要的归档日志文件
*o.l0O `%wbO{0􀂋 在恢复过程中使用归档日志文件:
'v N |,Y$?2H} A01. 为了改变归档的位置:51Testing软件测试网 b{4D2Q(@bkp
使用ALTER SYSTEM ARCHIVE LOG. . .命令.
a e8@ f*S"UH02. 为了自动应用归档日志文件:51Testing软件测试网3g&VBm/O2@Kc
在开始介质恢复前执行SET AUTORECOVERY ON 命令51Testing软件测试网2Z8SH5o mS9H)E
当提示输入归档日志文件时输入auto51Testing软件测试网X&c#[E!eA~
使用RECOVER AUTOMATIC. . . 命令.
Z2CX(T n+W0假顶数据库故障至少没有损坏当前每个联机重做日志组中的一个成员和没有备份的任何归档重
)Ng`h3k7jJ0Sjo8T0做日志,我们可以在ARCHIVELOG 模式恢复故障点的数据库。51Testing软件测试网2lvn%I s6|
如果丢失了归档的重做日志或联机重做日志就需要执行某种形式的时间点恢复;51Testing软件测试网N:E {h:G8\]
如果丢失了当前控制文件的所有副本,就需要恢复控制文件并执行不完全恢复;51Testing软件测试网W"WEc-w"M;j
1. 完全恢复步骤:51Testing软件测试网&BP'WvBT!]M
1、从备份中还原所有的数据库数据文件;51Testing软件测试网9h0LCz5VBn y@)PZ
2、还原所以备份的归档的重做日志;51Testing软件测试网Y:E"p wy(v
3、加载数据库(start mount);
Ae8X0?d04、恢复数据库(recover database);
'aa ]9H&{;zY+a05、ORACLE 提示应用归档的重做日志中的重做,在提示符下简单地输入AUTO,ORACLE 会自动
A8v A7s,XK%`a0应用 所有重做日志;
4r!}-_%A H%@+q06、一旦应用了所有的重做日志,就可以打开恢复的数据库(alter database open);
9ag [ _[9\&m.d0ARCHIVELOG 模式下的表空间恢复和数据文件恢复:
?P0Cn/ev02. 在数据库加载或数据库打开可执行表空间恢复和数据文件恢复。51Testing软件测试网.YZ8]0as"Cy Q6N
2.1 在打开阶段执行表空间恢复步骤:51Testing软件测试网{;tMs5L%Y6[
1、使表空间脱机(alter tablespace offline);
B7x3Qm)Q uZQ*j02、还原与要恢复的表空间相关联的所有数据文件;
+]:u'C9b+WM03、恢复表空间(recover tablespace);
8{W CaN0e5e x3w04、一旦完成了恢复,使表空间联机(alter tablespace online);51Testing软件测试网0T4wP#IQH
2.2 恢复数据文件步骤:
3KR&bUt7o*|4e6P01、使数据文件脱机(alter database datafile 'file_path' offline);
xj"sL l_:w+h*C+?2M02、还原所有要恢复的数据文件;
jNp"oJZ0资源来自网络,仅供学习! Oracle 从入门到精通
G;G O |]0第 104 页,共 106 页51Testing软件测试网S#o$oR6]#d*RT |5H
3、恢复数据文件(recover datafile);
NUYR I5B04、一旦完成了恢复,就可以是数据文件联机(alter database datafile 'file_path' online);51Testing软件测试网e5C)wn9p7hK'd;U
3.恢复一个从未备份过的数据文件:51Testing软件测试网D}P7p8A,?
*、丢失的数据文件从未备份过51Testing软件测试网_Rquk r)d AY S
*、如果丢失的是一个系统表空间的数据文件,则不能使用这种方法51Testing软件测试网}f.B j-U!A`*C9x
􀂋 步骤:
oRR6~*l}~M01、是数据文件或表空间OFFLINE;51Testing软件测试网VFP/Y(V El._|
2、应用归档日志重新创建数据文件;???
$C j5S2T"VNp)ER(s7o b03、open database;
B*\|y2_ I04、是表空间或数据文件ONLINE;51Testing软件测试网5Y`}D&`]
􀂋 控制文件的丢失:51Testing软件测试网%z)S.EY)I(e8D
如果在下列情况,可能需要重建控制文件:51Testing软件测试网RE7IZ'[jI"S
所有的控制文件由于故障而丢失51Testing软件测试网y:^"P kLM
数据库的名字需要被改变51Testing软件测试网mf;DPneA
控制文件的当前设置需要被改变
{2XW3O"|Z"G0[i0􀂋 恢复控制文件:51Testing软件测试网y;Rn/qhp;g&E
恢复丢失的控制文件的方法:51Testing软件测试网:n@fu7buh3no
使用当前的控制文件
2v eQO.A6Xq0创建一个新的控制文件51Testing软件测试网'EK/A t0R3J d2_
四种情况下重建控制文件:51Testing软件测试网V{%_J}0C9Jtx
数据库一些特性参数要改变的时候;
b8SF_^aC.]0数据库需要重命名的时候;51Testing软件测试网K` w.WX
控制文件全部丢失的时候;
9X5N z8bg0使用一个备份的控制文件
Xw3x/Q#MM%Lyh,@04、ARCHIVELOG 模式下的不完全恢复:51Testing软件测试网4s'I,X#BM!q:j?WM
􀂋 执行不完全恢复的原因:
(d(TFW s@D0由于归档文件丢失导致完全恢复失败.51Testing软件测试网5I}6O R}v3CjD'U
所有的控制文件丢失.51Testing软件测试网'c%V? {^'Oi W
所有未归档的重作日志文件和数据文件丢失.
_8b-@0t2yZ5OQ0l0用户错误
1[a+P%lq0l7B\\u#u0一个重要的表被删除.51Testing软件测试网2knnI,z&U0B-w
不正确的数据被提交.
`N'H"J-H2nJ!X0􀂋 执行不完全恢复的注意事项:51Testing软件测试网Qb1A5u6K-o
必须仔细的遵循步骤执行.
sC0vl:z8VV i0在恢复的前后都要执行备份.51Testing软件测试网:]V:Pt7p,RR G'j
在恢复完成后一定要检验恢复是否成功.
u"\ B~({5?0备份数据库,删掉以前的归档日志文件.
3L8TUJ7g(o)D A0注意这些的原因主要在与如果不完全恢复执行的不好很可能造成数据库的不要一致从而不能正
@Mm/WS0常地启动数据库.
uXu'[.l3X1Xi+d01. 用户管理的执行不完全恢复的过程 :
xqbx-];i01、关闭数据库, 执行完整的数据库备份.必须备份控制文件和重作日志文件.
lsp BKl"x0资源来自网络,仅供学习! Oracle 从入门到精通
is8sD6a4|!x;bL0第 105 页,共 106 页
S\sKq;N/T }.`U02、还原所有数据文件. 不要回复控制文件,重作日志文件,口令文件,或者参数文件.
J[G[ j _03、装载数据库.
y9tNM Tk5l~04、恢复数据文件到失败的时间点.RECOVER DATABASE UNTIL TIME ‘error_date’[using
(~(g6_MuD,V:f0backup controlfile];
([xCl;W Gvi e05、使用RESETLOGS 选项打开数据库.ALTER DATABASE OPEN RESETLOGS;
!{Z r NW-Z3i'~06、校验.51Testing软件测试网3g7h6|X%q
7、执行关闭数据库的备份.
8j%}bBF u0􀂋 丢失了当前的重做日志文件:51Testing软件测试网8PVHXF%h s
1、如果数据库是关闭的:
F i9R(@7[f02、尝试打开数据库.51Testing软件测试网OB_4r7d6k
3、找到当前的日志序列号.51Testing软件测试网C9R8\0LV
4、恢复数据库直到 cancel.
4Z|f m2d:US05、如果必要删除、重建日志文件.51Testing软件测试网 t,B4ounf-b'mQ7k
6、使用 RESETLOGS 选项打开数据库.
[/pn2edk9`#UN07、执行完整数据库备份.
nvYn3Ldb02. ARCHIVELOG 模式下的时间点恢复:51Testing软件测试网5mtW5~iK8{*yEn'n
如果要恢复某个时间点的表空间,我们需要恢复相同时间点的整个数据库(除非执行表空间的时51Testing软件测试网3\ z;M%OtJ_;]
间点恢复,但那是另一种恢复形式)
${ s:[SRC0执行步骤(简述):51Testing软件测试网E V?0g3w LW
1、从备份中恢复所有数据库数据文件,这个备份在要恢复数据库的时间点之前结束。
"DX3ZZuDu02、使用如recover database until time '10-10-2002 21:00:00'的命令并且应用所需的重51Testing软件测试网s$v Z5S:k1G,d"B
做日志,恢复选定时间点的数据库;51Testing软件测试网 \se)oUk
3. 使用 SCN 号恢复数据库:51Testing软件测试网Yv z%f0g)x
1、从备份中恢复所有数据库数据文件,这个备份在要恢复数据库的时间点之前结束。51Testing软件测试网/o1?8_5\|H
2、使用如recover database until change '221122' 的命令并且应用所需的重做日志,恢
V3H0]~)p0复选定SCN 的数 据库;51Testing软件测试网h^?)Ac(x
3、一旦完成恢复,打开数据库;51Testing软件测试网+C m~,jL&x#fo
􀂋 应用数据库的更改并在应用指定的归档的重做日志之后手动取消进程:51Testing软件测试网Q#wO4B4`8z-X]9@ lF1m
1、从备份中恢复所有数据库数据文件,这个备份在要恢复数据库的时间点之前结束。
;Kq"_1Xk,msR;`02、使用recover database until cancel 命令并且应用所需的重做日志,恢复选定时间点
h y+TRF0的数据库。应用了最后一个归档的重做日志后,可以简单的执行cancel 命令来结束日志应用;51Testing软件测试网L;B S-]:h2U#Tp&I
3、一旦完成恢复,打开数据库;
op+~x-Tf0J0执行时间点恢复(或有关这一问题的任何恢复)时一定要牢记数据库一致性概念.51Testing软件测试网8~.J$N Eu*d0P yQPs
资源来自网络,仅供学习! Oracle 从入门到精通
.w"X"G~o4K({0第 106 页,共 106 页

TAG:

 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 109794
  • 日志数: 89
  • 图片数: 1
  • 文件数: 15
  • 建立时间: 2013-03-01
  • 更新时间: 2018-08-23

RSS订阅

Open Toolbar