Oracle Web ADI 开发笔记(抽丝拨茧篇)
- 格式:pdf
- 大小:3.28 MB
- 文档页数:62
Oracle基础学习笔记主要是9i,部分会涉及10g的东西。
有点乱,大家慢慢看吧,对入门的学习还是挺基础的。
一、结构一个Oracle服务由实例(instance)和数据库(database)组成,数据库和实例是一对多的关系,即一个实例只可以管理一个数据库,而一个数据库可以被多个实例同时管理着,如在RAC环境中。
(1)实例1、由一组进程和内存结构组成2、5个基本进程:dbwr(数据文件写), lgwr(日志文件写),smon(系统恢复和控制),pmon(服务进程监控),chk(检查点),3、其他进程:arch(归档日志写),job作业进程等4、内存:SGA和PGA5、SGA包括share pool-lib cache: sql, pl/sql,-dictionary cache: 数据字典缓存db buffer:-nk_cache block 是nk的表空间使用的buffer-recycle_cache:经常不驻留内存的对象缓冲区-keep_cache:经常驻留内存的对象缓冲区relog buffer: redo log 文件缓存large buffer:share模式下为uga所使用java buffer:jvm使用streem buffer( 10g)最大比例的是db_cache_size,上面没有列出db_cache_size,是因为其被nk_cache包含了,若db_block_size =8k,则db_cache_size就是8k_cache。
6、参数SGA_MAX_SIZE : SGA最大内存SHARED_POOL_SIZE : share pool 的大小DB_CACHE_SIZE : db cache 的大小DB_RECYCLE_CACHE_SIZE: 经常不驻留内存的对象缓冲区DB_KEEP_CACHE_SIZE: 经常驻留内存的对象缓冲区LOG_BUFFER : log buffer 的大小LARGER_POOL_SIZE : large buffer的大小JAVA_POOL_SIZE : java buffer的大小Db_2K_cache_size : block size 为2k的表空间的数据缓冲Db_4K_cache_size : block size 为4k的表空间的数据缓冲Db_8K_cache_size : block size 为8k的表空间的数据缓冲Db_16k_cache_size : block size 为16k的表空间的数据缓冲Db_32K_cache_size : block size 为32k的表空间的数据缓冲若db_block_size为nk,则参数db_nk_cache_size无意义,nk的cache size由db_cache_size确定。
第十章:使用视图(整理笔记)主要内容:1.创建视图;2.更改、重命名和撤消视图3.使用视图修改数据4.使用内联视图。
5.使用Top-N方法。
视图是从一个或多个表中导出的行或列的子集。
视图本身不包含数据,它只起到一个窗口的作用,由此可以观看或修改基表的数据。
数据字典把视图作为一条select语句加以保存。
视图优点:1.视图可用来检索表中所选的列。
(防止数据丢失)2.可创建简单的查询,检索需要频繁调看的结果。
3.可用来从多个表中检索数据。
4.不需要时可以删除,不影响数据库。
//1创建视图注意事项:1.包含连接、组合和子查询的select语句可被包含在定义视图的子查询内。
2.创建视图时不能使用orderby子句,但为检索视图中数据,可用这条语句。
3.or replace选项用于修改视图定义,而无需撤消或重新创建它。
//1.1创建简单视图create view empasselect vfirstname,vlastnamefrom employee;create view v_addressasselect vfirstname,vlastname,cphone,vemailid,ntestscore from externalcandidate;select * from v_addresswhere vlastname='Jones';create view v_scoreasselect vfirstname,ntestscore from externalcandidate wherentestscore>='60';//force强制创建视图create force view v_testasselect * from t_test;//or replace创建或替代视图create or replace view v_countryasselect vfirstname,ccountryfrom externalcandidate natural join country;//1.2创建复杂视图create view emp_dept_vuas select vfirstname,vlastname,vdepartmentname from employeejoin department on employee.cdepartmentcode=department.cdepartmentcode;//2更改、重命名和撤消视图//2.1更改视图create or replace view emp_dept_vuas select vfirstname,vlastname,vdepartmentname,cCurrentPosition from employeejoin department on employee.cdepartmentcode=department.cdepartmentcode; //2.2重命名视图rename emp_dept_vu to empdeptvu;//2.3撤消视图drop view empdeptvu;select * from emp_dept_vu;//3使用视图修改数据//不能同时修改两个表里面的数据,如果修改必须在两个表里面分别修改update emp_dept_vuset vfirstname='Hello'where vlastname='Smith';//4使用内联视图:它是SQL语句的子查询,在主查询的from子句使用它吧,通过别名被引用它。
oracle 调优笔记(揭开传言的面纱)一、oracle 的不解之缘别人高考报志愿,都是因为热爱那门专业,所以选择了大学的专业。
还有些人报志愿是看到了未来长远的发展比较好,所以选择了大学的专业。
而我呢高考志愿是如何选择的呢?家里人没啥文化,父母全是普通的老百姓,自然也没有人帮我参考报啥专业。
于是和母亲商量上网查查吧,哪个专业比较好?搜着搜着,看到了一条“某互联网公司招聘数据库专业人员,年薪10W ”,我毫不犹豫的报了我的大学专业《数据库设计与开发》。
现在回想起来,我自己都觉得可笑,就因为那1条招聘信息,我选择了我的大学专业。
从此我便不知不觉的踏上了数据库的贼船,走上了这条不归路。
在网络中不断学习的过程中,我发现了个问题,网上的资料好多都是近亲,更有甚者有些资料还是双胞胎兄弟,一模一样啊,标点符号都不差,但它们真的全都标注着“原创”。
前面的文章还好,最可气的是有些文章,写得这个详细、排版这个漂亮,给人第一感觉就是,按着一步一步做吧,肯定没有问题。
但是当你花了九牛二虎之力,实验就是做不出来,肯定会有些小问题,这样的文章给我这样一个oracle 初学者留下了永恒的伤。
仔细算算,从大二的第一次oracle 课到现在,大约有6个年头了。
回想当初学习oracle 的经历,挺有感触的。
每当我写博文的时候,我尽可能的把实验内容写全、实验截图贴全。
希望可以帮到需要的朋友们,这么多年从业的道路上,每当有兄弟找到我问东西的时候,只要是我会的,我都会尽可能得去帮忙。
下面进入本篇文章的主题吧,和大家分享一些oracle 库中sql 语句调优的小知识点吧,写得比较基础、易懂。
二、实战操作及截图说明(一)、要说SQL 调优,就必须要简单说一下,SQL 语句的执行过程:123 45 6 78 1、检查语法(检查语法,如果有错误,直接返回,省着往下执行浪费资源) 2、检查语义(有没有这个表、当前用户有没有操作权限,如果没有直接返回) 3、hash 计算(把当前的sql 语句转换成oracle 可以理解的hash 值)4、解析 4.1、软解析(当一条sq1语句执行过,就会保存在library cache 中,当再一次执行与此条sql 相同的语句时,不经过cpu 计算,直接调用share pool)4.2、硬解析(当软解析不成功进,经过cpu 计算) 5、执行(有顺序的)select name from aa where id=1(先计算条件,再对比表,减少查找范围,触发索引就是先看where条件部分)(二)、优化器Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。
1、用dba权限的用户查看数据库都有哪些锁select ername,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2where t1.session_id=t2.sid order by t2.logon_time;2、查看有哪些对象被锁了select b.owner,b.object_name,a.session_id,a.locked_modefrom v$locked_object a,dba_objects bwhere b.object_id = a.object_id3、根据sid查找进程idselect pro.spid from v$session ses,v$process pro where ses.sid=129 and ses.paddr=pro.addr;select ses.sid from v$session ses,v$process pro where pro.spid=129 and ses.paddr=pro.addr;4:根据这个spid对应linux下的进程pidlinux命令:ps -ef | gre | 'ora' (找到所有ora开头的进程)kill -9 (pid)5、解决delete后表的高水位的问题初步判断应该是之前有大量数据,后来delete了,选成高水位,用shrink清除高水位:alter table t_mobile_client_tp_prov enable row movement;alter table t_mobile_client_tp_prov shrink space;重新收集统计信息:begindbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end;6、ORA-02064 distributed operation not supportedCause:One of the following unsupported operations was attempted:Array execute of a remote update with a subquery that references a database link, orAn update of a long column with bind variable and an update of a second column with a subquery that both references a database link and a bind variable, orA commit is issued in a coordinated session from an RPC with OUT parameters.Action:Simplify the remote update statement.问题: 数据库A ,B 通过DBlink互相访问, 数据库A 调用数据库B的存储过程pro_b , pro_b 过程中有out 输出参数,并且里面有dml语句,之后commit ,或rollback. 这时数据库A 通过DBlink 的调用pro_b@B就会产生这个错误.解决办法:a. 去掉pro_b中的commit, rollback ,统一有数据库B来控制事务.(当然也可以去掉out参数,这样也破坏是事务的完整性)b.用自制事务来控制pro_b , 在pro_b中添加.PRAGMA AUTONOMOUS_TRANSACTION; 优点:不用去修改调用的所有方法.当然这样也不能控制事务的完整.7、建表开启并行v_table_sql := 'CREATE TABLE T_MOBILE_CAP_DETA82_'||in_date||' parallel (degree 4) as '||' select /*+parallel(t1 4) */ * fromT_MOBILE_CAP_DETAIL_'||in_date||'@QAS82 t1';EXECUTE IMMEDIATE v_table_sql;8、创建dblinkCREATE DATABASE LINK CONNECT TO TRAFFICIDENTIFIED BY "pwd"USING '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.228.65)(PORT=1521)))(CONNECT_DATA=(SID=qas)))'9、创建临时表a.create global temporary table temp_tbl(col_a varchar2(30))on commit preserve rows(当提交后保留数据,session结束时才清除数据)b.create global temporary table temp_tbl(col_a varchar2(30))on commit delete rows (当提交后不保留数据,session结束时也清除数据)10、drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。
Oracle Web ADI开发步骤*以下的操作开发步骤是基于实现应付发票EXCEL导入功能的项目案例。
1 程序开发部分1.1 新建临时表TEMP,用于暂放EXCEL数据脚本参考:脚本说明:1.表结构中的ID、TRAN_TYPE和WHO栏是必有的栏位,用于实现逻辑控制,其中ID是唯一的,TRAN_TYPE用于控制操作类型,例如新建(Insert)、更新(Update)等;2.序列器及Synonym的生成脚本。
1.2 新建API过程,将EXCEL数据导入临时表TEMP1、此步骤主要是对EXCEL中数据的正确性进行校验,如果数据正确将导入至临时表TEMP中暂存;如果EXCEL中的数据校验发生错误,数据不允许进入临时表,调用EXCEPTION函数,在EXCEL导入表中报错:App_Exception.Raise_Exception('CUX'--应用产品,Cont_Exception_Code--自定义的Exception代码,'Error Message'--错误信息提示)。
2、脚本参考:脚本说明:1、声明Cux_Inv_Temp_Rec为记录类型;2、过程Valid_Inv_Temp_Ins验证Excel导入临时表的数据,对Cux_Inv_Temp_Rec的记录进行校验;3、编写EXCEL数据导入临时表的主过程Create_Invoice_Temp,调用验证过程Valid_Inv_Temp_Ins;如果数据正确无误,导入临时表TEMP,反之EXCEPTION处理,全部数据导入不成功。
1.3 新建并发请求,将临时表TEMP中的数据导入系统相关的信息表或者接口表INTERFACE中。
1.3.1 非主-次表的导入如果只是单一表的数据导入,则可以通过EXCEL表直接导入系统表或者接口表中。
1.3.2 主-次表的导入1、编写并发请求,将临时表TEMP中的数据整理成主表、明细表的资料,并进行分步导入处理。
目录Oracle学习路线 (1)在windows XP之后的版本中安装Oracle10g的注意事项 (2)创建和删除临时表空间 (3)创建数据表空间 (4)3、创建用户并指定表空间 (4)4、给用户授予权限 (4)Oracle学习路线1、sql、pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)作为oracle的基本功,需要大家对sql和plsql非常的熟悉。
特别是sql 里面的多表连接、子查询、各种新版本的函数,以及plsql里面的所有语法。
建议大家拿出足够的时间来研究这两块。
不要认为这是开发人员的工作,他也是DBA的重要工作,而且对DBA的要求更高,你不但能看懂,还要能够找出问题。
学些这方面知识的要点就是:多练、多思考。
2、Oracle管理(体系结构)(这一块一定要听课,而且是要听“大师”的课、多讨论)这是Oracle的难点,Orcle技术博大精深,主要的难点就集中在这里面。
包括Oracle的存储管理、对象管理、内存和进程、undo管理、初始化参数、数据字典视图、安全、latch和lock、权限和角色、资源调度、闪回、日志原理等。
学习这一块知识的时候,一个重点是:要知道原理和“根”,知道表面的东西没有任何意义。
知道原理以后,通过实验去证明,将原理总结出来。
这一块学习的好还是不好,直接决定了以后的一个备份恢复、优化、排错。
这一块虽然是研究管理,但是更加注重原理和体系结构的分析和解剖。
应该叫做“深入剖析Oracle体系结构”,多深都需要。
在这一部分的学习中,已经学习了很多优化的内容,在学习任何一个知识点的时候,我们都离不开对性能的分析。
3、备份恢复(听听课、看几本书,多做做实验、多讨论)有了第二部分的铺垫,这一章的学习相对有意思,前提是我们对Oracle的日志原理研究得较深,对oracle的内存和进程研究得较深。
策划一个完美和正确的备份计划和实施方案(具体要分析出原理),实施备份;对各种损坏进行恢复(还是要能够够分析出原理);另外可以做一些高难度的恢复实验(还是老话、要能够分析出原理)。
Oracle学习笔记oracle 的资源限制概要文件为了控制系统资源的使用,可以利用资源限制概要文件资源限概要文件是oracle安全策略的重要组成部分,利用资源限制概要文件可以对数据库用户进行基本的资源限制,而且还可以对用户的口令进行管理使用资源限制概要文件还可以限制下列资源的使用每个会话和每个语句的CPU时间,每个用户的并发数据库会话每个用户的并发数据库会话每个会话的最大链接次数和空闲时间可以提供线程服务器会话使用的最大的服务器内存使用资源限制概要文件可以对每个制定次概要文件的用户账号进行一下设置,允许用户连续输入错误口令的次数,在此之后oracle将锁定账号口令的过期时间,一天为计算允许用户使用过期口令的天数,这之后将锁定账号是否检查一个口令的复杂性,防止过简口令的使用默认的资源概要文件的所有资源限制设置为无限制的模式schema模式:组织相关数据库对象的一个逻辑概念,与数据库对象的物理存储无关,一个模式只能属于一个数据库用户,而且模式的名称和用户的名称相同即一个模式对应一个用户,并且模式的名字和用户的名字相同oracle数据库的每一个用户都有一个唯一的模式,默认情况下,用户所创建的所有模式对象都保存在自己的模式中。
模式和用户账号是一一对应的一个模式引用另一个模式中的对象,可以使用点表示法,不同模式中的对象名可以重复使用,Scott.emp 即使用用户名.表名的方式进行访问模式对象和非模式对象能够包含在模式中的对象成为模式对象能够在模式中队形有表,索引,触发器不属于任何模式的对象,成为非模式对象,表空间,用户角色,账号,概要文件用户的默认表空间表空间是非模式对象,是数据库的逻辑存储设备,她吧数据库信心租车各位物理存储空间表空间有数据文件组成,用户的各种模式对象,表,索引,触发器,都放置在表空间中若果不给新建用户制定表空间的话,用户的默认表空间为users表空间用户临时表空间一般,一个sql语句在完成认识时需要临时工作空间,例如,一个用来链接和排序大量的查询需要临时工作空间来存放结构,除非例外指令,一般情况下,用户的临时表空间是temp若数据库中没有创建临时表空间,则用户的临时表孔家是system表空间权限管理新建的用户,既不能与数据库服务器链接,也不能作任何的事情,除非给他们相应的执行特定数据库操作的权限oracle中数据库访问权限类型共有两种方式:系统权限:提供执行某种和一种类型的数据库操作能力对象权限:控制用户能否在特定数据库对象中执行特定类型的操作alter any table 更改数据库中的任何表结构create session 创建数据库链接create any table 在数据库中的任何模式中创建表create table 在数据库的自己模式中创建表create view 在自己的模式中创建视图create any view 任何模式中创建视图create type 在用户的自己模式中创建类型create any type 在数据库的任何模式中创建类型create procedure 在用户自己的模式中创建过程create any procedure 在数据库的任何模式中创建过程create trigger 在自己的模式中常见触发器create synonym 创建同义词create sequence 创建序列drop any table删除数据库中的任何表delete any table 删除表中的行execute any procedure执行任何过程execute any type 执行任何类型insert any table 在任何表中插入任何行select any table在任何视图和表中进行查询操作update any table在数据库的任何表中进行更新使用系统权限用户连接到数据库,必须具备连接到数据库的权限,create session权限用户具备的创建任何过程的create any procedure的系统权限后看,则能后创建,删除,执行任何存储过程,程序包和函数用户如果具有create any table的系统权限后,则能后在自己的模式中创建,修改,删除,查询任何表(自己模式中)开发人员一般具有create table,create view,create type的系统权限就可以利用角色进行权限管理角色就是系统权限和对象权限的一个集合,可以将角色授予用户,被属于角色的用户所具有了角色的相应的权限,若角色的权限被修改后,被授予角色的用户的缺陷也会相应的修改常见的数据库对象表:基本的数据存储集合,由行和列组成视图:从表中抽取逻辑上相关的数据集合序列:提供与规律的数值,主要用于提供键值,自动提供唯一的数值索引:提高查询的效率同义词:给对象起别名为表创建序列:create sequence deptincrement by 10start with 120maxvalue 9999nocachenocycle;select sequence_name,min_value,max_value,increment_by,last_number from user_sequence;nextval 返回序列中的下一个有效值,任何用户都可以引用currval 中存放序列的当前值nextval 应该在 currval 的前边,否则会报currval为在会话中错误空值是无效的,未指定的,未知的或不可预知的值空值不是空格或0select employee_id,last_name,hire_date from employees where to_char(hire_date,'yyyy-mm-dd')='1899-01-12';select to_char(salary,'$99,999.00') salary from employees where last_name='ernast';to_char('¥1,234,567,890.00','L999,999,999,999.99') from dual;通用函数,nvl,将空值转换成一个已知的值selectlast_name,salary,nvl(commisson_pct,0),(salary*12)+(qlary*12*nvl(commi ssion_pct,0)) an_sal from employees;nvl2(expr,expr1,expr2) expr如果为空的话,expr2,若果不为空的话则置为expr1select last_name,jon_id,salary,case job_id when 'it_prog' then 1.10*salarywhen 'st_cleark' then 1.15*salarywhen 'sa_rep' then 1.20*salaryelse salaryend 'revised_salary'from employees;select last_name,job_id,salary,decode(job_id,'it_prog',1.10*salary,'st_cleark'1.11*salary,'sa_rep',1.20*salary,salary) revised_salary from employees;select last_name,nvl(to_char(manager_id),'NO MANAGER') from employees where manager_id is null;使用函数对数据进行计算使用函数修改数据使用函数空值一组数据的输出格式使用函数改变日期的显示格式decode case end使用外链接可以查询不满足链接条件的数据select tables1.column,tables2.column from tables1 cross join tables2; select tables1.column,tables2.column from tables1 natural join tables2;select tables1.column,tables2.column from tables1 join tables2 using(column_name);select tables1.column,tables2.column from tables1 join tables2 on (tables1.column_name=tables2.column_name);select tables1.column,tables2.column from tables1 left/right/full/outer/ join tables2 on (tables1.column_name=tables2.column_name);;交叉链接cross join 和笛卡尔集是一样的,会产生大量的无用的数据natural join 自然链接会自动查找匹配的列名,并以列名为条件进行查询,类似与等值链接(where, join on)join on 链接的可读性高,可以进行多表链接select Employee_id,city,department_name from employees e join departments d on e.department_id=d.department_id join locations l on l.location_id=d.location_id;内连接和外连接内链接是指只返回满足链接条件的数据,包括自然链接外链接,两个表在链接过程中除了返回满足链接条件的行以外,还有返回部门条件的左或右的行,这种链接叫做左链接或右链接。
oracle数据库目录oracle数据库 (1)1.oracle简介 (2)1.1 软件素材 (3)1.2 安装oracle软件 (3)1.3 创建oracle数据库 (3)1.4 验证数据库 (10)1.5 切换scott用户 (21)1.6 scott用户表结构 (22)2.SQL语言 (24)2.1 SQL语言分类 (24)2.2 SELECT (24)2.3 字符串拼接 (29)2.4 去重复 (30)2.5 WHERE条件 (30)2.6 ORDER BY排序 (32)2.7 函数 (33)2.8 GROUP分组 (38)2.9 HAVING (40)2.10 表的自关联 (40)2.11 JOIN查询 (45)2.12 SELECT总结 (47)2.13 子查询 (48)2.14 分页查询 (49)2.15 复杂查询 (53)3.ORACLE的系统架构 (56)3.1 系统架构图 (58)3.2 用户管理 (60)3.2.1 表空间 (60)3.2.2 用户创建 (60)3.2.3 新用户登录 (61)4.DDL、DML语言 (65)5.视图 (67)6.序列 (71)7.数据字典 (72)8.索引 (75)9.PL/SQL编程 (86)9.1 helloworld入门案例 (87)9.2 变量 (87)9.3 动态赋值 (89)9.4 变量的分类 (90)9.4.1 简单类型变量 (90)9.4.2 %type类型 (90)9.4.3 record类型 (92)9.4.4 %rowtype (93)9.4.5 table类型 (94)9.5 if分支 (95)9.6 循环分支 (97)9.7 异常 (100)9.8 PL/SQL执行DDL (101)9.9 PL/SQL执行DML (103)10.游标 (105)10.1游标基础知识 (105)10.2游标应用 (109)10.3批量游标 (109)11.存储过程 (112)12自定义函数 (114)13 ORACLE JOB (116)14 JDBC连接oracle数据库 (121)1.oracle简介属于关系型数据库,有很多,如sql server(微软)+.net,DB2(IBM)+电商领域,mysql(早期属于瑞典AB公司---→sun公司收购---→oracle)java领域大多都会使用mysql(中小型项目)或oracle数据库(大型项目)。
Oracle经典自学笔记(doc 34页)一.验证Oracle已经安装完成了,首先得确认程序里有这些个选项,有四个选项:Oracle Installation Products、集成管理工具、配置和移植工具(管理员用得比较多)、应用程序开发。
Oracle也可以形成一种层次性的链接(Directory Manager),对于我们来说用得最多是sqlplus,而OLE 是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM),他是微软提出的,在用VB开发时可能要用,对于我们来说不须管。
当启动sqlplus时会提示输入用户名和口令,所谓的sqlplus是Oracle的一个客户端。
Oracle大多数命令都用命令来实现,所以比较难使,就如同unix比windows难使。
口令你输入tiger,建议就用它,因为以后去企业里Oracle 9i就是用的这个口令。
当你看到SQL>命令符时说明已经进入到了Oracle的命令行了。
图形版的sqlplus,命令行的sqlplus,还有一个就是通过网页访问Oracle的服务,启动sqlplus,端口号是5560,URL是它干什么且怎么干。
第四大只用告诉它我要干什么,不用去控制它怎么干,这样的语言学起来当然十分easy。
我们共有四类语句要学:数据操作语言语句[Data manipulation language,DML],会话控制语句[session control statement],数据定义语言语句[Data definition language,DDL]以及事务控制语句[transaction control statement]。
查询语句只有一句话就是select语句,这是最重要的一条语句。
以后只要遇到相应的select 语句一律背过,企业再面试时其他语句一般不会怎么考但这条语句是必考的。
如果考你SQL语句肯定会考这条select语句不是别的。
Oracle的安装:进入u01目录,cd /u01创建目录,mkdir –p app/oracle修改u01目录的权限,chown –R oracle :install /u01修改五个文件的内容,五个文件在帮助文档2.6节修改.bash_profile文件,它在home目录下,cd ~进入进入u01目录,解压oracle,uzip 10201_database_linux32.zip进行解压启动vnc,vncservervi /home/oracle/.vnc/xstartup,修改文件,去除两个#kill掉这个vnc,vncserver –kill :1(这个数字是vnc的号)打开vnc的exe程序,输入ip:192.168.98.11 :1进行连接,前面是ip地址,后面是vnc的id号,(ˇˍˇ) 进入vnc时是database目录下在vnc的exe程序界面,打开终端,进入/u01/databse目录,用ls –l 查看文件,执行./runInstaller执行后可以看到oracle的安装界面选择高级安装选项(第二个选项),点击next后,看到的目录指出安装文件在什么地方选择install database software only先选择只安装数据库软件vnc.exe界面,dbca命令选择general...选项,点击next,设置global database name和sid选择sample schemas设置character sets,选择第三个,再选择utf8sqlplus / as sysdba,进入sql了startup 打开数据库shutdown immediate关闭数据库show parameter sga 查看sga的相关参数alter system set sga_target=150m scope=both 修改参数修改sga_max_size特殊参数时需要先关闭数据库再执行其它操作重点:第一章、第三章、第九章、第二十章20.1、20.3监听、EM、五个数据字典,redo日志等文件索引的种类和意义,优化sql文,分区表,给分区表加索引(分区索引)Oracle Server由例程(instance)和数据库(Database)组成。
1,SGA主要有那些部分,主要作用是什么共享SQL和PLSQL的执行计划和数据字典对象等信息1.data dict cache 也叫rowcache 加速SQL的解析使用过的字典就会缓存在这里再次使用这个字典就直接从内存获取这些统计的信息在v$rowcache中记录2.library cache: 加速解析减少语句重解析SQL文本,解析树和执行计划就在这里缓冲被访问的数据块.每次从磁盘向内存缓冲数据的单位由db_block_size=8192 决定,这个区域缓冲的数据保持时间也由LRU算法决定记录数据库的每个改动向量,就是记录有顺序的SQL条目,这些SQL条目包括系统的改动和UNDO的改动,用户数据的改动,将一个人的工资由800改成1000 还没提交就断电,这时数据有可能写盘下次启动时就通过回滚段中的改前镜像和日志进行恢复,如果提交了数据有可能没写盘这时断电下次启动就通过日志重做,主要是为了数据的增删改过程记录日志的提高数据安全性4large pool(9I引入)大池存放对那些复杂的程序包分析、RMAN、UGA(共享模式)、异步IO等相关的数据5 java pool(9I引入)JAVA池存放JAVA存储过程的分析信息。
6 stream pool(10g引入)流池为流复制服务提供数据缓冲缓存2:oracle系统进程主要有哪些,作用是什么在众多实例进程中有5个必须进程1.SMON 系统监视进程1.空间管理:定期合并空间(老版本才有) 定期回收临时段2.实例恢复:(服务器掉电了实例意外终止) 恢复的方法:先前滚==>后回滚==>释放资源前滚将数据库中的SQL(包括提交的和未提交的)全部重新做一遍回滚将没提交的SQL句从数据库中将老的镜像取出覆盖释放资源将前滚和回滚中使用到的资源释放2.DBWn n指的是0-9 a-j 多个写进程的区分将脏块写盘触发写的条件1.产生检查点2.脏数据缓冲区达到阀值默认10%3.扫描整个data buffer没有空闲data buffer中包含脏的和未脏的优先写脏数据列表再写未改的4.timeout超时如果DBWR没事做会被每三秒唤醒一次去巡检写不写不一定5.集群环境的ping请求触发多实例的数据写请求6.表级别的truncate或drop也会触发数据写7.修改表空间的read only8.做表空间的offline(离线)9.热备份begin backup命令3.PMON 进程监视器1.清理与实例非法断开的server_procese残留的资源非正常终止的用户进程产生的垃圾资源2.负责重启意外死掉的调度器(网络监听中使用的)3.将实例的信息注册到监听程序4.CKPT 把新的检查点写入指定位置1.调度数据写dbwN2.将新检查点写数据文件头3.将新检查点写控制文件中的数据文件头的记录5.LGWR 只有一个进程不会向数据写进程那么多因为写要求有顺序将redo log buffer里的条目写到redo文件触发写的条件mit2.redo log buffer 1/3满3.redo log buffer 日志缓冲区达到1M4.写日志优先当DBWR要写脏数据时,要检查脏数据对应的日志是否写盘,如果日志还没写,会优先写日志5.3秒写一次简答题1解释冷备份和热备份的不同点以及各自的优点解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。
Oracle笔记DBA任务:评估数据库服务器硬件的可⽤性,适应性安装ORacle软件应⽤数据库规划创建数据库,实施数据库规划(内存,外存,进程)创建数据库备份机制和备份环境创建和维护数据库访问⽤户实施应⽤数据库系统,导⼊基础数据监视数据库,准备从数据库失败中恢复监视数据库,调整数据库性能⼯具:sqlplus,PL_SQL developer(偏开发),toad(偏性能监控,报表,管理)安装数据库:数据库管理⼯具:DBCA,DBUA,netca,netmgr,oem,SQLPlus,RMAN,OracleSecureBackup(磁带备份管理),数据泵,SQLLoader(不常⽤).OEM:emctl start stop set status存储选项:⽂件系统,ASM,裸设备安装选项:⽆提⽰模式安装.为数据库制定计划:不同模板创建不同类型数据库:数据仓库,事物处理数据库,通⽤数据库.创建数据库:管理Oracle实例:⼀个Database Control只能管理⼀个数据库.OEM需要先启动监听才能登陆.调⽤已存在某脚本⽂件⾥的SQL语句:SQL>@script.sql数据库⽹络连接配置:⽤oracle net manager配置客户和中间件连接,⽤TNSPing测试oracle ⽹络连通。
监听配置⽂件:$ORACLE_HOME/network/admin/listener.ora⽀持的⽅法/限制:$ORACLE_HOME/network/admin/sqlnet.ora监听报错⽂件:$ORACLE_HOME/network/log/listener.log⽂件listener.ora内容:TCP,host,port1521,实例(不写,系统默认⾃⼰找)。
在服务器端。
$lsnrctl(start,stop,status,service) $lsnrctl start listener1(指定启动哪⼀个监听)客户端要连接数据库:要知道监听所在主机,监听端⼝号,使⽤的⽹络协议,监控的数据库服务名(优先找db_unique_name,缺省就是db_name数据库名=db_domain域名由于没设置,所以缺省就是orcl)。
尚学堂马士兵老师oracle笔记(2008-10-30 10:17:39)第一课:客户端1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。
2. 从开始程序运行:sqlplus,是图形版的sqlplus.3. http://localhost:5560/isqlplusToad:管理,PlSql Developer:第二课:更改用户1. sqlplus sys/密码as sysdba2. alter user scott account unlock;(解锁账号)第三课:table structure(系统自带的表有emp、salgrade、dept、bonus、dual)1. 描述某一张表:desc 表名2. select * from 表名第四课:select 语句:1.计算数据可以用空表:比如:.select 2*3 from dual2.select ename,sal*12 annual_sal from emp;与select ename,sal*12 "annual sal" from emp;区别:加双引号保持原大小写,不加全变大写。
任何含有空值的数学表达式结果都为空值。
3. select ename || ‘abcd’|| 用来连接两个字符串如果连接字符串中含有单引号,用两个单引号代替一个单引号。
第五课:distinctselect deptno from emp;select distinct deptno from emp;select distinct deptno ,job from emp去掉deptno,job两者组合的重复。
更多的项,就是这么多项的组合的不重复组合。
第六课:Whereselect * from emp where deptno =10;select * from emp where deptno <>10;不等于10select * from emp where ename ='bike';select ename,sal from emp where sal between 800 and 1500 (>=800 and <=1500)空值处理:select ename,sal,comm from emp where comm is (not) null;select ename,sal,comm from emp where ename ( not)in ('smith','king','abc');模糊查询like :%代表任意数量的任意字符_代表一个任意字符select ename from emp where ename like '_A%';如果要查询含有%的,要用转义字符\转义字符可以自定义:escape '自定义的转义字符' 比如:select ename from emp where ename like '%$a%' escape '$';第七课: order byselect * from dept;默认按升序(asc)排列,要按降序(desc)用如下语句:select * from dept order by dept desc;select ename,sal,deptno from emp order by deptno asc,ename desc;第八课: sql function1:select ename,sal*12 annual_sal from empwhere ename not like '_A%' and sal>800order by sal desc;select lower(ename) from emp;select ename from empwhere lower(ename) like '_a%';等同于select ename from emp where ename like '_a%' or ename like '_A%';select substr(ename,2,3) from emp;从第二个字符开始截,一共截三个字符.select chr(65) from dual 结果为:Aselect ascii('a') from dual 结果为:65select round(23.652,1) from dual; 结果为: 23.7(第二个参数为指定四舍五入到哪位数)select round(23.652,-1) from dual; 20select to_char(sal,'$99,999,999') from emp;(用9就可以在没有数字的地方不显示,如果用0的话一定会用0填充满)select to_char(sal,'L99_999_999') from emp; L:代表本地符号这个需要掌握牢:select hiredate from emp;显示为:BIRTHDATE----------------17-12月-80----------------改为:select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;显示:BIRTHDATE-------------------1980-12-17 12:00:00-------------------select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; //也可以改为:HH12TO_CHAR(SYSDATE,'YY-------------------2007-02-25 14:46:14to_date函数:select ename,hiredate from emp where hiredate > to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');如果直接写birthdate>'1981-2-20 12:34:56'会出现格式不匹配,因为表中的格式为: DD-MM月-YY.select sal from emp where sal>888.88 无错.但select sal from emp where sal>$1,250,00;会出现无效字符错误.改为:select sal from emp where sal>to_number('$1.250.00','$9,999,99');把空值改为0select ename,sal*12+nvl(comm,0) from emp;作用:把comm为空的地方用0代替,这样可以防止comm为空时,sal*12相加也为空的情况.第九课: Group function 组函数(即从多行中得到一个输出)牢记组函数:max(), min(), avg(), sum(), count()select to_char(avg(sal),'99999999,99') from emp;select round(avg(sal),2) from emp;结果:2073.21select count(*) from emp where deptno=10;select count(ename) from emp where deptno=10; count某个字段,如果这个字段不为空就算一个.select count(distinct deptno) from emp;select sum(sal) from emp;第十课: Group by语句注意:count() 是计数不是空值的数量需求:现在想求每个部门的平均薪水.select avg(sal) from emp group by deptno;select deptno, avg(sal) from emp group by deptno;select deptno,job,max(sal) from emp group by deptno,job;求薪水值最高的人的名字.select ename,max(sal) from emp;出错,因为max只有一个值,但等于max值的人可能好几个,不能匹配.应如下求:select ename from emp where sal=(select max(sal) from emp);Group by语句应注意,出现在select中的字段,如果没出现在组函数中,必须出现在Group by语句中.第十一课: Having 对分组结果筛选Where是对单条纪录进行筛选,Having是对分组结果进行筛选.select avg(sal),deptno from empgroup by deptnohaving avg(sal)>2000;查询工资大于1200雇员,按部门编号进行分组,分组后平均薪水大于1500,按工薪倒充排列.select avg(sal) from empwhere sal>1200group by deptnohaving avg(sal)>1500order by avg(sal) desc;第十二课:子查询谁挣的钱最多(谁:这个人的名字, 钱最多)select 语句中嵌套select 语句,可以在where,from后.问那些人工资,在平均工资之上.select ename,sal from emp where sal>(select avg(sal) from emp);查找每个部门挣钱最多的那个人的名字.select ename ,deptno from emp where sal in (select max(sal) from ename group by deptno) 查询会多值.应该如下:把select max(sal),deptno from emp group by deptno;当成一个表.语句如下:select ename, sal from emp join(select max(sal) max_sal,deptno from emp groupby deptno) t on (emp.sal=t.max_sal and emp.deptno=t.deptno);每个部门的平均薪水的等级.分析:首先求平均薪水(当成表),把平均薪水和另外一张表连接.第十四课:self_table_connection把某个人的名字以及他的经理人的名字求出来(经理人及这个人在表中同处一行)分析:首先求出这个人的名字,取他的编号,然后从另一张表与其相对应编号,然后找到经理的名字.select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr= e2.empno.empno编号和MGR都是编号.第十15课: SQL1999_table_connectionsselect ename, dname,grade from emp e,dept d, salgrade swhere e.deptno = d.deptno and e.sal between s.losal and s.hisal andjob <> 'CLERK'有没有办法把过滤条件和连接条件分开来? 出于这样考虑,Sql1999标准推出来了.有许多人用的还是旧的语法,所以得看懂这种语句.select ename,dname from emp,dept;(旧标准).select ename,dname from emp cross join dept;(1999标准)select ename,dname from emp,dept where emp.deptno=dept.deptno (旧)select ename,dname from emp join dept on(emp.deptno = dept.deptno); 1999标准.没有Where语句.select ename,dname from emp join dept using(deptno);等同上句,但不推荐使用.select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal);join 连接语句, on过滤条件。
玩转oracle视频教程笔记一:Oracle认证,与其它数据库比较,安装连接命令(1)conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/s ysoper]例如:conn system /manager当用户特权用户连接时,必须带上(例如sys的登录)as sysdba 或是as sysoper显示当前用户show user;(2)disc[onnect]说明:该命令用来断开与当前数据库的连接(3)passw[ord]说明:该命令用于修改用户的密码,如果想修改其他用户的密码,需要用sys/system登录(4)show user说明:显示当前用户名(5)exit说明:该命令会断开与数据库的连接,同时会退出sql*plus文件操作命令(1)start和@说明:运行sql脚本案例:sql>@ d:\a.sql 或者sql>start d:\a.sql(2)edit说明:该命令可以编辑指定的sql脚本案例:sql>edit d:\a.sql(3)spool说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去案例:sql>spool d:\b.sql 并输入sql>spool off显示和设置环境变量概述:可以用来控制输出的格式,set show如果希望永久的保存相关的设置,可以去修改glogin.sql脚本(1)linesize说明:设置显示行的宽度,默认是80个字符Sql>show linesizeSql>set linesize 90(2)pagesize说明:设置每页显示的行数目,默认是14,用法和linesize一样至于其它环境参数的使用也是大同小异创建用户概述:在oracle中要创建一个新的用户使用create user语句,一般具有dba (数据库管理员)的权限才能使用案例:create user xiaoming identified by m123;给修改用户密码概述:如果给自己修改密码可以直接使用Sql>password 用户名如果给别人修改密码则需要具有dba的权限,或者拥有alter user的系统权限Sql>alter user 用户名identified by 新密码删除用户概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。
OracleWebADI操作手册EXCEL设置完美的EXCEL设置:(1) Excel2010:文件→选项→信任中心→信任中心设置→宏设置,(2)选择“信任访问VBA项目对象模型”,不要选择禁用宏,也不要通知EXCEL 2003:工具→宏→安全性,选择勾选两个复选框总帐部分操作路径总帐超级用户>日记帐>开始日记帐向导单击:日记帐> >开始日记帐向导布局:外币应计-多项内容:no单击”选择组织电子表格格式打开本地电子表格,双击:” *列表-文本”,选择相应的分类帐并将组织的数据粘贴到ADI模板。
转换率、贷款项目和标准贷款均为数字点击:插件> > >甲骨文> > >加载。
所有三行提示都用√标记,加载成功。
如果加载错误,请根据最后一列中的提示进行修改。
加载以查看运行请求是否正常,例如,报警指令卡连接到接口。
数据排序:1。
过滤掉2所有贷款的数值(不包括0)。
复制这部分数值(选择后ctrl+g,定位条件> >可见单元格),并删除贷款列的重复值(选择后ctrl+g,定位条件>可见单元格)3。
删除借入、借出和本币借入值为0(选择后ctrl+g,定位条件>可见单元格)4的行。
屏幕CNY栏,删除5。
屏幕美元列、原币和本位币的值方向相同,删除方向相同的值0(选择后ctrl+g,定位条件>可见单元格)6。
在美元条件下,用本币列出的值检查原始货币值。
如果没有值,则应填入0CNY行折算类型、折算日期和折算率不需要填写资产部分操作路径FA资产超级用户>日记账>开始日记账点击:批量添加> > >添加集成商点击:“继续”选择:“EXCLE 2003”;单击“下一步”选择:“添加资产-详细信息”单击“下一步”在本地保存excel将排序后的数据粘贴到ADI模板点击:加载项> > >甲骨文> > >加载点击:“加载”,其他三行提示用√标记加载成功。
/Oracle学习笔记Java相关课程系列笔记之二笔记内容说明Oracle数据库、SQL(薛海璐老师主讲,占笔记内容100%);目录一、数据库介绍 (1)表是数据库中存储数据的基本单位 (1)数据库标准语言 (1)数据库(DB) (1)数据库种类 (1)数据库中如何定义表 (1)create database dbname的含义 (1)安装DBMS (1)宏观上是数据-->database (1)远程登录:telnet IP地址 (1)TCP/IP通信协议 (2)数据库建连接必须提供以下信息 (2)一台机器可跑几个数据库,主要受内存大小影响 (2)源表和结果集 (2)几个简单命令 (2)tarena给jsd1304授权 (2)课程中使用的5个表 (3)二、 select from语句 (5)select语句功能 (5)select语句基本语法 (5)列别名 (5)算术表达式 (5)空值null的处理 (5)nvl(p1,p2)函数 (5)拼接运算符 || (6)文字字符串 (6)消除重复行 (6)其他注意事项 (6)三、 SQL语句的处理过程 (7)SQL语句处理过程 (7)处理一条select语句 (7)四、 where子句 (8)where子句后面可以跟什么 (8)语法和执行顺序 (8)字符串是大小写敏感的,在比较时严格区分大小写 (8)where子句后面可以跟多个条件表达式 (8)between and运算符 (8)in运算符(多值运算符) (8)like运算符 (9)is null运算符 (9)比较和逻辑运算符(单值运算符) (9)多值运算符all、any (9)运算符的否定形式 (9)五、 order by子句 (10)语法和执行顺序 (10)升降序 (10)null值在排序中显示 (10)order by后面可以跟什么 (10)多列排序 (10)六、单行函数的使用 (11)数值类型 (11)日期类型 (11)字符类型 (13)转换函数 (14)其他注意事项 (14)七、 SQL语句中的分支 (16)分支表达式 (16)分支函数 (16)八、组函数 (17)报表统计常用 (17)缺省情况组函数处理什么值 (17)当组函数要处理的所有值都为null时 (17)行级信息和组级信息 (17)九、 group by子句 (17)语法和执行顺序 (17)分组过程 (17)常见错误 (17)多列分组 (17)十、 having子句 (17)语法和执行顺序 (17)执行过程 (17)where和having区别 (17)十一、非关联子查询 (17)语法 (17)子查询的执行过程 (17)常见错误 (17)子查询与空值 (17)多列子查询 (17)十二、关联子查询 (17)语法 (17)执行过程 (17)exists (17)exists执行过程 (17)not exists (17)not exists执行过程 (17)in和exists比较 (17)十三、多表查询 (17)按范式要求设计表结构 (17)多表连接的种类 (17)交叉连接 (17)内连接 (17)外连接 (17)非等值连接 (17)表连接总结 (17)十四、集合 (17)表连接主要解决的问题 (17)集合运算 (17)集合运算符 (17)子查询、连接、集合总结 (17)十五、排名分页问题 (17)什么是rownum (17)where rownum<=5的执行过程 (17)where rownum=5的执行过程 (17)十六、约束constraint (17)约束的类型 (17)primary key:主键约束 (17)not null:非空约束 (17)unique key:唯一建约束 (17)references foreign key:外键约束 (17)check:检查约束 (17)十七、事务 (17)transaction (17)定义 (17)事务的特性:ACID (17)事务的隔离级别 (17)数据库开发的关键挑战 (17)锁的概念 (17)Oracle的锁机制 (17)事务不提交的后果 (17)回滚事务rollback (17)保留点savepoint (17)十八、数据库对象:视图view (18)带子查询的create table (18)带子查询的insert (18)定义缺省值:default (18)视图view (19)视图的应用场景 (19)视图的分类 (20)视图的维护 (20)十九、数据库对象:索引index (22)创建index (22)扫描表的方式 (22)索引的结构 (22)为什么要使用索引 (23)哪些列适合建索引 (23)索引的类型 (23)哪些写法会导致索引用不了 (24)二十、数据库对象:序列号sequence (25)什么是sequence (25)创建sequence (25)缺省是nocycle(不循环) (25)缺省cache 20 (25)二十一、其他注意事项 (27)删除表,删除列,删除列中的值 (27)多对多关系的实现 (27)一对多(两张表) (27)一对一 (27)数据库对象 (27)缺省(默认)总结: (27)一、数据库介绍表是数据库中存储数据的基本单位数据库标准语言结构化查询语言SQL:Structureed Query Language1)数据定义语言DDL:Data Definition Languagecreate table列表结构、alter table修改列、drop table删除列2)数据操作语言DML:Data Manipulation Languageinsert增加一行,某些列插入值、update修改一行,这一行的某些列、delete删除一行,跟列无关3)事务控制语言TCL:Transaction Conrtol Languagecommit确认,提交(入库)、rollback取消,回滚,撤销4)数据查询语言DQL:Data Query Languageselect语句5)数据控制语言DCL:Data Control Language系统为多用户系统因此有隐私权限问题:grant 授权、revoke回收权限数据库(DB)DATABASE 关系数据库使用关系或二维表存储信息。
10月31日老师的IP一、安装企业版—sys sys system system二、卸摘删除6个步骤1、停止所有ORACLE服务2、E:\oracle\adminE:\oracle\ ora92E:\oracle\admin \ oradata3、D:\Program Files\Oracle或者C:\Program Files\Oracle4、菜单项删除5、注册表删除(具体路径可以看图例)AB,删除9个文件夹C 再删除6、重起机器三、ORACLE体系结构连接数据库Sqlplus system/system看共享池大小,SHARE POOL SIZE 看JA V A池大小连接测试库并查询数据库缓冲区日志缓冲区REDO log BUFFER看当前用户show user控制文件上面的没有镜像,下面来做镜像(思路要清晰)1、操作系统命令移动控制文件,2、修改参数文件的管理。
日志文件强制修改检验点****为做镜像填加组和成员***为做镜像填加日志Edit修改ALTER DATABASEaddlogfile('d:\log4a.log','e:\log4b.log') size 10m;之后用/ 运行打开控制台***往组里加成员alter databaseaddlogfile member'd:\log1a.log' to group 1, 'd:\log2a.log' to group 2, 'd:\log3a.log' to group 3;进入控制台查看******如何移动日志文件例:移动移动e :盘下面1、变为inactive状态时候,用操作系统命令移动先变为ACTIVEAlter system switch logfile;再变为inactiveAlter system checkpoint;直接移动E:盘下2、用ORACLE的命令Alter data database RenameFile‘E:\oracle\oradata\lu’To‘E:’;*******删除日志成员组1、原来状态2、alter databasedroplogfilegroup 2;********删除日志成员1、看是否是INACTIVE状态,要变为INACTIVE状态后才可以操作2、ORACLE 里打命令alter databasedroplogfile member'd:\log3a.log'3、这里的文件被删除了,但只是在ORACLE中被删除,物理磁盘上还是有的**********当日志组只有2个时候,删除不了,报告错误alter databasedroplogfilegroup 1;*************填加1个日志组,然后再删除损坏的日志组11月1日增加1个组ALTER DATABASEclearlogfilegroup 2/Online 方式建立Alter system set db_create_online_log_dest_1=’d:\log1’Alter system set db_create_online_log_dest_2=’e:\log2’建立组Alter databaseAdd logfile;默认100M的删除新建立的O MF的日志是组3alter databasedrop logfilegroup 3;ORACLE 9I 的数据库最好按O_MF的方式进行管理,这样删除的时候物理和逻辑的是一起删除的强制切换alter system switch logfilebdump把2个日志文件中的1个从物理盘中删除,另一个仍然可以使用,但会在报警日志文件里写出来,写报错误的信息bdump。
ORACLE EBS—Web ADI开发笔记(抽丝拨茧篇)Author:Jarwang(王重东)Create Date:September28th,2009Update Date:Control No:Current Edition: 1.0声明:本文可以任意免费转载、复制、传播。
但您务必保持其完整性!If you copy this document,you ought to keep the document completely.Document ControlModify Record日期作者版本更改参考September28th,2009jarwang 1.0Approved姓名职位签字Distribute编码姓名地点和位置1234IndexDocument Control2Modify Record2Approved2Index3Preface5WEB ADI安装5浏览器设置5EXCEL设置5Web ADI—GL导入6Oracle Web ADI原理10WebADI之VBA分析10VBA实现下拉菜单11VBA实现下拉菜单之事件13WebADI与Oracle通信14Oracle Web ADI权限16职责、菜单、功能16Integrator权限17WEBADI开发权限17配置文件18Oracle ADI客制化开发(一)19Single Table19创建数据库对象19注册表及列19创建程序包20创建Integrator21创建Function23建立Integrator与Function关联23定义Layout25定义Mapping27定义查询条件27使用WEBADI29查询参数使用下拉框30修改Excel的列标题33创建Integrator快捷方式34 Oracle ADI客制化开发(二)37Relation Table37创建数据库对象37注册表及列37创建程序包38创建Integrator40创建Function41建立Integrator与Function关联41定义Layout42定义Mapping43定义查询条件44使用WEBADI45实现excel中的LOV(步骤一)46实现excel中的LOV(步骤二)53实现excel中的LOV(步骤三)60 Oracle Web ADI客制化开发(三)61自行开发Web ADI61创建数据库对象61Other Notes62PrefaceWEB ADI全称是WEB Application Development Integrator,原来是Oracle HRMS模块提供的一个利用浏览器来进行存取的,在服务器段运行的self-service应用程序。
后来经过不断地发展,也可以用于其他模块的数据导入。
现在,我们也可能通过客制化开发ADI,来实现EXCEL与EBS模块通信。
特别是财务人员习惯了excel界面,叫他们使用form,总是可以找出一堆理由。
WEB ADI让他们无话说吧。
呵呵!^_^本文主要是基于EBS11.5.10.2,但在R12.0.4中也能测试通过。
本文参考文档:Oracle Web Applications Desktop Integrator User Guide(bne115ug.pdf)Oracle Web Applications Desktop Integrator Implementation Guide(bne115ig.pdf)WEB ADI安装WEB ADI在具体的EBS版本中配置不尽相同,具体可参考user guide。
例:在R12中,WEBADI是默认安装好的。
又如:在EBS11.5.10.2环境中,WEBADI的职责名:Oracle Web ADI。
在EBS R12.0.4环境中,WEBADI的职责名:Desktop Integration。
浏览器设置Oracle建议你使用IE,事实也可以间接支持firefox,因为ADI生成的Excel会自行调用IE。
EXCEL设置Excel必须安装VBA组件,同时设置如下:Web ADI—GL导入日记帐导入是ORACLE WEBADI本身就开发的模板,可以直接拿来使用。
授权职责,这是肯定的啦。
登陆EBS后,选择Oracle Web ADI职责。
选择create document选择View:如果勾选reporting的话,则无法修改,上传。
选择Intergrator:General Ledger-Journals选择Layout:Functional Actuals-Single选择Conten:None选择Review:Create Document输入日记帐信息,然后选择Oracle菜单upload。
选择Upload。
OK,完成了。
Oracle Web ADI原理坦言,第一次接触Web ADI时感觉只不是个VBA生成器。
偶曾经也主导过一个VB项目的开发,所以对VBA并不陌生。
Oracle WEB ADI架构图:WebADI之VBA分析经过WEB ADI服务端自动生成的Excel文件,打这个excel文件VBA工程,就可以查看到相关的代码。
了解VB的同学们,对下面的代码会感到亲切(事实上,PL/SQL与VB语言的相似程序很高,所以对于PL/SQL程序员来说,也可以看得懂!)。
^_^!如果不想了解VBA的,可以考虑跳过。
上图是excel中的VBA工程的基本结构:对象层(由sheet、workbook构成)、Fomrs(界面)、modules (模块,用于公共变量、过程的声明区)、class modules(类模块,其实就是类啦)。
VBA实现下拉菜单WEB ADI:这个功能是由sheet层BneCreateOracleMenu子过程实现的。
VBA脚本:Public Sub BneCreateOracleMenu()Dim strMenuTitle As StringDim strMenuListOfValues As StringDim strMenuUpload As StringDim strMenuMonitor As StringDim strMenuDownload As StringDim strMenuAbout As StringstrMenuTitle="Or&acle"strMenuListOfValues="&List of Values"strMenuUpload="&Upload"strMenuMonitor="&Monitor"strMenuDownload="&Download"strMenuAbout="&About"On Error Resume NextMenuBars(xlWorksheet).Menus(strMenuTitle).DeleteMenuBars(xlWorksheet).Menus.add strMenuTitle,before:=8With MenuBars(xlWorksheet).Menus(strMenuTitle).MenuItems.add strMenuListOfValues,OnAction:=Application.ActiveSheet.CodeName &".BneDBLClick".MenuItems.add strMenuUpload,OnAction:=Application.ActiveSheet.CodeName& ".BneUploadDocument".MenuItems.add strMenuMonitor,OnAction:=Application.ActiveSheet.CodeName& ".BneMonitor".MenuItems.add"-".MenuItems.add strMenuAbout,OnAction:=Application.ActiveSheet.CodeName& ".BneAbout"End WithEnd Sub调用这个BneCreateOracleMenu,在workbook层的activate事件下。
---------------------------------------------------------------------------------------------------------------------------什么?你不太相信偶?呵呵!以事实说话!*******访谈!^_^1.新建一下excel文件,保留一个sheet即可,删除多余的sheet。
2.打开VBA工程在workbook层的worbook_open()中加入Dim strMenuTitle As StringDim strMenuListOfValues As StringDim strMenuUpload As StringDim strMenuMonitor As StringDim strMenuDownload As StringDim strMenuAbout As StringstrMenuTitle="Oracle ADI"strMenuListOfValues="值列表"strMenuUpload="上传"strMenuMonitor="监视"strMenuDownload="下载"strMenuAbout="&About me"MenuBars(xlWorksheet).Menus.Add strMenuTitle,before:=8With MenuBars(xlWorksheet).Menus(strMenuTitle).MenuItems.Add strMenuListOfValues.MenuItems.Add strMenuUpload.MenuItems.Add strMenuMonitor.MenuItems.Add"-".MenuItems.Add strMenuAboutEnd With3.保存后,重新打开excel。
这下相信了吧。
VBA实现下拉菜单之事件细心的人会注意上述代码中的OnAction。
一点也没错,菜单对应的事件代码就是由它实现。