ZTE-SOracle-创建包和触发器十五讲
- 格式:ppt
- 大小:463.00 KB
- 文档页数:28
一、新中新后台用户名密码+启动关闭数据库%%%%%%%%%%%%%%%%%%%%%%%%%%%%%卢欢所建syntongIP:222.206.1.187实例(也既是服务):syntongSYS用户密码:oracleSYSTEM用户密码:oracle新建用户school 密码school_passwd新建用户iddbuser 密码idpasswd %%%%%%%%%%%%%%%%%%%%%%%%%%%%%******************************************************1.在oracle用户下& dbca 注意在第10步的时候,选择选项卡character sets 选择choose from *the list of character sets*2.*****************************************************启动步骤:*******************建立新库图形界面在oracle用户下& dbca**************************************配置监听程序图形界面在oracle用户下& netmgr*******************su - oracle[oracle@websvr1 oracle]$ sqlplus /nologSQL> connect / as sysdbaSQL> startupSQL> quit[oracle@websvr1 oracle]$ lsnrctl start可用[oracle@websvr1 oracle]$ lsnrctl status 查看监听是否已经启动关闭步骤:su - oracle[oracle@websvr1 oracle]$ lsnrctl stop[oracle@websvr1 oracle]$ sqlplus /nologSQL> connect / as sysdbaSQL> shutdown immediateSQL> quit二、数据库的导入和导出导出:导入数据库:身份imp school/school@syntong file=/tmp/111.DMP,222,DMP log =app/oracle/file/log/DEV_PMODOC.log full=y owner=school钱包imp school/school@syntong file=/tmp/111.DMP,222,DMP log =app/oracle/file/log/DEV_PMODOC.log full=y ignore=y三、建立数据库实例和建立新中新后台程序的步骤*******************建立新库图形界面在oracle用户下& dbca**************************************配置监听程序图形界面在oracle用户下& netmgr*******************一卡通金融中心创建数据库syntong(小于注:在oracle用户下& dbca 注意在第10步的时候,选择选项卡character sets 选择choose from the list of character sets ,最后选择ZHS16GBK…….)创建表空间school_data,school_index,school_histrjn,school_temp(临时表空间)创建数据库用户school,缺省表空间为school_data,临时表空间为school_temp安装一卡通电子钱包中心软件创建用户school,school用户属于school用户组,(school用户也可属于dba组),用户组school;把安装文件从光盘中拷贝到/tmp下;以root用户注册,执行以下命令:#cd /tmp#./install (若权限不够,修改其权限)A、如果在安装时找不到oracle路径则可以修改install文件路径B、安装完毕后可根据实际的中心数据的IP和前置机的IP来修改etc/config.dat文件注:这两条不要随便更改。
Oracle数据库规划设计和运行维护方案(V1。
0)目录1。
前言 (6)1。
1. 编写目的 (6)1。
2。
方案说明 (6)1.3. 预期读者 (7)2。
数据库部署模式 (7)2.1. 单机模式 (7)2.2. 双机热备模式(HA模式) (8)2.3。
集群模式(RAC) (9)2。
4. 主从模式(DataGuard) (10)2.5。
混合模式(DataGrard+RAC) (10)2。
6。
数据库运行模式选择 (11)3。
系统特点和数据库类型 (11)3。
1。
业务系统的特点 (11)3。
1.1。
OLTP特点 (12)3.1.2。
OLAP特点 (13)3。
2。
数据库的规模 (13)3.3。
数据库版本建议 (13)4. 数据库运行环境规划 (14)4.1。
主机规划 (14)4。
2. 网络规划 (15)4.3. 存储规划 (17)5。
数据库安装部署规划 (19)5.1。
软件安装路径 (19)5。
2. 表空间设计 (19)5.2.1. 业务数据量估算 (19)5。
2。
2。
表空间使用规则 (21)5.2.3。
表空间的概念和分配原则 (25)5。
2.4。
表空间的参数配置 (26)5.2。
5. Undo/temp表空间的估算 (30)5.2。
6. 表的参数设置 (30)5.2。
7. 索引的使用原则 (31)5。
3. 文件设计 (32)5.3。
1. RAC配置文件 (32)5.3。
2. 参数文件 (33)5。
3。
3. 控制文件 (34)5。
3.4。
重做日志文件 (35)6。
数据库应用规划 (37)6。
1。
数据库用户设计 (37)6。
1。
1。
用户权限规划 (37)6.1.2。
用户安全实现 (39)6。
1。
3. 用户类型及角色命名规范 (41)6.2. 数据库分区 (44)6.2。
1. 数据库分区介绍 (44)6。
2.3. 物理分割 (45)6。
2。
4. 数据分区的优点 (45)6.2.5. 数据分区的不足 (45)6.2。
Oracle数据库应用复习题(参考答案见P15)一、选择题1、以下()内存区不属于SGA。
A. PGAB. 日志缓冲区C. 数据缓冲区D. 共享池2、一个数据库由若干个()组成。
A.段B. 表空间C. 块D. 区3、在Oracle 中创建用户时,若未使用DEFAULT TABLESPACE 关键字,则Oracle就将()表空间分配给用户作为默认表空间,将()表空间分配给用户作为临时表空间。
A.TEMPB. USERSC. SYSTEMD. EXAMPLE4、监听并接受来自客户端应用程序连接请求的服务是()。
A. OracleCSServiceB. OracleDBConsoleSIDC. OracleJobSchedulerD. OracleOraDb10g_home1TNSListener5、()是一个小二进制文件,它维护着数据库的全局物理结构,用以支持数据库成功地启动和运行。
A. 数据文件B. 控制文件C. 日志文件D. 参数文件6、()进程把修改过的数据块从内存写回到数据库的数据文件中。
A. DBWRB. LGWRC. CKPTD. SMON7、()的任务是将已经写满的联机日志文件复制到归档日志文件中。
这仅在数据库运行在归档模式下时才发生。
A.恢复进程B. 进程监视进程C. 作业队列D. 归档进程8、()数据库应用架构又称为“瘦客户机”模式。
A. 多磁盘结构B. 两层模式C. 三层模式D. 磁盘映像9、数据字典表保存表、索引、视图以及所有其他数据结构的信息。
它们属于()用户。
A. SYSB. SYSTEMC. SCOTTD. SYSMAN10、如果用户要安装、查看和卸载Oracle 数据库系统,就需要使用()。
A. 通用安装器B. 数据库配置助手C. 企业管理器D. 网络配置助手11、如果用户需要在安装好Oracle的系统上创建、修改和删除数据库,就需要使用()。
A. 通用安装器B. 数据库配置助手C. 企业管理器D. 网络配置助手12、要删除一个大表里的所有记录,并释放占用的表空间,可以使用()命令。
Oracle触发器trigger详解触发器相关概念及语法,供⼤家参考,具体内容如下概述本篇博⽂中主要探讨以下内容:什么是触发器触发器的应⽤场景触发器的语法触发器的类型案例数据:触发器的概念和第⼀个触发器数据库触发器是⼀个与表相关联的,存储的PL/SQL 语句。
每当⼀个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle⾃动执⾏触发器中定义的语句序列。
举个简单的例⼦:当员⼯表中新增⼀条记录后,⾃动打印“成功插⼊新员⼯”create or replace trigger insertStaffHintafter insert on xgj_testfor each rowdeclare-- local variables herebegindbms_output.put_line('新增员⼯成功');end insertStaffHint;触发器的应⽤场景复杂的安全性检查数据的确认数据库审计数据的备份和审计触发器的语法CREATE [OR REPLACE] TRIGGER trigger_name{BEFORE | AFTER }{INSERT | DELETE | UPDATE [OF column [, column …]]}[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]ON [schema.]table_name | [schema.]view_name[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}][FOR EACH ROW ][WHEN condition]PL/SQL_BLOCK | CALL procedure_name;其中:BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发⽅式,前触发是在执⾏触发事件之前触发当前所创建的触发器,后触发是在执⾏触发事件之后触发当前所创建的触发器。
oracle触发器的实例(转)触发器使⽤教程和命名规范⽬录触发器使⽤教程和命名规范 11,触发器简介 12,触发器⽰例 23,触发器语法和功能 34,例⼀:⾏级触发器之⼀ 45,例⼆:⾏级触发器之⼆ 46,例三:INSTEAD OF触发器 67,例四:语句级触发器之⼀ 88,例五:语句级触发器之⼆ 99,例六:⽤包封装触发器代码 1010,触发器命名规范 111,触发器简介触发器(Trigger)是数据库对象的⼀种,编码⽅式类似存储过程,与某张表(Table)相关联,当有DML语句对表进⾏操作时,可以引起触发器的执⾏,达到对插⼊记录⼀致性,正确性和规范性控制的⽬的。
在当年C/S时代盛⾏的时候,由于客户端直接连接数据库,能保证数据库⼀致性的只有数据库本⾝,此时主键(Primary Key),外键(Foreign Key),约束(Constraint)和触发器成为必要的控制机制。
⽽触发器的实现⽐较灵活,可编程性强,⾃然成为了最流⾏的控制机制。
到了B/S时代,发展成4层架构,客户端不再能直接访问数据库,只有中间件才可以访问数据库。
要控制数据库的⼀致性,既可以在中间件⾥控制,也可以在数据库端控制。
很多的青睐Java的开发者,随之将数据库当成⼀个⿊盒,把⼤多数的数据控制⼯作放在了Servlet中执⾏。
这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的⼯作量。
从架构设计来看,中间件的功能是检查业务正确性和执⾏业务逻辑,如果把数据的⼀致性检查放到中间件去做,需要在所有涉及到数据写⼊的地⽅进⾏数据⼀致性检查。
由于数据库访问相对于中间件来说是远程调⽤,要编写统⼀的数据⼀致性检查代码并⾮易事,⼀般采⽤在多个地⽅的增加类似的检查步骤。
⼀旦⼀致性检查过程发⽣调整,势必导致多个地⽅的修改,不仅增加⼯作量,⽽且⽆法保证每个检查步骤的正确性。
触发器的应⽤,应该放在关键的,多⽅发起的,⾼频访问的数据表上,过多使⽤触发器,会增加数据库负担,降低数据库性能。
触发器的使用1触发器资料来源:《/view/71791.htm?fr=ala0_1_1》触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。
触发器可以从DBA_TRIGG ERS ,USER_TRIGGERS 数据字典中查到。
1.1 数据库领域名词触发器可以查询其他表,而且可以包含复杂的SQL语句。
它们主要用于强制服从复杂的业务规则或要求。
例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。
然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。
如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
1.2 创建触发器的SQL语法DELIMITER |CREATE TRIGGER `<databaseName>`.`<triggerName>`< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >ON <tableName>FOR EACH ROWBEGIN--do somethingEND |1.3 触发器的优点触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。
触发器可以强制比用CHECK 约束定义的约束更为复杂的约束。
与CHECK 约束不同,触发器可以引用其它表中的列。
例如,触发器可以使用另一个表中的SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。
触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
OracleTNS314协议分析——2、基础包结构TNS包头格式每个数据都包含⼀个通⽤包头,包含数据的长度、校验和解析信息Packet Header8通⽤包头Data可变数据Packet HeaderLength2包的长度,包括通⽤包头Packet check sum2包的校验和PacketType1包类型Reserved1保留Header check sum2通⽤头的校验和Packet TypesCONNECT 1连接ACCEPT 2连接接受ACK 3REFUSE 4拒绝连接REDIRECT 5重定向DATA 6数据包,⼤多数包属于此包,包含SQL命令及返回等NULL DATA7空ABORT 9RESEND 11重发MARKER 12提⽰错误等ATTENTION 13CONTROL 14MAX 19通⽤包头解析⽰例通⽤包头解析代码⽰例local pktLen=string.unpack(">I2",lengthdata)local data,err=reqsock:receive(pktLen-2)if(err) thenngx.log(ngx.ERR,"err when reading packet")breakendngx.log(ngx.DEBUG,"data"..data:hex())local pktType=string.unpack(">B",data,3)PacketType 0x06 Data包格式客户端与服务端除建⽴和断开连接外,基本上全部使⽤Data包进⾏交互,包括设置协议参数、认证、SQL请求与返回等,此包内部⼜有很多类型和⼦类型,不同类型和⼦类型差异较⼤,基础格式如下Data flag2状态Command packet可变命令包………Command packet可变命令包DataFlagDataFlag⼀般为0x0000,DATA结束时为0x0040,其他情况少见,详细见下表Send token0x0001Request Confirmation0x0002Confirmation0x0004Reserved0x0008UNKNOWN0x0010More Data to Come0x0020End of File0x0040data传输结束时可见Do Immediate Confirmation0x0080Request to send0x0100Request Nt Trailer0x0200Command PacketCommand Packet可以有多个,每个CommandPacket也有⾃⼰的类型DataID,有的DataID还有⾃⼰的⼦功能号叫做CallID,DataID类型除特殊的SetProtocol和Network等包外,⼀般请求包包含⼀个序号字节,⽽返回值没有这个序号DataID1Command 功能CallID1⼦功能,此字段可选,有些DataID⽆CallIDSeq1序号(返回包⽆此序列号)DataIDSET_PROTOCOL1连接后设置协议参数SET_DATATYPES2连接后设置数据格式等USER_OCI_FUNC3调⽤OCI函数,有⼦类型,传输sql命令等⽤此RETURN_STATUS4返回状态,也有⼦命令ACCESS_USR_ADDR5ROW_TRANSF_HEADER6SQL命令返回具体数据ROW_TRANSF_DATA7RETURN_OPI_PARAM 8常见不需要返回数据的命令请求返回如Insert,后续OCI_RESPONDFUNCCOMPLETE9NERROR_RET_DEF10IOVEC_4FAST_UPI11常见不需要返回数据的命令请求返回,后续OCI_RESPONDLONG_4FAST_UPI12INVOKE_USER_CB13LOB_FILE_DF14WARNING15DESCRIBE_INFO16常见在sql请求后返回⼀些描述信息,⽐如列名PIGGYBACK_FUNC17有⼦命令,常后续OCI_FUN_CALL,后续OCI_FUN_CALL携带真实命令SIG_4UCS18FLUSH_BIND_DATA19OCI_RESPOND23⼀般⽤于返回信息,基本所有USER_OCI_FUNC的返回都会包含此包,此包最后⼀般有服务端返回客户端的⽂字消息,(312协议未见)SNS0xdeadbeef额外安全⽹络协议交换XTRN_PROCSERV_R132XTRN_PROCSERV_R268USER_OCI_FUNCDataID 为3时为USER_OCI_FUNC,SQL的执⾏基本是通过此命令完成,此命令有⼦命令,具体取值如下(参见wireshark tns desector)1 Logon to Oracle41 Parse for syntax and SQL Dictionary lookup81 2nd Half of Logon2 Open Cursor42 Continue serving after EOF82 1st Half of Logon3 Parse a Row43 Array describe83 Do Streaming Operation4 Execute a Row44 Init sys pars command table84 Open Session (71 interface)5 Fetch a Row45 Finalize sys pars command table85 X/Open XA operations (71 interface)8 Close Cursor46 Put sys par in command table86 Debugging operations8 Close Cursor46 Put sys par in command table86 Debugging operations9 Logoff of Oracle47 Get sys pars from command table87 Special debugging operations10 Describe a select list column48 Start Oracle (V6)88 XA Start11 Define where the columngoes49 Shutdown Oracle (V6)89 XA Switch and Commit12 Auto commit on50 Run Independent Process (V6)90 Direct copy from db buffers to client address13 Auto commit off51 Test RAM (V6)91 OKOD Call (In Oracle <= 7 this used to be Connect14 Commit52 Archive operation (V6)93 RPI Callback with ctxdef15 Rollback53 Media Recovery - start (V6)94 Bundled execution call (V7)16 Set fatal error options54 Media Recovery - record tablespace to recover(V6)95 Do Streaming Operation without begintxn17 Resume current operation55 Media Recovery - get starting log seq # (V6)96 LOB and FILE related calls18 Get Oracle version-date string56 Media Recovery - recover using offline log (V6)97 File Create call19 Until we get rid of OASQL57 Media Recovery - cancel media recovery (V6)98 Describe query (V8) call20 Cancel the current operation58 Logon to Oracle (V6)99 Connect (non-blocking attach host)21 Get error message59 Get Oracle version-date string in new format100 Open a recursive cursor22 Exit Oracle command60 Initialize Oracle101 Bundled KPR Execution23 Special function61 Reserved for MAC; close all cursors102 Bundled PL/SQL execution24 Abort62 Bundled execution call103 Transaction start attach detach25 Dequeue by RowID65 For direct loader: functions104 Transaction commit rollback recover26 Fetch a long column value66 For direct loader: buffer transfer105 Cursor close all27 Create Access Module67 Distrib. trans. mgr. RPC106 Failover into piggyback28 Save Access ModuleStatement68 Describe indexes for distributed query107 Session switching piggyback (V8)29 Save Access Module69 Session operations108 Do Dummy Defines30 Parse Access ModuleStatement70Execute using synchronized system commitnumbers109 Init sys pars (V8)31 How many items?71 Fast UPI calls to OPIAL7110 Finalize sys pars (V8)32 Initialize Oracle72 Long Fetch (V7)111 Put sys par in par space (V8)33 Change User ID73 Call OPIEXE from OPIALL: no two-task access112 Terminate sys pars (V8)34 Bind by reference positional74 Parse Call (V7) to deal with various flavours114 Init Untrusted Callbacks35 Get n'th Bind Variable76 RPC call from PL/SQL115 Generic authentication call36 Get n'th Into Variable77 Do a KGL operation116 FailOver Get Instance call37 Bind by reference78 Execute and Fetch117 Oracle Transaction service Commit remote sites38 Bind by reference numeric79 X/Open XA operation118 Get the session key39 Parse and Execute80 New KGL operation call119 Describe any (V8)40 Parse for syntax (only)120 Cancel All其他⼀些DataID 与CallID组合(摘抄⾃《ORACLE协议分析》)DataID CalID类型说明使⽤0x010x05请求CLIENT TYPE0x010x06Set Protocol0x010x2c IDENT0x020x00RESET0x020x01CHAR_MAP0x020x540x030x010x030x02SQL_OPEN0x030x03QUERY0x030x04QUERY SECOND0x030x05FETCH MORE0x030x080x030x09DISCONNECT0x030x0E0x030x27SET_LANG0x030x27SET_LANG0x030x2B DESC_COLS0x030x3B DB VERSION0x030x47FETCH0x030x51Set password0x030x52Set user0x030x54HANDSHAKE40x030x5E SQL0x030x73AUTH20x030x76AUTH10x030x77查询表结构信息DESC0x040x01ACK0x040x02ACK0x040x05ACK0x060x00More Row Result Info0x060x01First Row Result Info0x080x010x080x050x080x080x080x9c Db version0x100x19Field Info SELEC返回0x110x690x110x6b0x110x78Data包中常见的数据结构及解析变长字符串变长字符串⽤⼀个前序⼀个字节长度标志的序列来表⽰Data Length1返回列数Data Data Length⽐如:05 73 63 6f 74 7405标识字符串长度后⾯的字符串内容为ASCII码,表⽰scott变长字符串数组变长字符串数字开头为fe,具体格式如下Big Data Identify10xfeData Length1Data Data Length………Data Length1Data Data LengthEnd Mark1⽰例数字格式(参《ORACLE协议分析》未完全验证)正数Id1C0+整数部分长度整数部分Intlength=Id-c0⼩数部分DecLength=length-intlength-1⼩数部分DecLength=length-intlength-1注:1. 数据的第⼀位标志整数部分长度2. 整数部分长度+⼩数部分长度=数据总长度-13. 整数部分从后向前每两位(代表0到100)⽤⼀个字节(⼗六进制)表⽰,且为⼗六进制值-14. ⼩数部分从后向前每两位(代表0到100)⽤⼀个字节(⼗六进制)表⽰,且为⼗六进制值-15. 如果没有⼩数部分,Intlength+1〉length(为数字长度),则后⾯有(Intlength+1-length)位(只传输位)值为0的数据没有传输负数Id13f-整数部分长度整数部分Intlength=3f-id⼩数部分DecLength=length-intlength-1Magic10x661. 数据的第⼀位标志整数部分长度2. 整数部分长度+⼩数部分长度=数据总长度-23. 整数部分从后向前每两位(代表0到100)⽤⼀个字节(⼗六进制)表⽰,且为101-⼗六进制值4. ⼩数部分从后向前每两位(代表0到100)⽤⼀个字节(⼗六进制)表⽰,且为101-⼗六进制值5. 如果没有⼩数部分,Intlength+2〉length(为数字长度),则后⾯有(Intlength+2-length)位(只传输位)值为0的数据没有传输⽇期格式(参《ORACLE协议分析》未完全验证)Year11Year1-100Year21Year2-100Month1MonthDay1DayHour1Hour-1Minute1Minute-1Second1Second-1注:1. Year1为年前两位,值为year1-1002. Year2为年后两位,值为year2-1003. Month为⽉,值为month4. Day为⽉,值为Day5. Hour为⽉,值为Hour-16. Minute为⽉,值为Minute-17. Second为⽉,值为Second-1。