Oracle

阅读 / 问答 / 标签

sql中有没有类似于oracle中rownum的函数

rownum是oracle的东西,其他数据库没这玩意。如果是局部分页的用到的话,建议你考虑重写分页语句。mysql有limit换起来也还不麻烦,sqlserver的话就比较麻烦了网上也有这语句我就不拿来献丑了,如果是不想写,建议你在表里补一个rownum字段设为子增长,定期重置此字段的排序

oracle 分页用row_number()效率高吗

分页最佳实践:http://www.askmaclean.com/archives/topn-pagination-pattern.html

如何限制oracle数据库表的输出记录条数

ROWNUM<你想要输出的数目,写在where后

sql中有没有类似于oracle中rownum的函数

Oracle row_number()函数用法row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码。 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开始排序)。 rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()也是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的。 oracle 分析函数 row_number(),返回一个整数值(>=1); 语法格式: row_number() over (order by col_1[,col_2 ...]) 作用:按照col_1[,col_2 ...]排序,返回排序后的结果集。

oracle中row_number查重用法

查重不是用group by吗?和row_number有啥关系?

oracle中row_number查重用法

1u3001selectuser_name,count(1)row_numberfromcustomergroupbyuser_namehavingcount(user_name)>1;2u3001selectcid,count(1)fromCONFIGgroupbycidhavingcount(1)>150orderbycount(1);3u3001selecta.message_id,row_number()over(partitionbyv_name,v_phoneorderbyvst_name)asnfrommessageawhereid=440;4u3001deletefrommessagewheremessage_idin(selectmessage_idfrom(selecta.message_id,row_number()over(partitionbyvst_name,vst_phoneorderbyvst_name)asnfrommessageawhereid=440wheren>1);

Oracle中row_number() over(partition by xxx order by xxx)的用法

row_number() over(partition by a order by b) 上面的意思就是将查询结果按照a字段分组(partition),然后组内按照b字段排序,至于asc还是desc,可自行选择,然后为每行记录返回一个rownumber用于标记顺序 如同上面这张表的内容,按照deptid分组的,组内按照salary降序排序的,rank就是返回的rownumber号 这个就是按照deptid=10分组了,组内有两个记录,salary降序排序,后面rank自然就是1,2了

Oracle数据库rownum和row_number的不同点

明确对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是二,以此类推,这个为字段可以用于限制查询的返回的总行数,因为rownum总是从1开始,但是1以上的自然数在rownum做等于判断时都认为是false条件,所以无法查到rownum=n(n》1的自然数),所以查找第二行以后的记录可以用子查询方法来解决,给子查询中的rownum取别名;对于小于某个值的情况两种方法都差不多,但是对于某个不等于一的值或者求某个值到某个值之间的情况,用row_number()别名获得排名,比用rownum伪列要简单方便的多;因为伪列总是从一开始查找;具体用法和区别参见以下代码; --取出工资最高的前5位selectempno,ename,sal,rownumfromemp;select*from(select*fromemporderbysaldesc)whererownum<=5;select*from(selectename,sal,row_number()over(orderbysaldesc)asnumfromemp)wherenum<=5;select*from(selectename,sal,row_number()over(orderbysaldesc)fromemp)whererownum<=5--工资的前3名select*fromempwheresal>=any(select*from(selectsalfromemporderbysaldesc)whererownum<=3);select*from(select*fromemporderbysaldesc)whererownum<4;select*from(selectename,sal,empno,deptno,row_number()over(orderbysaldesc)fromemp)whererownum<4;select*from(selectename,sal,empno,deptno,row_number()over(orderbysaldesc)asnumfromemp)wherenum<4--按照工资排序,取出第6名到第10名--使用伪列获得select*from(selectename,sal,rownumrfrom(select*fromemporderbysaldesc)whererownum<=10)wherer>5;--使用排名函数获得select*from(selectename,sal,row_number()over(orderbysaldesc)asnumfromemp)wherenum>5andnum<=10;-------按工资从高到低获得工资排名第四的员工select*from(selectename,sal,row_number()over(orderbysaldesc)asnumfromemp)wherenum=4;select*from(selectename,sal,rownumrfrom(select*fromemporderbysaldesc)whererownum<=4)wherer=4;总结oracle中rownum和row_number()的区别row_number()是分析函数,基本语法为row_number()over(partitionby字段orderby字段)rownum是一个伪列select*fromdeptwhererownum<=3;select*fromdeptwhererownumbetween2and3;这儿会出错,因为rownum的特性(没有1就不会有2,没有3)决定的SELECT*FROM(SELECTA.*,ROWNUNFROMDEPTA)T1WHERET1.ROWNUMBETWEEN2AND3;这么写不对,要这样写SELECT*FROM(SELECTA.*,ROWNUMRNFROMDEPTA)T1WHERET1.RNBETWEEN2AND3;他们的主要区别是:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而函数row_number()在包含排序从句后是先排序再计算行号码。

oracle中rowid和rownumber的区别

rownum和rowid都是伪列,但是两者的根本是不同的,rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownum不同,但是rowid是物理结构上的,在每条记录insert到数据库中时,都会有一个唯一的物理记录,例如AAAMgzAAEAAAAAgAAB7499ALLENSALESMAN76981981/2/201600.00300.0030这里的AAAMgzAAEAAAAAgAAB物理位置对应了这条记录,这个记录是不会随着sql的改变而改变。因此,这就导致了他们的使用场景不同了,通常在sql分页时或是查找某一范围内的记录时,我们会使用rownum。1、rownum例如:查找2到10范围内的记录(这里包括2和10的记录)select*from(selectrownumrn,a.*fromempa)twheret.rnbetween2and10;查找前三名的记录select*fromempawhererownum<3;这里我们要注意,直接用rownum查找的范围必须要包含1;因为rownum是从1开始记录的,当然你可以把rownum查出来后放在一个虚表中作为这个虚表的字段再根据条件查询。例如:select*from(selectrownumrn,a.*fromempa)twheret.rn>2;这就可以了2、rowid我们在处理一张表中重复记录时经常用到他,当然你也可以用一个很原始的方法,就是将有重复记录的表中的数据导到另外一张表中,最后再倒回去。SQL>createtablestu_tmpasselectdistinct*fromstu;SQL>truncatetablesut;//清空表记录SQL>insertintostuselect*fromstu_tmp;//将临时表中的数据添加回原表但是要是stu的表数据是百万级或是更大的千万级的,那这样的方法显然是不明智的,因此我们可以根据rowid来处理,rowid具有唯一性,查询时效率是很高的,例如,学生表中的姓名会有重复的情况,但是学生的学号是不会重复的,如果我们要删除学生表中姓名重复只留学号最大的学生的记录,怎么办呢?deletefromstuawhererowidnotin(selectmax(rowid)fromstubwherea.name=b.nameanda.stno<b.stno);这样就可以了。

如何去掉Oracle的大小写敏感

oracle数据库大小写敏感设置将sec_case_sensitive_logon初始化参数设置为false后就不区分密码大小写了。 sql> show parameter sec_case_sensitive_logon  name type value  ------------------------------------ ----------- ------------------------------  sec_case_sensitive_logon boolean true  sql>  sql> alter system set sec_case_sensitive_logon = false;  system altered.  sql>conn / as sysdba  alter system set sec_case_sensitive_logon = false;  sql> conn test2/test2  connected.  sql> conn test2/test2  connected.  sql>  需要记住的是,即使大小写敏感密码参数没有启用,在保存密码时也是区分了大小写的,以便以后在启用大小写敏感参数时有效,下面的代码先禁用了大小写敏感密码,然后创建了一个包含大小写字符密码的用户。  

Ubuntu linux 安装oracle 11G 问题

你保证oracle这个压缩包都解开了吗,su root了吗,安装前先看一下readme文件,应该有说怎么做installation的。

登录oracle的时候提示01017

是不是用户密码不对呀。 或者是没有这个用户,或是用户没有权限

oracle里面的包(package) 有什么用啊?

类似自定义函数,oracle都写好了,直接用就行了

Oracle中的package 怎么用

Oracle中的package 怎么用在调用时应该这么写,包名.方法名(入参,出参)

oracle触发器同一个表操作,报错

你可以分别在多个表上定义触发器。oracle的存储过程和函数区别不大,可以在函数中进行数据的insert、update、delete等操作;而一般数据库来说,函数只能进行查询、计算等,不能进行insert、update、delete等操作;存储过程则不受此限制。如果是单值函数,可以在select 列表 中使用

Oracle翻译

先知 哲人 神谕

oracle 如何将数据作为列名显示并总和

select * from all_tab_columns where table_name = "xxx " and owner = "xxx "; 或者 select * from user_tab_columns where table_name = "xxx "

Oracle应用也能跑在Azure上了!微软、甲骨文签定云互通协议

在许多业务上水火不容的微软与甲骨文周三宣布云端互通的合作协议,让彼此的用户能无碍在Microsoft Azure和Oracle Cloud两个环境下搬移资料和作业,企业客户甚至能将Oracle ERP及底层Oracle Database分别跑在Azure及Oracle Cloud上。 双方合作包括Azure和Oracle Cloud直接的网络 互连 及身份验证系统整合,确保高速而稳定的网络连线及应用顺畅执行。在这项合作下,企业的Analytics和AI等Azure服务,都可无缝整合Oracle Cloud服务,例如Autonomous Database,或是将一部份作业丢到Azure上,另一 部份 置于Oracle Cloud上执行。除了各自云端应用的兼容执行,还能有创新部署,像是Oracle E-Business Suite放在Azure,但底层Oracle Database仍然跑在Oracle Cloud的Exadata基础架构上。双方并表示,Azure和Oracle Cloud的互通也为企业客户提供一站购足的平台,取得所有业务营运所需的云端服务和应用。甲骨文云端基础架构(Oracle Cloud Infrastructure,OCI)执行副总裁Don Johnson指出,Oracle Cloud提供完整的行销、服务、销售、人资、财务、供应链管理及制造应用,以及Oracle Autonomous Database等第二代基础架构软件,双方合作将可使共同客户将现有应用搬上云端环境,而无需重新架构,有助于节省现有投资。目前已经有GAP及油田业者Halliburton采用双方新的服务。 Oracle Cloud提供企业级的软件即服务(Software as a Service)及云端数据库,而微软Azure则提供SaaS及底层平台即服务(Platform as a Service)。一向竞争的两大软件公司此番携手合作,一来可让微软接触到更多甲骨文企业客户,而云端服务比起AWS、Microsoft Azure较弱的甲骨文,则能满足企业用户采用云端架构的需求。 即日起,Oracle Cloud在北美维吉尼亚州Ashburn市及Microsoft Azure美东区(US East)的资料中心将启动网络 互连 ,预计未来再扩展到其他区域资料中心,可使企业本地(on- premise)资料中心扩展到二朵云上。此外,双方透过单一 签入 及自动化的用户部署(user provisioning),实现统一身份与存取管理,以便于灵活管理Azure和Oracle Cloud上的资源。双方今天也释出预览版本,使Oracle应用系统可以Azure Active Directory管理用户身份及存取权限。 两大云端整合可支持的部署情境包括:在Azure上执行Oracle应用产品(JD Edwards EnterpriseOne、E-Business Suite、PeopleSoft、Oracle Retail、Hyperion)而Oracle资料(RAC、Exadata、Autonomous Database)跑在Oracle Cloud上。这些应用程式也将取得相应的认证。另一方面Windows Server及Oracle Linux版本Oracle Database仍然维持Azure认证。双方也提供协同支持,以协助企业部署新的跨云系统。

oracle user lock怎么查看

  ORA-28000: the account is locked”,如是也没多想,直接操作  SQL>conn /as sysdba  SQL>alter user test account unlock;  SQL>conn test/test  还是报同样的错误,这就奇怪了。看看dba_users中该用户的状态等信息  SQL>select account_status,lock_date,profile from dba_users where username="TEST";  发现就是今天才锁定的,帐号状态为“LOCKED(TIMED)”,不明白这个TIMED什么意思,搜了一把,原来是密码错误次数超过了系统设置的允许最大次数。  查看现在设置的最大次数  SELECT resource_name,resource_type,limit FROM dba_profiles WHERE profile="DEFAULT";  找到  FAILED_LOGIN_ATTEMPTS PASSWORD 10  也就是说,原来允许的最大密码错误次数为10次,超过10次自动锁定帐号。难怪我怎么alter unlock都没用,看来还得先把这限制放宽才行。  把限制参数 FAILED_LOGIN_ATTEMPTS 修改成:unlimited  sql> alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;  或 修改成比较大次数:100000  sql>alter profile default limit FAILED_LOGIN_ATTEMPTS 100000;  再执行如下  SQL>alter user test account unlock;  SQL>conn test/test  就可以正常登录了。  下面,就看看dba_users中的account_status运行的各种状态以及对应的说明。  DBA_USERS中的ACCOUNT_STATUS的值有  OPEN  EXPIRED  EXPIRED(GRACE)  LOCKED(TIMED)  LOCKED  EXPIRED & LOCKED(TIMED)  EXPIRED(GRACE) & LOCKED(TIMED)  EXPIRED & LOCKED  EXPIRED(GRACE) & LOCKED  下面分别解释一下open.locked,expired,EXPIRED(GRACE) ,LOCKED(TIMED) ,其余几个概念就是这几个状态的组合。  1. open 当前用户是开放的可以使用的.  SQL> select username,account_status from dba_users where username = "TONGJW";  USERNAME ACCOUNT_STATUS  ------------------------------ --------------------------------  TONGJW OPEN  SQL> conn tongjw  Enter password: *******  Connected.  2. expired 表示用户已经过期, 登录的时候, 如果密码输入正确,系统会提示重新输入密码的.  SQL> conn jfdata/jf  Connected.  SQL> alter user tongjw account unlock;  User altered.  SQL> alter user tongjw password expire;  User altered.  SQL> conn tongjw  Enter password: *******  ERROR:  ORA-28001: the password has expired  Changing password for tongjw  New password: *******  Retype new password: *******  Password changed  Connected.  3. locked 表明当前帐户被锁了, 不可以登录的.  SQL> conn jfdata/jf  Connected.  SQL> alter user tongjw account lock;  User altered.  SQL> conn tongjw  Enter password: *******  ERROR:  ORA-28000: the account is locked  Warning: You are no longer connected to ORACLE.  expired (grace) 与 locked (timed) 是有系统的profile来进行控制的.  4. expired (grace) 指定一个期限, 到达这个期限的时候,系统会给出一个警告并且允许登录(grace), 如果过了这段期限, 对应的密码就会自动过期, 相当于我们的密码过期提醒.  PASSWORD_GRACE_TIME  PASSWORD_LIFE_TIME  Specify the number of days after the grace period begins during which a warning is issued and login is allowed. If the password is not changed during the grace period, the password expires.  SQL> select username,account_status,profile from dba_users where username = "TONGJW";  USERNAME ACCOUNT_STATUS PROFILE  ------------------------------ -------------------------------- ------------------------------  TONGJW OPEN DEFAULT  SQL> create profile test limit  2 password_life_time 5 password_grace_time 5;  Profile created.  SQL> alter user tongjw profile test;  User altered.  SQL> select username,account_status,profile from dba_users where username = "TONGJW";  USERNAME ACCOUNT_STATUS PROFILE  ------------------------------ -------------------------------- ------------------------------  TONGJW OPEN TEST  SQL> conn tongjw/playboy  Connected.  SQL> /  这时我们修改系统时间, 将日期往后修改几天  [oracle@TzDbTzcenter2 ]$ su  Password:  [root@TzDbTzcenter2 ]# date  Tue Mar 22 18:42:26 CST 2005  [root@TzDbTzcenter2 ]# date "03281842"  Mon Mar 28 18:42:00 CST 2005  [root@TzDbTzcenter2 ]# exit  [oracle@TzDbTzcenter2 ]$ sqlplus tongjw/tongjw  SQL*Plus: Release 9.2.0.4.0 - Production on Mon Mar 28 18:42:01 2005  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.  ERROR:  ORA-28002: the password will expire within 5 days  Connected to:  Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production  With the Partitioning, OLAP and Oracle Data Mining options  JServer Release 9.2.0.4.0 - Production  SQL> conn jfdata/jf  Connected.  SQL> select username,account_status,profile from dba_users where username = "TONGJW";  USERNAME ACCOUNT_STATUS PROFILE  ------------------------------ -------------------------------- ------------------------------  TONGJW EXPIRED(GRACE) TEST  SQL>  再将日期向后修改几天, 我们可以看到此时用户的状态已经改为Expired  [oracle@TzDbTzcenter2 ]$ sqlplus tongjw/tongjw  SQL*Plus: Release 9.2.0.4.0 - Production on Tue Apr 5 18:44:02 2005  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.  ERROR:  ORA-28001: the password has expired  Changing password for tongjw  New password:  Retype new password:  ERROR:  ORA-00988: missing or invalid password(s)  Password unchanged  Enter user-name: jfdata/jf  Connected to:  Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production  With the Partitioning, OLAP and Oracle Data Mining options  JServer Release 9.2.0.4.0 - Production  SQL> select username,account_status,profile from dba_users where username = "TONGJW";  USERNAME ACCOUNT_STATUS PROFILE  ------------------------------ -------------------------------- ------------------------------  TONGJW EXPIRED TEST  5. locked(timed)  PASSWORD_LOCK_TIME  Specify the number of days an account will be locked after the specified number of consecutive failed login attempts.  FAILED_LOGIN_ATTEMPTS  Specify the number of failed attempts to log in to the user account before the account is locked.  设定相关的profile属性^_^.  SQL> alter user tongjw profile default;  User altered.  SQL> drop profile test;  Profile dropped.  SQL> create profile test limit  2 password_lock_time 5 failed_login_attempts 3;  Profile created.  SQL> alter user tongjw profile test;  User altered.  修改系统的时间信息.  [root@TzDbTzcenter2 ]# date  Tue Mar 22 18:55:42 CST 2005  [root@TzDbTzcenter2 ]# date "03281855"  Mon Mar 28 18:55:00 CST 2005  [root@TzDbTzcenter2 ]# exit  [oracle@TzDbTzcenter2 ]$ sqlplus jfdata/jf  SQL*Plus: Release 9.2.0.4.0 - Production on Mon Mar 28 18:55:02 2005  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.  Connected to:  Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production  With the Partitioning, OLAP and Oracle Data Mining options  JServer Release 9.2.0.4.0 - Production  SQL> conn tongjw/tongjw  Connected.  SQL> conn tongjw/tongj1  ERROR:  ORA-01017: invalid username/password; logon denied  Warning: You are no longer connected to ORACLE.  SQL> conn tongjw/tongj2  ERROR:  ORA-01017: invalid username/password; logon denied  SQL> conn tongjw/tongj3  ERROR:  ORA-01017: invalid username/password; logon denied  SQL> conn tongjw/tongj4  ERROR:  ORA-28000: the account is locked  SQL> conn tongjw/tongjw  ERROR:  ORA-28000: the account is locked  SQL> conn jfdata/jf  Connected.  SQL> select username,account_status,profile from dba_users where username = "TONGJW";  USERNAME ACCOUNT_STATUS PROFILE  ------------------------------ -------------------------------- ------------------------------  TONGJW LOCKED(TIMED) TEST  SQL>

oracle full join 相同字段重复,如select * 会出来两个userid字段,但会出现其中有个userid为空,如何去

你设为主键了么?

oracle两个select单独使用都好使,但是放在一起就不好使了

从同一个表中取数据,条件不同结果当然就不同了

如何将Oracle数据库转为MsSql

使用SQL Server Management Studio 打开数据库 TASK -> IMPORT DATA 然后按照你的要求 连接到ORACLE 后可以直接 把ORACLE 表(包含数据) 导入到SQL server中。 但是注意 某些类型如LOB 的话 需要特殊的处理下。

oracle clob字段插入问题

在oracle中,有4个大对象(lobs)类型可用,分别是blob,clob,bfile,nclob。 下面是对lob数据类型的简单介绍。 blob:二进制lob,为二进制数据,最长可达4GB,存贮在数据库中。 clob:字符lob,字符数据,最长可以达到4GB,存贮在数据库中。bfile:二进制文件;存贮在数据库之外的只读型二进制数据,最大长度由操作系统限制。 nclob:支持对字节字符集合(nultibyte characterset)的一个clob列。 对于如何检索和操作这些lob数据一直是oracle数据库开发者经常碰到的问题。下面我将在oracle对lob数据处理的一些方法和技巧,介绍给读者,希望能够对读者以后的开发有所帮助。 oracle中可以用多种方法来检索或操作lob数据。通常的处理方法是通过dbms_lob包。 其他的方法包括使用api(application programminginterfaces)应用程序接口和oci(oracle call interface)oracle调用接口程序。 一、在oracle开发环境中我们可以用dbms_lob包来处理!dbms_lob包功能强大,简单应用。既可以用来读取内部的lob对象,也可以用来处理bfile对象。但处理两者之间,还有一点差别。处理内部lob对象(blob,clob)时,可以进行读和写,但处理外部lob对象bfile时,只能进行读操作,写的操作可以用pl/sql处理。另外用sql也可以处理lob,但要注意sql仅可以处理整个lob,不能操作lob的数据片。 在dbms_lob包中内建了read(),append,write(),erase(),copy(),getlength(),substr()等函数,可以很方便地操作lob对象。这里不做深入讨论,读者可以参看相关的书籍。 对于pl/sql,下面介绍一种技巧,用动态的pl/sql语句处理clob对象来传替表名! example 1. 动态PL/SQL,对CLOB字段操作可传递表名table_name,表的唯一标志字段名field_id,clob字段名field_name记录号v_id,开始处理字符的位置v_pos,传入的字符串变量v_clob 修改CLOB的PL/SQL过程:updateclob create or replace procedure updateclob( table_name in varchar2, field_id in varchar2, field_name in varchar2,v_id in number, v_pos in number, v_clob in varchar2) is lobloc clob; c_clob varchar2(32767); amt binary_integer; pos binary_integer; query_str varchar2(1000); begin pos:=v_pos*32766+1; amt := length(v_clob); c_clob:=v_clob; query_str :="select "||field_name||"from "||table_name||" where "||field_id||"= :id for update "; --initialize buffer with data to be inserted or updated EXECUTE IMMEDIATE query_str INTO lobloc USING v_id; --from pos position, write 32766 varchar2 into lobloc dbms_lob.write(lobloc, amt, pos, c_clob); commit; exception when others then rollback; end; l /用法说明: 在插入或修改以前,先把其它字段插入或修改,CLOB字段设置为空empty_clob(), 然后调用以上的过程插入大于2048到32766个字符。 如果需要插入大于32767个字符,编一个循环即可解决问题。 查询CLOB的PL/SQL函数:getclob create or replace function getclob( table_name in varchar2, field_id in varchar2, field_name in varchar2, v_id in number, v_pos in number) return varchar2 is lobloc clob; buffer varchar2(32767); amount number := 2000; offset number := 1; query_str varchar2(1000); begin query_str :="select "||field_name||" from "||table_name||" where "||field_id||"= :id "; --initialize buffer with data to be found EXECUTE IMMEDIATE query_str INTO lobloc USING v_id; offset:=offset+(v_pos-1)*2000; --read 2000 varchar2 from the buffer dbms_lob.read(lobloc,amount,offset,buffer); return buffer; exception when no_data_found then return buffer; end; l 用法说明: 用select getclob(table_name,field_id,field_name,v_id,v_pos) as partstr from dual; 可以从CLOB字段中取2000个字符到partstr中, 编一个循环可以把partstr组合成dbms_lob.getlength(field_name)长度的目标字符串。 二、对于在其他不同的开发环境,例如vc,vb,pb,java等环境下对lob的处理,处理方法不尽相同,在这里将简要举几个例子来说明不在oracle开发环境下对lob的处理。 (一) 在pb中的处理 exampler 2. string ls_path,ls_filename,ls_jhdh long ll_num,ll_count,rtn blob ole_blob ll_num=dw_lb.getrow() if ll_num>0 then ls_jhdh=dw_lb.object.ct_njhdh[ll_num] select count(*) into :ll_count from sj_jh_jhfjb where ct_jhdlxbh="1" and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx; if ll_count>0 then rtn=messagebox("提示","是否要修改此附件",question!,yesno!,1) if rtn=1 then SELECTBLOB ct_jhfjnr INTO le_blob from sj_jh_jhfjb where ct_jhdlxbh="1" and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx; ole_1.objectdata =ole_blob If ole_1.activate(offsite!) <> 0 Then Messagebox("OLE Activate","不能激活") Return -1 end If end if else messagebox("提示","没有附件") end if end if (二)在vb中的处理 在vb中处理大对象,一般可以用OO4O(oracle objects for ole)来处理大对象。这里介绍一种不用0040处理大对象blob的方法。 下面这段程序可以将一个文件(文本文件,doc文件,图象文件等)保存到数据库中,并可以将其从数据库读出 需要两个commandbutton cmd1 名称 cmdsave caption 保存 cmd2 名称 cmdread caption 读取 一个cmddialog控件 同时需要创建一张表t_demo(字段id 类型 number,;字段text 类型 blob;) exmple 3. Option Explicit Dim rn As ADODB.Connection Public Function CreateDataSource(DataSource As String, UserID As String, Password As String) As Boolean On Error GoTo DbConErr: Set rn = New ADODB.Connection With rn .ConnectionString = "Provider=OraOledb.Oracle.1;" & _ "password=" & Password & ";" & _ "User ID =" & UserID & ";" & _ "Data Source=" & DataSource & ";" & _ "Locale Identifier=2052" .Open End With CreateDataSource = True Exit Function DbConErr: CreateDataSource = False End Function Private Sub cmdRead_Click() Dim rs As New ADODB.Recordset rs.ActiveConnection = rn rs.LockType = adLockOptimistic rs.CursorLocation = adUseClient rs.Source = "select * from t_demo" rs.Open ComDlgDir.DialogTitle = "保存文件" ComDlgDir.Filter = "*.*" ComDlgDir.ShowSave Call BlobToFile(rs.Fields("text"), ComDlgDir.filename) Set rs = Nothing Exit Sub Set rs = Nothing End Sub Private Sub cmdsave_Click() Dim rs As New ADODB.Recordset rs.ActiveConnection = rn rs.LockType = adLockOptimistic rs.CursorLocation = adUseClient rs.Source = "select * from t_demo" rs.Open rs.AddNew ComDlgDir.DialogTitle = "选取文件" ComDlgDir.ShowOpen rs.Fields("id").Value = 1 If ComDlgDir.filename <> "" Then Call FileToBlob(rs.Fields("text"), ComDlgDir.filename) rs.Update End If Set rs = Nothing Exit Sub Set rs = Nothing End Sub Private Sub Form_Load() If Not CreateDataSource("sid", "systemp", "manager") Then MsgBox "Connection failure!" End If End Sub fld As ADODB.Field, filename As String, Optional ChunkSize As Long = 8192) Dim fnum As Integer, bytesleft As Long, bytes As Long Dim tmp() As Byte If (fld.Attributes And adFldLong) = 0 Then Err.Raise 1001, , "field doesn"t support the GetChunk method." End If If Dir$(filename) = "" Then Err.Raise 53, , "File not found" fnum = FreeFile Open filename For Binary As fnum bytesleft = LOF(fnum) Do While bytesleft bytes = bytesleft If bytes > ChunkSize Then bytes = ChunkSize ReDim tmp(1 To bytes) As Byte Get fnum, , tmp fld.AppendChunk tmp bytesleft = bytesleft - bytes Loop Close #fnum End Sub Sub BlobToFile(fld As ADODB.Field, filename A

vba如何查询oracle

建立与Oracle的连接,不过很少有这样做的

oracle.xml.parser. 是哪个jar包里的 想做java导出oracle数据库中的表结构和数据,改怎么做, 有好的解决办

我写了一段连接数据库的java代码,编译成功,但是在运行的时候提示找不到ojdbc14.jar这个包你硬盘里有吧? 如果有, 方法一, 把ojdbc14.jar作为一个

如何给oracle打patch补丁

  给软件打补丁相当于给人打预防针,对系统的稳定运行至关重要。本文详细、系统地介绍了Oracle数据库补丁的分类、安装、管理等问题。  厂商提供给用户的软件补丁的形式多为编译后的库函数,所以安装软件补丁实际上就是把这些库函数拷贝到相应目录,并在需要时进行联接操作。软件公司一般在一段时间后会把针对某一版本的所有补丁进行整理:合并融合,解决冲突,进行整体测试,并使文件拷贝和联接操作自动执行,得到一个软件补丁“包”。不同的公司使用不同的名称,现在一般计算机用户都熟悉的Windows Service Pack就是这样的补丁包。Oracle公司给出的补丁包的名称是Patch Set,安装Patch Set后的版本称Patch Set Release(PSR)。  Oracle公司对处于标准技术支持的产品不定期地提供PSR,例如在完成本文时,版本10.2的最新PSR是10.2.0.2;版本10.1的最新PSR是10.1.0.5;版本9.2的最新(也极可能是最终)PSR是9.2.0.8。  在安装最新PSR后新发现的Bug,其相应补丁当然会收录到下一个PSR中。PSR是累积型的,即下一个PSR中会包括当前PSR中所有补丁和新发现Bug的补丁。同时存在几个PSR时,只需安装最新版本一次就可以了。但是由于PSR的发行有一定间隔,如果这些Bug对用户有比较大的影响,那么 Oracle公司也会向用户公开和提供这些补丁,这些补丁被称为个别补丁(Interim Patch,one-off patch 或 Patch Set Exception)。而对于最终补丁发行版而言,由于不再有下一个PSR,所以当发现影响系统的新Bug时,个别补丁成为惟一选择。  此外,Oracle公司还定期发布安全补丁,称之为CPU(Critical Patch Updates)。安全补丁用来修复软件的易受攻击性(vulnerability)或通常说的安全漏洞。这类问题本来不属于软件错误,在正常使用中不会出现任何问题。但是别有用心的人可以通过运行非常精巧设计的代码,绕过数据库系统的安全管理机制,达到非授权存取的目的。  另外还存在一类补丁:诊断用补丁(diagnostic patch)。顾名思义,这类补丁不是用来解决问题的,而是用来寻找问题的原因的。这类补丁只在Oracle技术支持部门要求安装时,才需要安装。在得到需要的诊断信息后,应立即卸载这一补丁。  利弊及时机选择  负责管理支撑大型应用系统的数据库的DBA会容易理解安装软件补丁的代价。安装PSR需要停止数据库服务,关闭数据库,对于许多应用系统安排这样的停机时间本身就是一件比较困难的事情。事实上,更为严重的是由于安装PSR可能“引入”新的Bug,反而影响应用系统的正常运行。软件补丁本来是修正 Bug,怎么会带来新的Bug?虽然有些让人匪夷所思,但很不幸这是现实存在的。  对于每一个PSR,其中都包括了少则几百多则上千个严重Bug的修正。即便是如此,在PSR发布后,很快就又会在安装PSR后的数据库中发现一些新问题。其中一部分Bug是以前就一直存在的只是以前没有发现,而现在偶尔被发现,或者是由于PSR修正了某一错误从而将其“激活”或容易发现。但是确实有一些Bug是由这一PSR造成的,Oracle技术支持部门称其为倒退(Regression)。对于每一PSR,在metalink中有两个重要的与之有关的文档,一个是“List of fixes added in XXXX”,是这一PSR修复的Bug的清单,是一本“修复列表”;另一个是“Known issues and alerts affecting XXXX”,是安装PSR后发现的问题,可以称其为“悔过列表”。由于大型软件的复杂性,Bug几乎是不可避免的。重要的是能够及时提供信息,DBA可以结合自己系统的情况做出正确的判断。读者不必因为知道还存在着Bug,就对Oracle数据库产品失去信心。PSR修复的上千个Bug中绝大多数是在一些很少见的环境中,或者是若干个组件的复杂组合使用的情形中发生的。  如果系统在运行中出现过某种问题,由Oracle技术支持部门或第三方的专家确认原因是PSR中的某一Bug,这样就必须尽早安装;如果系统一直运行正常,并且在PSR已发现的问题中涉及的组件或功能(如Logical Standby, JVM,RAC等)在系统中并不使用,此时可以选择安装也可以选择不安装。  另一个需要考虑的因素是安装补丁的时机。上述这些考虑的一个重要前提是系统已经投入运行,担心“倒退”的Bug影响系统。如果系统还处在开发和测试阶段,不需要有任何犹豫,安装最新的PSR,并在此基础上测试应用系统是否工作正常。如果发现异常,要及时请Oracle技术支持部门确认是否新Bug,如果是请其提供个别补丁。目的就是在一个尽可能完善稳定的数据库平台上测试应用系统。我们可以把这种安装补丁的策略概括为“补丁补新不补旧”。  以上都是针对PSR的安装,对于个别补丁,由于补丁修复的Bug单一,容易判断是否需要安装。需要注意的是,如果在当前PSR之上安装了若干个个别补丁,那么在下一个PSR发布后,在安装下一个PSR之前,需要卸载所有个别补丁。为便于管理,现在Oracle技术支持部门要求必须使用工具 opatch安装管理个别工具,而尽量避免手动拷贝文件等操作。  最后是安全补丁安装的判断。虽然安全漏洞这个词看上去让人觉得非常严重,但是还要冷静综合分析这些漏洞在系统中的危害程度。事实上,不安装安全补丁的危险性可能远远小于始终不渝地使用scott/tiger这样人人都知道的用户名和口令的“标准缺省”做法。  安装PSR  使用oui工具安装PSR时只需要用鼠标做几个选择就可以进入自动执行的阶段,操作过程本身非常简单。但是如果要求必须一次安装成功;要求必须在凌晨2点到4点这个有限的停机时间段完成操作;要求安装过程不出差错,以后出现问题时能够完全排除此次操作失误的可能性,那么就需要在启动oui之前做一些准备工作。  1. 收集信息  有关PSR的信息中,一个最重要的文档就是软件补丁说明,这个文件相当于技术手册中的安装指南和发行说明。文件本身包含在下载的软件补丁文件之中,文件名是patchnote.htm或README.html。需要注意的一个问题是在软件补丁文件之中找到的这一Patch Set Notes可能不是最新版,可以根据文件内的提示信息在metalink中检索最新版。  另外两个重要文件就是前面已经提及的“修复列表”和“悔过列表”,相对于“修复列表”更应该仔细阅读“悔过列表”中的每一项内容。另外,在Patch Set Notes的已知问题(Known Issues)一节内列出了安装PSR后出现的一些问题。  除去这三个主要文件外,还应在metalink中检索,寻找是否还有其他涉及这一PSR的技术文章,寻找其他用户在安装这一PSR时或安装后遇到问题时所发的救助的帖子,前车之鉴更应重视。  2. 做出判断  在认真阅读收集到的文章之后,根据自己系统的实际情况,做出是立即安装PSR,或是等待下一PSR的决定。如果是暂缓安装,则要记录原因,以便以后跟踪Bug的修复进程。  3. 制订实施计划  在决定安装PSR后,需要制订一个实施计划。在计划中不仅要包括正常的操作步骤,更要考虑在出现意外时的应急处理(如果安装PSR失败,则在正常应用开始时间之前,要恢复系统到安装之前的状态)。如果可能,在对正式系统开始实施之前,应在测试系统中进行演练和应用处理的测试,保证在安装PSR后不会影响应用系统的运行。  安装PSR的计划大致有以下几个部分:停止数据库服务关闭数据库;备份DBMS软件和数据库以备恢复之用;安装PSR软件;更新数据库数据字典升级PSR版本;正常启动数据库开始数据库服务。  看似简单的关闭数据库的操作,在系统构成复杂时也会变得不容易。另外,如果夜间作业时间不允许在完成数据库完全备份之后再安装PSR,则安装PSR的日期应该选择在例行的数据库完全备份的下一个晚上,只备份重做日志。  在安装PSR之前备份DBMS软件的目的是,由于安装PSR会对许多程序和库函数进行更新,如果安装PSR中途失败(虽然可能性非常小),有可能造成DBMS软件出现不一致。另外一种可能的情形是,在安装PSR,更新数据字典后,测试应用系统时,出现了某种异常,原因不明,最终决定放弃PSR。如果操作之前没有备份,则此时只有重新安装软件一种选择(PSR不同于完整软件安装,在oui中无法单独卸载PSR软件)。  对文件、目录和文件系统的备份,最简单的方式可以使用cp、tar、dump等命令完成。如果希望缩短文件拷贝时间,可以考虑分区备份的方法。分区备份常用的命令是dd。但是,分区拷贝比文件拷贝速度快的前提是良好的分区设计:Oracle软件单独占一个大小适中(如4GB)的分区,这样扇区拷贝才会体现优势,这也就是为什么在安装软件时,Oracle建议单独使用一个分区安装软件的原因之一。  在制定实施计划时,应认真阅读Patch Set Notes中有关操作前准备工作一节。在这节内会介绍对于一些特殊系统构成,如果你的系统属于文档中提到的构成,一定要首先阅读文内提示的相关技术文章,找到正确的安装步骤。  使用oui, PSR软件安装完成后,一定不要忘记更新数据字典这一步骤。如果在这一ORACLE_HOME下生成了多个数据库,则每个数据库都必须更新数据字典。  . 实施操作  制订一个详细的计划后,实施操作就可以“照本宣科”,是一个简单的体力劳动。要认识到“忙中出错”的概率远比“急中生智”大得多,操作时尽量减少失误的可能性。例如,需要执行的复杂命令,尽可能从一个文件拷贝到终端执行,而不要现场输入。另外,在实施过程中,要记录各个阶段实际的执行时间,以供以后制订类似计划时参考。  5. 检查操作结果并记录备案  执行一个操作,操作是否成功,一定要进行检查,不能简单认为没有出错信息就是成功。要知道验证的方法。除去极个别极费时间的验证(分区备份的内容是否可以成功恢复系统,必须恢复分区,启动数据库,测试应用系统后才能确认),其余操作都应进行验证。所有屏幕输出信息和日志文件都应保留,作为安装报告的附件提交给上级或客户。  在屏幕输出或日志文件中出现异常/错误信息时,应即时分析,决定马上采取的措施。出现严重错误时,可能需要重新执行某一SQL程序,或者重新安装PSR。所以在制订实施计划时应在时间上留出异常情况处理的时间。  下面给出一个在Linux平台上安装10.1的PSR的实例,给从未安装PSR的读者有一个感性认识。  操作系统是RHEL AS4.0 Update3,Oracle的当前版本是10.1.2。在metalink中检索,找到10.1版的最新PSR10.1.0.5。下载压缩文件。在压缩文件中找到Patch Set Notes,该文档的完成日期是2006年1月。而按照文档内的提示在metalink中检索得到的此文档的最新版本完成日期是2006年4月。使用文件比较工具进行比较,两个版本没有实质性差别,只有语句措词的修改,但是养成总是检索最新文档的习惯有益无害。  根据Patch Set Notes中的说明,有一些特殊系统构成需要额外的步骤,本例中由于全部没有涉及到,所以可以按标准步骤执行。  另外,检查“Known issues and alerts affecting 10.1.0.5”文档后,发现10.1.0.5引入的影响最大的一个Bug是执行SELECT MAX()在某些特定条件下结果不正确。而这一Bug可以通过设置事件(event)关闭FIRST ROW优化而避免。最后的结论是这一BUG不会对本系统有影响,可以安装PSR10.1.0.5。  1. 检查数据库表空间和初始化参数是否需要调整。  System表空间要求有一定未使用空间:初始化参数SHARED_POOL_SIZE 和 JAVA_POOL_SIZE不能低于最小值150MB。  2. 关闭数据库,停止listener和agent等进程。  3. 解压缩下载文件至某一目录,执行oui。  在压缩文件中附带的oui的版本要比已经安装的版本高,应总是使用新版本的oui。在oui窗口中,要求选择本次安装的软件的位置,正确的位置是解压缩目录下的子目录Disk1/stage/, 选中products.xml即可开始文件拷贝。  要注意窗口中会出现本次安装的日志文件的文件路径和文件名。文件的位置是在Oracle的inventory所在目录的子目录logs中,文件名由前缀InstallActions和安装日期时间组成,如: InstallActions2006-08-30-11-32-48AM.log。  正常结束后,退出oui。打开日志文件,检索是否出现error 或“ORA-”的错误信息。本次安装产生的日志文件内,没有任何此类的信息,表明PSR软件安装成功。如果此时再次启动oui,点击“已安装软件”,则可以看到在原有的10.1.0.2软件之下,新出现了10.1.0.5一项,这也证实PSR软件安装成功。  4.更新数据库数据字典  更新数据字典时,必须以特殊的升级方式打开数据库。  $ sqlplus /nolog  SQL> CONNECT / AS SYSDBA  SQL> STARTUP UPGRADE  SQL> SPOOL patch.log  SQL> @?/rdbms/admin/catpatch.sql  执行结束后,关闭重定向:  SQL> SPOOL OFF  打开文件patch.log检查是否有错误“ORA-”。(这一文件在启动sqlplus时的当前目录中,当然也可以在“SPOOL patch.log”语句中显式指定文件路径。)如果出现错误要分析原因,在解决问题后,需要再次执行catpatch.sql程序。  更新数据字典时,由于对某些PL/SQL包删除后又重新生成,造成相关PL/SQL包的状态为异常(invalid)。在以后调用这些包时,检测到其状态为非法,会自动执行编译命令,使状态成为正常(valid)。虽然不会出错,但会造成个别处理第一次执行时变慢。显然,与其留到应用系统运行时再一个个编译,不如之前集中一次重编译所有异常包。  SQL> SHUTDOWN  SQL> STARTUP  SQL> @?/rdbms/admin/utlrp.sql  最后,根据Known Issues中的指示,完成与本系统有关的操作。例如,修改Pro*C的配置文件。这里执行一个修改文件存取权限的“后操作”,以便非同组用户和程序可以存取客户端工具和库函数。  $ cd $ORACLE_HOME/install  $ ./ changePerm.sh  个别补丁管理工具opatch  如前所述,在发布一个PSR后发现的新BUG,只能把其补丁收入到下一个PSR中。如果对数据库有实质性影响,则这一补丁以个别补丁的形式向用户提供。个别补丁是与某一个特定的PSR关联,是安装在这一PSR之上的。另外,如同其名字表明的,个别补丁只是单一Bug的补丁,不会包含其他个别补丁,即不是累积型的。  在9.2版之前,安装个别补丁的操作完全是手工的。这种手工方式的缺点不仅在于加重DBA的负担,容易造成操作失误,更严重的是无法对已安装的个别补丁进行管理。  为解决手工方式的缺陷,从9.2版开始,Oracle公司设计实现了个别补丁安装管理工具opatch。opatch使用一个称为 inventory的系统数据结构(严格说是与oui共享inventory),集中管理所有已安装的个别补丁;个别补丁的安装和卸载都使用opatch 命令完成,冲突检测也由opatch在安装时自动完成;提供列表命令可以很方便得到已安装个别补丁的信息。  10g(10.1和10.2)版本中,opatch作为一个标准工具,在软件安装时自动安装。(安装在$ORACLE_HOME/OPatch 下。)而对于9.2版,需要从metalink下载opatch。无论数据库是哪一个版本,系统中是否已经安装opatch,在使用之前,应从 metalink下载最新版本的opatch。很遗憾,由于系统实现的问题,10.2使用的opatch与之前版本(10.1和9.2)使用的 opatch不兼容,不能混用,这一点必须注意。  opatch是使用perl编写的脚本程序(其中也使用JAVA API)。编程使用的perl版本是5.6版,虽然在5.6之前的版本中也可运行,但应尽可能安装5.6或以上的版本的perl。对于DBA来说一个好消息是,如果安装9.2版软件时保留了HTTP服务器,则在$ORACLE_HOME/Apache下会自动安装perl。(10g会自动安装配置perl 和opatch。)  opatch命令格式为:  opatch < command > [< command_options >] [ -h[elp] ]  命令有:apply(安装个别补丁)、rollback(卸载个别补丁)、lsinventory(对inventory进行列表)、query (显示某一个别补丁的详细信息)、version(显示opatch版本信息)。在opatch目录下,有用户使用指南文件(Users_Guide.txt),其中有详细的命令格式和使用示例,读者可以参考。Opatch执行操作时,除在屏幕输出结果外,还生成日志文件。日志文件的路径和文件名格式如下:  $ORACLE_HOME/.patch_storage/< patch_id >/< action >-< patch_id >_< mm-dd-yyyy_hh-mi-ss >.log  其中“patch_id”是Oracle技术支持部门为个别补丁分配的编号。  4. 个别补丁安装实例  沿用安装PSR实例中的环境。在安装PSR10.1.0.5后,检索metalink,发现若干在其之上的个别补丁。选择其中之一安装。  个别补丁Patch 4518443修复BUG4518443,这一BUG的主要问题是TNS LISTENER在注册ONS(Oracle Notification Services)的同时如果创建子进程,那么LISTENER会挂起(HANGUP)。  安装时,首先,从metalink下载补丁的压缩文件p4518443_10105_LINUX.zip。将此文件解压缩至某一目录中。解压缩后,这一补丁的所有文件都在子目录4518443下,目录名就是个别补丁的补丁号,opatch依据目录名获得信息,所以一定不要重命名子目录。  然后,在终端窗口中,执行cd命令移动到4518443子目录中,执行以下命令:  $ $ORACLE_HOME/OPatch/opatch apply  对inventory列表,确认安装操作:  $ $ORACLE_HOME/OPatch/opatch lsinventory  执行卸载命令时,也必须使4518443子目录成为当前目录。其中,Rollback命令需要两个参数:-id给出个别补丁号;-ph 给出个别补丁解压缩后的路径。  $ $ORACLE_HOME/OPatch/opatch rollback -id 4518443 -ph /…/4518443  随后再对inventory列表,则会看到这一个别补丁已经被移去。  4. 使用opatch显示已安装的版本信息  不需要启动数据库,执行加选项的对inventory的列表命令,可以得到已安装的软件的各个组件的详细版本信息。  $ $ORACLE_HOME/OPatch/opatch lsinventory -detail  安全补丁CPU  一个CPU内包含了对多个安全漏洞的修复,并且也包括相应必需的非安全漏洞的补丁。CPU是累积型的,只要安装最新发布的CPU即可,其中包括之前发布的所有CPU的内容。事实上,在CPU之前的安全漏洞修改除去个别例外也被包括在CPU中。Oracle公司只对处于标准技术支持和延长支持期间的产品提供CPU更新,对处于维持支持范围的产品不提供新的CPU。(对于9.2以前的版本,只对处于ECS和EMS期间的版本提供CPU更新。)一般对当前补丁发行版及前一个版本提供CPU,但也有只限于当前补丁发行版的例外情形。也就是说,一般需要先安装最新PSR后才可能安装CPU。由于是累积型的定期发布,所以对于某一平台的某一版本,如果两次CPU发布期间没有发现新的安全漏洞,则新发布的CPU与前一版本完全相同。

如何解决Oracle10gR2 ORA-19554关于SBT

show all配置输出:RMAN> show all;RMAN 配置参数为:CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # defaultCONFIGURE BACKUP OPTIMIZATION ON;CONFIGURE DEFAULT DEVICE TYPE TO DISK;CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO "%F"; # defaultCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO "%F"; # defaultCONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # defaultCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # defaultCONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 2 G;CONFIGURE CHANNEL DEVICE TYPE "SBT_TAPE" MAXPIECESIZE 2 G;CONFIGURE MAXSETSIZE TO UNLIMITED; # defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # defaultCONFIGURE ENCRYPTION ALGORITHM "AES128"; # defaultCONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # defaultCONFIGURE SNAPSHOT CONTROLFILE NAME TO "C:ORACLE10.2.0DB_1DATABASESNCFORCL10G.ORA"; # default我在同样的平台进行简单测试,结果是一切正常,我归结为Kamus有RPWT,结果他非常不愿意承认,还找到同样有问题的外国朋友。为了不引起国际纠纷,我仔细比较了一下他的show all结果和我的设置,发现了问题所在。原来他的配置里多了很多SBT_TAPE的设置,虽然default的配置仍然是Disk,可是这些参数可能是导致问题的罪魁祸首。RMAN> show default device type;RMAN configuration parameters are:CONFIGURE DEFAULT DEVICE TYPE TO DISK;建议他清除这些设置,清除后恢复正常。

Oracle 数据库中,如何从CDB$ROOT进入到PDB?

1、需要配置安装VNC,然后通过VNC连接2、安装和配置VNC ① 安装vnc# yum install -y tigervnc-server tigervnc-server-module libXfont pixman xterm xorg-x11-twm 安装vnc及字体库# chkconfig vncserver on 设置开机自动启动 ②VNC配置修改 /etc/sysconfig/vncservers 文件,添加以下内容# The VNCSERVERS variable is a list of display:user pairs.## Uncomment the lines below to start a VNC server on display :2# as my "myusername" (adjust this to your own). You will also# need to set a VNC password; run "man vncpasswd" to see how# to do that.## DO NOT RUN THIS SERVICE if your local area network is# untrusted! For a secure way of using VNC, see this URL:# http://kbase.redhat.com/faq/docs/DOC-7028# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.# Use "-localhost" to prevent remote VNC clients connecting except when# doing so through a secure tunnel. See the "-via" option in the# `man vncviewer" manual page.# VNCSERVERS="2:myusername"# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"VNCSERVERS="1:root"VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp -depth 24"# -alwaysshared代表允许多用户同时登录 -depth代为色深,参数有8,16,24,32 #红色为新增内容

oracle 10g oracle 11g和oracle 12c有什么区别

最主要的区别是Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。

oracle cdb能改为pdb吗

不可以改,CDB和PDB是两个不同概念的数据库,负责的工作也不一样,CDB数据库可以包含多个PDB,CDB与PDB之间的关系类似于SQL SERVER的单实例多数据库架构。CDB(Container Database):数据库容器PDB(Pluggable Database):可插拔数据库

怎样更改oracle的编码方式

如何更改Oracle字符集国内最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能够支持繁体中文,并且按照2个字符长度存储一个汉字。UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是说UTF8是ZHS16GBK的严格超集。对于子集到超集的转换,Oracle是允许的,但是对于超集到子集的转换是不允许的。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份。我的方案是:先备份数据,然后强制转换字符集从UTF8到ZHS16GBK,然后导入备份数据。如果不行,才来重新建库,设置字符集ZHS16GBK,导入备份数据。如果这还不行,就把更改字符集从ZHS16GBK到UTF8(这是安全的),再导入备份数据,恢复到原始状况。这样就有可能避开重新建库的麻烦。1. 备份数据库中所有用户的数据以oracle用户登陆,执行以下命令# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。2. 评估UTF8转换成ZHS16GBK的风险转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。先安装属于 CSMIG 用户的一套表和过程。以oracle用户登陆UNIX,#sqlplus “/ as sysdab”SQL>@$ORACLE_HOME/ rdbms/admin/csminst.sqlSQL>exit# $ORACLE_HOMEincsscan -help可以更清楚如何使用csscan。# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 > csscan.log以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。3. 更改数据库的字符集为ZHS16GBK前面说过,通过命令“Alter Database Characeter Set XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX这是Oracle的非公开命令。“在使用这个命令时,Oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心,你必须清楚这一操作会带来的风险”。以oracle用户登陆UNIX,#sqlplus “/ as sysdba”SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER SESSION SET SQL_TRACE=TRUE;SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> ALTER DATABASE OPEN; SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; //如果不使用“INTERNAL_USE”参数,系统会提示出错://ERROR at line 1://ORA-12712: new character set must be a superset of old character setSQL> ALTER SESSION SET SQL_TRACE=FALSE;SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;此时,检查一下数据库的字符集是否更改过来SQL> select value$ from props$ where name="NLS_CHARACTERSET";VALUE$-----------------ZHS16GBK紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码。SQL>select spid,spname,spshortname from spinfovisual_hk …...非常不幸,我看到了一堆乱码,这也证明了Oracle不支持字符集从超集到子集的更改,当时心里很紧张,很怕失败,从而恢复到原样。但是根据以前的验证,把UTF8下的备份导入到ZHS16GBK中去,是OK的,所以继续尝试。4. 导入备份的用户数据还是以oracle用户登陆UNIX, 先删除库中的用户mmsc:#sqlplus “/ as sysdba”SQL>drop user mmsc cascade;SQL>exit再运行createuser.sql,生成mmsc用户。然后使用原来的备份文件,导入到mmsc用户中:注意:先设置NLS_LANG要与当前数据库的一致:ZHS16GBK。这样,导出时用户会话的NLS_LANG为UTF8,与原先的数据库字符集一致;现在为ZHS16GBK,与此时的数据库字符集一致。这样,导入时,就会进行字符转换。# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.ZHS16GBK”#imp mmsc/mmsc@mdspdb file=DSMPD113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc马上查看数据库中简体、繁体中文,哈哈,没有乱码了,一切显示正常。紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度。问题解决了!

Oracle 如何附加数据库

sqlserver才有附加,oracle没有附加这一说。oracle应该叫异机恢复,如果是12c并且是pdb的话,另说~

我在安装Oracle 12c数据库到了这一步时,请问这几个账户别是做什么用的?? 请解释的具体点,谢谢!

SYS用户:当创建一个数据库时,SYS用户将被默认创建并授予DBA角色,所有数据库数据字典中的基本表和视图都存储在名为SYS的方案中,这些基本表和视图对于Oracle数据库的操作时非常重要的。为了维护数据字典的真实性,SYS方案中的表只能由系统来维护,他们不能被任何用户或数据库管理员修改,而且任何用户不能在SYS方案中创建表。SYSTEM用户:SYSTEM与SYS一样,在创建Oracle数据库时,SYSTEM用户被默认创建并被授予DBA角色,用于创建显示管理信息的表或视图,以及被各种Oracle数据库应用和工具使用的内容表或视图。DBSNMP用户:看到SNMP(简单网络管理协议)就知道这个用户大概是干什么的了。DBSNMP是Oracle数据库中用于智能代理(Intelligent Agent)的用户,用来监控和管理数据库相关性能的用户,如果停止该用户,则无法提取相关的数据信息。PDBADMIN用户:看到PDB(Pluggable Database,可插拔数据库)就知道它大概是干什么的了。安装12c时选择了“create the database as a CDB”会要求设置PDBADMIN的口令,PDBADMIN是可插拔数据库中的一个共用角色,用于可插拔数据库的管理。

oracle 12c 怎样配置TNS来访问PDB

通过配置本地数据库的tns配置文件实现:去oracle安装目录下oracleproduct10.2.0db_2NETWORKADMIN 找到tnsnames.ora,用记事本打开,里边有远程数据库的tns连接配置串如下ORCL23 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.23)(PORT = 1521)) ) (CONNECT_DATA = (SID = ORCL) ) )添加好ip、端口和目标数据库的实例名(SID),然后确保tns名称(ORCL23)在整个文档中唯一,保存后打开数据库连接工具,输入远程数据库上的用户名密码,选择数据库对象为你配置的连接名就可以了

oracle 12c 怎样配置TNS来访问PDB

oracle 12c中无需配置额外的监听来连接pdb,在tns串中已经包含。首先要明确,所有的PDB都使用1个监听,配置多个实际上启动时也只有第1个有意义。 LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )接下来使用SID_LIST_LISTENER来进行静态注册服务。 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ora12c) #该服务是我配置的cdb信息 (SID_NAME = ora12c) ) (SID_DESC = (GLOBAL_DBNAME = pdborcl)#该服务是我配置的pdb信息 (SID_NAME = ora12c) ) ) ADR_BASE_LISTENER = /opt/oracle

oracle12 cdb pdb 是不是可以直接复制数据库文件

  Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。  clip_image002  其实大家如果对SQL SERVER比较熟悉的话,这种CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事呢。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。看来ORACLE也“抄袭”了一把SQL SERVER的概念,只是改头换面的包装了一番。  CDB组件(Components of a CDB)  一个CDB数据库容器包含了下面一些组件:  ROOT组件  ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。  SEED组件  Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库。  PDBS  CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。  这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。  1)连接到CDB数据库  连接到CDB数据库容器非常简单,跟以前连接数据库是一样的复制代码  [oracle@get-orasvr02 ~]$ sqlplus / as sysdbaSQL*Plus: Release 12.1.0.1.0 Production on Sun Oct 20 23:41:36 2013Copyright (c) 1982, 2013, Oracle. All rights reserved.  Connected to an idle instance.  SQL>  [oracle@get-orasvr02 ~]$ sqlplus sys/password as sysdbaSQL*Plus: Release 12.1.0.1.0 Production on Sun Oct 20 23:43:17 2013Copyright (c) 1982, 2013, Oracle. All rights reserved.  Connected to an idle instance.  SQL>  复制代码  2)查看数据库是否为CDB  复制代码  SQL> select name, decode(cdb, "YES", "Multitenant Option enabled", "Regular 12c Database: ") "Multitenant Option" , open_mode, con_id from v$database;NAME Multitenant Option OPEN_MODE CON_ID--------- ----------------------------- -------------------- ----------EPPS Multitenant Option enabled READ WRITE 0复制代码  YES表示该数据库是CDB,如果是NO表示是NO-CDB(普通数据库)3)查看当前容器(Container)  3.1  复制代码  SQL> show con_name  CON_NAME  ------------------------------  CDB$ROOT  SQL>  3.2  SQL> select sys_context("userenv", "con_name") "Container DB" from dual;Container DB  ----------------------------------------------------CDB$ROOT  SQL>  复制代码  4)查看CDB容器中的PDBS信息  查看CDB中有多少个pluggable database  复制代码  SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;CON_ID DBID GUID NAME OPEN_MODE---------- ---------- -------------------------------- ------------------------------ ----------2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS MOUNTEDSQL>  复制代码  5)启动PDB数据库  方式1:  复制代码  SQL> alter pluggable database PDBEPPS open;Pluggable database altered.  SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;CON_ID DBID GUID NAME OPEN_MODE---------- ---------- -------------------------------- ------------------------------ ----------2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS READ WRITE复制代码  方式2:  复制代码  SQL> alter session set container=PDBEPPS;Session altered.  SQL> startup  Pluggable Database opened.  SQL>  复制代码  6)关闭PDB数据库  SQL> alter pluggable database PDBEPPS close;Pluggable database altered.  SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;CON_ID DBID GUID NAME OPEN_MODE---------- ---------- -------------------------------- ------------------------------ ----------2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS MOUNTEDSQL>  7)在容器间切换  SQL> alter session set container=PDBEPPS;Session altered.  SQL> show con_name;  CON_NAME  ------------------------------  PDBEPPS  SQL>  SQL> alter session set container=CDB$ROOT;Session altered.  SQL> show con_name;  CON_NAME  ------------------------------  CDB$ROOT  SQL>

oracle 12c中cdb用户可以看pdb中的表吗

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。

oracle 12c rac pdb 数据库选择在哪个节点运行

两个节点,第一个节点能正常启动,但第二个节点报错。无论是在集群还是在实例,都无法启动数据库实例。[grid@m2 ~]$ srvctl start instance -d mdb -i mdb2PRCR-1013 : 无法启动资源 ora.mdb.dbPRCR-1064 : 无法在节点 m2 上启动资源 ora.mdb.dbORA-00203: ??????????ORA-00202: ????: ""+DATA/mdb/controlfile/current.268.821031437""CRS-2674: 未能启动 "ora.mdb.db" (在 "m2" 上)[grid@m2 ~]$ pwd/home/grid[grid@m2 ~]$ ll总计 4drwxrwxr-x 3 grid oinstall 4096 07-15 15:35 oradiag_grid[grid@m2 ~]$ pwd/home/grid[grid@m2 ~]$ srvctl status asm -n m1ASM 正在 m1 上运行[grid@m2 ~]$ srvctl status asm -n m2ASM 正在 m2 上运行ORA-03113: end-of-file on communication channel使用相同的pfile启动。SQL> startup pfile="/opt/app/oracle/product/11.2.0/dbs/initmdb1.ora";ORACLE instance started.Total System Global Area 1607008256 bytesFixed Size 1336820 bytesVariable Size 469764620 bytesDatabase Buffers 1124073472 bytesRedo Buffers 11833344 bytesORA-00203: using the wrong control filesORA-00202: control file: "+DATA/mdb/controlfile/current.268.821031437"NODE M2:SQL> show parameter controlNAME TYPE

oracle12C安装完成后,尝试用PLSQL连接PDB数据库,发现个问题PDB有没有SID?使用服务名来连接还是用SID?

从oracle10g开始,就建议使用服务名来连接数据库了吧!

如何配置Hibernate连接oracle12c 的PDB和CDB数据库

启动根容器:[oracle@eric ~]$ export ORACLE_SID=cup[oracle@eric ~]$ sqlplus / as sysdbaSQL*Plus: Release 12.1.0.2.0 Production on Wed Jan 21 16:00:06 2015Copyright (c) 1982, 2014, Oracle. All rights reserved.Connected to an idle instance.SQL> startup -----不会直接启动所有可插拔数据库,如需启动所有可插拔数据库,执行命令:alter pluggable database all openORACLE instance started.Total System Global Area 767557632 bytesFixed Size 2929112 bytesVariable Size 574623272 bytesDatabase Buffers 184549376 bytesRedo Buffers 5455872 bytesDatabase mounted.Database opened.停止根容器:SQL> shutdown immediate Database closed.Database dismounted.ORACLE instance shut down.查看是否创建了CDB,如果有显示名字:SQL> select name,cdb from v$database;NAME CDB--------- ---CUP YESSQL> show parameter service;NAME TYPE VALUE------------------------------------ ----------- ------------------------------service_names string cup查看容器名字,其中有3个容器:根容器、种子容器和自己创建的容器:SQL> select con_id,name from v$containers;CON_ID NAME---------- ------------------------------ 1 CDB$ROOT ---根容器 2 PDB$SEED ---种子容器,只可读 3 TEA ---自己创建的可插拔数据库SQL> select file_name from dba_data_files; FILE_NAME--------------------------------------------------------------------------------/oracle/app/oradata/CUP/datafile/o1_mf_system_bch07kvz_.dbf/oracle/app/oradata/CUP/datafile/o1_mf_sysaux_bch020oo_.dbf/oracle/app/oradata/CUP/datafile/o1_mf_undotbs1_bch0d2on_.dbf/oracle/app/oradata/CUP/datafile/o1_mf_users_bch0d15n_.dbfSQL> select file_name from cdb_data_files;FILE_NAME--------------------------------------------------------------------------------/oracle/app/oradata/CUP/datafile/o1_mf_system_bch07kvz_.dbf/oracle/app/oradata/CUP/datafile/o1_mf_sysaux_bch020oo_.dbf/oracle/app/oradata/CUP/datafile/o1_mf_undotbs1_bch0d2on_.dbf/oracle/app/oradata/CUP/datafile/o1_mf_users_bch0d15n_.dbf创建公共用户:SQL> create user c##eric identified by gao;User created.SQL> conn c##eric/gao ERROR:ORA-01045: user C##ERIC lacks CREATE SESSION privilege; logon denied ----没有权限,我们可以单独给其赋予权限,也可以给其指定角色。Warning: You are no longer connected to ORACLE.SQL> conn / as sysdbaConnected.SQL> grant dba to c##eric container=all; ---给其DBA角色,角色范围覆盖所有的容器Grant succeeded.SQL> conn c##eric/gaoConnected. ---连接成功切换容器:首先启动自己创建的容器数据库:SQL> alter pluggable database tea open; ---首先启动PDB数据库SQL> alter session set container = tea;Session altered.SQL> show con_name ---查看当前所在的容器名CON_NAME------------------------------TEA关闭可插拔数据库:SQL> alter pluggable database tea close immediate;Pluggable database altered.

Oracle设置系统参数进行性能优化

  一 SGA    Shared pool tunning   Shared pool的优化应该放在优先考虑 因为一个cache miss在shared pool中发生比在data buffer中发生导致的成本更高 由于dictionary数据一般比library cache中的数据在内存中保存的时间长 所以关键是library cache的优化   Gets (parse)在namespace中查找对象的次数   Pins (execution)在namespace中读取或执行对象的次数   Reloads (reparse)在执行阶段library cache misses的次数 导致sql需要重新解析    ) 检查v$librarycache中sql area的gethitratio是否超过 % 如果未超过 % 应该检查应用代码 提高应用代码的效率   Select gethitratio from v$librarycache where namespace= sql area ;    ) v$librarycache中reloads/pins的比率应该小于 % 如果大于 % 应该增加参数shared_pool_size的值   Select sum(pins) executions sum(reloads) cache misses sum(reloads)/sum(pins) from v$librarycache;   reloads/pins> %有两种可能 一种是library cache空间不足 一种是sql中引用的对象不合法    )shared pool reserved size一般是shared pool size的 % 不能超过 % V$shared_pool_reserved中的request misses= 或没有持续增长 或者free_memory大于shared pool reserved size的 % 表明shared pool reserved size过大 可以压缩    )将大的匿名pl/sql代码块转换成小的匿名pl/sql代码块调用存储过程    )从 i开始 可以将execution plan与sql语句一起保存在library cache中 方便进行性能诊断 从v$sql_plan中可以看到execution plans    )保留大的对象在shared pool中 大的对象是造成内存碎片的主要原因 为了腾出空间许多小对象需要移出内存 从而影响了用户的性能 因此需要将一些常用的大的对象保留在shared pool中 下列对象需要保留在shared pool中   a 经常使用的存储过程   b 经常操作的表上的已编译的触发器   c Sequence 因为Sequence移出shared pool后可能产生号码丢失   查找没有保存在library cache中的大对象   Select * from v$db_object_cache where sharable_mem> and   type in ( PACKAGE PROCEDURE FUNCTION PACKAGE BODY ) and kept= NO ;   将这些对象保存在library cache中   Execute dbms_shared_pool keep( package_name );   对应脚本 dbmspool sql    )查找是否存在过大的匿名pl/sql代码块 两种解决方案   A.转换成小的匿名块调用存储过程   B.将其保留在shared pool中   查找是否存在过大的匿名pl/sql块   Select sql_text from v$sqlarea where mand_type= and length(sql_text)> ;    )Dictionary cache的优化   避免出现Dictionary cache的misses 或者misses的数量保持稳定 只能通过调整shared_pool_size来间接调整dictionary cache的大小   Percent misses应该很低 大部分应该低于 % 合计应该低于 %   Select sum(getmisses)/sum(gets) from v$rowcache;   若超过 % 增加shared_pool_size的值    Buffer Cache    )granule大小的设置 db_cache_size以字节为单位定义了default buffer pool的大小   如果SGA< M granule= M 否则granule= M 即需要调整sga的时候以granule为单位增加大小 并且sga的大小应该是granule的整数倍    ) 根据v$db_cache_advice调整buffer cache的大小   SELECT size_for_estimate buffers_for_estimate estd_physical_read_factor estd_physical_reads   FROM v$db_cache_advice WHERE NAME= DEFAULT AND advice_status= ON   AND block_size=(SELECT Value FROM v$parameter WHERE NAME= db_block_size );   estd_physical_read_factor<=    ) 统计buffer cache的cache hit ratio> % 如果低于 % 可以用下列方案解决   ◆增加buffer cache的值   ◆使用多个buffer pool   ◆Cache table   ◆为 sorting and parallel reads 建独立的buffer cache   SELECT NAME value FROM v$sysstat WHERE NAME IN ( session logical reads    physical reads physical reads direct physical reads direct(lob) );   Cache hit ratio= (physical reads physical reads direct physical reads direct (lob))/session logical reads;Select (phy value dir value lob value)/log value from v$sysstat log v$sysstat phy v$sysstat dir v$sysstat LOB where log name= session logical reads and phy name= physical reads and dir name= physical reads direct and lob name= physical reads direct (lob) ;   影响cache hit ratio的因素 全表扫描 应用设计 大表的随机访问 cache hits的不均衡分布    )表空间使用自动空间管理 消除了自由空间列表的需求 可以减少数据库的竞争    其他SGA对象    )redo log buffer   对应的参数是log_buffer 缺省值与 OS相关 一般是 K 检查v$session_wait中是否存在log buffer wait v$sysstat中是否存在redo buffer allocation retries   A 检查是否存在log buffer wait   Select * from v$session_wait where event= log buffer wait ;   如果出现等待 一是可以增加log buffer的大小 也可以通过将log 文件移到访问速度更快的磁盘来解决   B   Select name value from v$sysstat where name in   ( redo buffer allocation retries redo entries )   Redo buffer allocation retries接近 小于redo entries 的 % 如果一直在增长 表明进程已经不得不等待redo buffer的空间 如果Redo buffer allocation retries过大 增加log_buffer的值   C 检查日志文件上是否存在磁盘IO竞争现象   Select event total_waits time_waited average_wait from v$system_event   where event like log file switch pletion% ;   如果存在竞争 可以考虑将log文件转移到独立的 更快的存储设备上或增大log文件   D 检查点的设置是否合理   检查alert log文件中 是否存在 checkpoint not plete   Select event total_waits time_waited average_wait from v$system_event   where event like log file switch (check% ;   如果存在等待 调整log_checkpoint_interval log_checkpoint_timeout的设置   E 检查log archiver的工作   Select event total_waits time_waited average_wait from v$system_event   where event like log file switch (arch% ;   如果存在等待 检查保存归档日志的存储设备是否已满 增加日志文件组 调整log_archiver_max_processes   F DB_block_checksum=true 因此增加了性能负担 (为了保证数据的一致性 oracle的写数据的时候加一个checksum在block上 在读数据的时候对checksum进行验证)    )java pool   对于大的应用 java_pool_size应>= M 对于一般的java存储过程 缺省的 M已经够用了    )检查是否需要调整DBWn lishixinzhi/Article/program/Oracle/201311/17744

oracle v$librarycache中get gethits pins pinhits都是什么意思,麻烦重点解释一下pins pinhits

GETS进程请求该名字空间里的对象的次数GETHITS 内存中找到对象句柄次数PINS 请求pin次数PINHITS 内存中找到该对象全部数据信息次数 那个 看帮助文档吧

Oracle 报错 Ora-20001

你干啥的时候,出的这个错。

oraclevm怎么用vagrant安装

  Vagrant使用与入门技巧详解  Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境了,安装方法是非常的简单的,下面一起来看看Vagrant使用与入门技巧.  1.1 项目初始化  Vagrant使用Vagrant文件作为配置文件,该文件中定义了项目的根目录,Vagrant的很多配置都是基于这个配置的根目录进行的,同时,该文件也描述了项目运行所需要的机器类型以及其它资源(比如安装哪些软件等)。  要初始化一个Vagrant项目,使用命令vagrant init命令,使用该命令后,会在当前目录创建一个名为Vagrantfile的配置文件,修改该文件改变Vagrant项目的行为。  $ mkdir vagrant_getting_started  $ cd vagrant_getting_started  $ vagrant init  Vagrant使用盒子(box)创建开发环境,所谓的盒子就是一个已经配置好的基础的虚拟机镜像,Vagrant避免了每次创建项目都去重新创建虚拟机,而是按照Vagrantfile文件的配置从基础镜像创建这个Box。  可以在已经存在的项目上使用vagrant init命令,该命令只会创建配置文件,并不会对原有项目造成影响。如果需要,可以将该配置文件Vagrantfile加入到项目的版本控制中,这样团队中的其它开发者就可以快速的建立起开发环境已进行运行调试了。  在创建Vagrant项目的时候,首先需要做的是添加一个Box,通过使用命令vagrant box add添加一个盒子,Vagrant网站上提供了很多其它开发者共享的Box,我们可以直接复用,在Vagrant Cloud上可以查找你需要的Box并且添加到本地。  $ vagrant box add chef/centos-6.5  添加的盒子是可以被多个项目同时使用的,项目在初始化Box的时候并不会修改添加的基础Box,而是克隆一份Box的副本,在副本上进行配置。  添加盒子之后,我们需要配置项目使用这个盒子作为基础,修改Vagrantfile文件:  Vagrant.configure("2") do |config|  config.vm.box = "chef/centos-6.5"  end  注意: 如果这里指定的box没有添加过,则Vagrant会自动去下载该Box。  1.2 启动并运行项目  在配置完成后,就可以启动该虚拟环境了,使用命令vagrant up启动开发环境。  $ vagrant up  启动之后,我们可以使用ssh连接到该虚拟机上:  $ vagrant ssh  现在你已经连接到该虚拟机上了,你可以像操作普通Linux系统一样做你希望做的事情。  注意的是,在该虚拟机上进行rm -fr /操作的时候请谨慎一些,因为在该虚拟机中,挂载了/vagrant目录,该目录是与你主机的项目共享的,删除的话会将项目删除掉。  在该虚拟机使用完成后,如果不再需要了,可以使用vagrant destroy命令移除该虚拟机。  提示: 默认配置下,虚拟机中的/vagrant目录与主机上的项目目录是同一个目录,该目录中的所有操作都会自动同步。  1.3 创建项目初始化脚本  每次初始化系统的时候都需要重新安装软件是一件非常麻烦的事,因此,Vagrant提供了一种简单的方式来帮我们完成这个过程,在建立虚拟机的时候可以指定自动执行脚本。  在项目目录下创建一个bootstrap.sh的脚本文件:  #!/usr/bin/env bash  apt-get update  apt-get install -y apache2  rm -rf /var/www  ln -fs /vagrant /var/www  该脚本是在Ubuntu环境下使用的,如果你是用的Box是CentOS,则不能使用apt-get命令了,而应该使用yum命令完成程序的安装。  接下来,我们需要配置Vagrantfile文件,让其在建立环境的时候自动执行该脚本。  Vagrant.configure("2") do |config|  config.vm.box = "hashicorp/precise32"  config.vm.provision :shell, path: "bootstrap.sh"end  这样配置之后,使用命令vagrant up启动虚拟机的时候,该脚本就会自动执行,完成虚拟机的初始化了。  如果你的虚拟机已经处于运行状态了,可以通过使用命令vagrant reload --provision快速的重新启动虚拟机,命令中的--provision告诉Vagrant在重启的时候运行provisioners的配置,通常情况下,provisioners的配置只在执行vagrant up命令的时候才会执行。  1.4 网络配置  Vagrant提供了端口转发功能,通过将虚拟机中的端口映射到主机的不同端口,我们可以在主机中使用映射后的端口访问虚拟机中的服务。  例如:  Vagrant.configure("2") do |config|  config.vm.box = "hashicorp/precise32"  config.vm.provision :shell, path: "bootstrap.sh"config.vm.network :forwarded_port, host: 4567, guest: 80end  使用如上配置启动虚拟机之后,就可以在主机上使用http//127.0.0.1:4567访问虚拟机上的Apache提供的Web服务了。  1.5 Teardown(虚拟机卸载)  当你希望切换到其它项目上开发或者是当你要出去吃午饭,你下班了的情况下,你需要清理一下你的开发环境,这个时候,Vagrant提供了三种方式,它们各有各自的优缺点,因此,你需要自己去权衡你希望采用哪种方式。  Suspending (挂起) 执行命令vagrant suspend将会保存当前虚拟机的运行状态并且停止它,跟主机挂起是一样的,当你需要再次启动的时候,使用vagrant up命令将会恢复之前的运行状态。这种方式的优点是,启动很迅速,可以很快进入开发环境中,缺点是会占用比较多的磁盘空间,因为虚拟机将内存中的数据都存储到了磁盘上。  Halting(停止) 这种方式是正常的停止虚拟机,使用虚拟机的关闭命令完成,当需要重新使用的时候使用命令vagrant up重新启动虚拟机,该方法与计算机冷启动一样,缺点是启动的时候耗时比较多,依然占用部分磁盘空间。  Destroying(销毁) 该方式将会销毁虚拟机,不会再占用磁盘空间,下次启动的时候将会重新建立开发环境,包括下载软件等等。  Vagrant使用技巧  1.1 如何调试  在使用Vagrant过程中,难免会出现一些不稳定的因素而造成一些使用上的bug,因此,Vagrant提供了Debug日志的方式用于调试,可以方便的查找错误的原因,以便快速解决问题。  要允许启用日志功能,需要在主机上设置环境变量VAGRANT_LOG为需要的日志级别,包含debug, info, warn, error。当你需要查找错误产生的原因的时候,通常使用日志级别info,这种情况下你可以得到包含重要信息的比较干净的日志。  在Linux和Mac系统上,你可以通过下面的方式设置:  $ VAGRANT_LOG=info vagrant up  在Windows下,你需分开写:  $ set VAGRANT_LOG=info  $ vagrant up  当然,你也可以不用这种方式,只需要在启动的时候增加参数--debug即可。  $ vagrant up --debug  1.2 如何使用插件  Vagrant中提供了很多可以直接使用的插件,使用这些插件,可以极大的减少配置开发环境的工作量,Vagrant的大部分核心功能都是基于插件实现的。  Vagrant使用命令vagrant plugin install安装插件。  $ vagrant plugin install vagrant-example-plugin插件安装完成后,将会在Vagrant启动的时候自动加载,如果插件加载过程中出现错误,不会影响Vagrant的启动,而是会输出插件加载失败的错误信息。  插件安装完成后,你应该查看插件开发文档获取如何使用该插件,一般可以通过vagrant命令使用插件的命令,如果插件提供了provision的话,可以通过config.vm.provision进行配置。  插件的更新比较简单,使用命令vagrant plugin update即可更新全部插件,使用vagrant plugin update NAME可以更新指定插件。  插件卸载使用命令vagrant plugin uninstall。  $ vagrant plugin uninstall vagrant-example-plugin查看安装了哪些插件:  vagrant plugin list  1.3 如何配置网络  在Vagrant中,所有的网络配置都在Vagrantfile中的config.vm.network方法中。  Vagrant.configure("2") do |config|  # other config here  config.vm.network "forwarded_port", guest: 80, host: 8080end  每一种网络类型都有一个标识符如:forwarded_port,它后面跟着一串配置选项。在端口跳转的例子中,提供了两个参数,虚拟机中的端口号和主机中映射的端口号。  如果需要多个网络配置,使用多个config.vm.network即可。  如何进行端口跳转  端口跳转功能允许你通过TCP或者是UDP直接访问主机上的指定端口,该端口的请求会被转发到虚拟机上的指定端口。  Vagrant.configure("2") do |config|  config.vm.network "forwarded_port", guest: 80, host: 8080end  上面的配置将会主机上对8080端口的访问转发到虚拟机上的80端口。  下面是该配置(forwarded_port)支持的参数:  guest (int) 希望暴漏给主机的虚拟机端口  guest_ip(string) 希望绑定的IP,该IP与guest指定的端口暴漏给主机,默认为空,所有网卡接口。  host(int) 希望使用来访问虚拟机的guest端口的主机端口号host_ip(string) 主机的IP地址,用于绑定到跳转的端口,如果不指定,则使用所有IP。  protocol(string) 可选tcp或者udp,默认为tcp.  Vagrant.configure("2") do |config|  config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "tcp"  config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "udp"  end  1.4 如何配置同步目录  使用config.vm.synced_folder方法配置同步目录。  Vagrant.configure("2") do |config|  # other config here  config.vm.synced_folder "src/", "/srv/website"end  以上配置中,synced_folder方法的第一个参数为主机上要跟虚拟机同步的目录,第二个参数为要挂载到虚拟机上的路径。  可以配置参数disabled: true禁止目录同步。  Vagrant.configure("2") do |config|  config.vm.synced_folder "src/", "/srv/website", disabled: trueend  默认情况下,Vagrant设置同步文件夹的属主/组为SSH用户,如果需要修改的话,使用下面配置:  config.vm.synced_folder "src/", "/srv/website",owner: "root", group: "root"

oracle里的job和schedule有什么区别

10g 中新推出的SCHEDULER可能确实会让很多初接触的朋友感觉晕头晕脑,相比之前的jobs,SCHEDULER中新增的概念太多。比如说jobs,仍然可以理解成之前版本中的jobs,不过功能更加强大(注意10g中也仍然可以使用普通jobs,这是废话,相信看本篇文章的朋友目前应该还是这样在用),比如说program,指的是运行的程序(把要做什么单提出来了),比如说schedule,我将其翻译为调度(job我翻译为任务),定义执行的频率或者说周期。3.1 创建和管理Schedule s  Schedule ,中文直译的话应该理解成调度,从名字来看,它是一个逻辑实体(逻辑,还实体,好矛盾),就是说当创建了schedule之后,数据库中就肯定存在这一对象,只不过这一对象是用来描述job的执行周期。  创建schedule可以通过DBMS_SCHEDULER.CREATE_SCHEDULE过程,该过程支持的参数如下:SQL> desc dbms_scheduler.create_schedule;Parameter Type Mode Default? --------------- ------------------------ ---- -------- SCHEDULE_NAME VARCHAR2 IN START_DATE TIMESTAMP WITH TIME ZONE IN Y REPEAT_INTERVAL VARCHAR2 IN END_DATE TIMESTAMP WITH TIME ZONE IN Y COMMENTS VARCHAR2 IN Y   各参数分别代表含意如下:SCHEDULE_NAME :指定schedule名称,注意名称不能重复。 START_DATE :指定该调度的开始时间,可为空,当为空时表示该调度暂不起用。 REPEAT_INTERVAL :指定调度的执行频率或周期。 END_DATE :指定调度的结束时间,可为空,为空时就表示该调度将一直进行。 COMMENTS :注释信息。  这其中,比较有技术含量的是REPEAT_INTERVAL参数,对于这个参数大家应该不会太陌生,因为前面介绍Jobs,也曾经提到过同名的参数,Schedules中的REPEAT_INTERVAL参数和Jobs中的REPEAT_INTERVAL参数功能完全相同,甚至参数格式也一模一样。  REPEAT_INTERVAL 参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,分别表示年、月、周、日、时、分、秒等单位。 INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。  比如说,当指定REPEAT_INTERVAL=>"FREQ=DAILY;INTERVAL=1";就表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。  下面,创建一个schedule,指定调度为每周一次的频率,执行脚本如下:SQL> begin 2 DBMS_SCHEDULER.CREATE_SCHEDULE ( 3 schedule_name => "my_first_schedule", 4 start_date => SYSDATE, 5 repeat_interval => "FREQ=WEEKLY; INTERVAL=1", 6 comments => "Every 1 weeks"); 7 END; 8 /PL/SQL procedure successfully completed.  查询当前已经创建的schedules,可以通过*_SCHEDULER_SCHEDULES视图(含DBA_,ALL_,USER_),例如,查看当前用户拥有的schedules,执行语句如下:SQL> select schedule_name,repeat_interval from user_scheduler_schedules;SCHEDULE_NAME REPEAT_INTERVAL------------------------------ ------------------------------MY_FIRST_SCHEDULE FREQ=WEEKLY; INTERVAL=1  如果要修改schedule属性的话,也是使用DBMS_SCHEDULER.SET_ATTRIBUTE过程,该过程的调用方式前面已经多次演示过,这里就不再重复举例了,仅说明一点,对于schedule来说,能够修改的属性包括:REPEAT_INTERVAL、COMMENTS、END_DATE、START_DATE以及EVENT_SPEC。  至于删除schedule,再简单不过,执行DBMS_SCHEDULER.DROP_SCHEDULE过程即可,例如:SQL> EXEC DBMS_SCHEDULER.DROP_SCHEDULE("MY_FIRST_SCHEDULE");PL/SQL procedure successfully completed.

如何使用JDBC PreparedStatement对象批量处理更新和插入Oracle数据

 如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():PreparedStatement pstmt3D null; try {((OraclePreparedStatement)pstmt).setExecuteBatch(30); ...pstmt.executeUpdate(); }

oracle中NUMBER(10,2)是什么类型,什么意思??

允许10位NUMBER类型数据,允许有8位整数,小数点后2位小数。oracle的number类型是oracle的内置类型之一,是oracle的最基础数值数据类型。在9iR2及其以前的版本中只支持一种适合存储数值数据的固有数据类型,在10g以后,才出现了两种新的数值类型。扩展资料:甲骨文公司产品主要有以下几类:服务器及工具(主要竞争对手:IBM、微软):数据库服务器:2013年最新版本Oracle 12C。应用服务器:Oracle Application Server。开发工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。企业应用软件(主要竞争对手:德国SAP公司):企业资源计划(ERP)软件。已有10年以上的历史。2005年,并购了开发企业软件的仁科软件公司(PeopleSoft)以增强在这方面的竞争力。客户关系管理(CRM)软件。自1998年开始研发这种软件。2005年,并购了开发客户关系管理软件的希柏软件公司(Siebel)。

SAP和Oracle的区别是什么?

SAP:秉承德国企业严谨的文化,所有发布的产品都是经过严格的测试和质量认证,只有在软件产品真正完备后才向用户推出。Oracle:公司是一个非常注重市场效应的企业,经常是一有概念就马上宣称产品完成,然后快速推向市场。但是,软件产品的漏洞和缺陷给其用户得实施和使用造成了巨大的痛苦。2002年1到3月,Oracle发给新产品用户的修补程序包竟然高达5000个以上,这对用户来说无疑是一场恶梦。经过近30年与全球大企业用户的合作,SAP系统积累了大量先进企业的业务管理流程。对于用户来说,只需根据在系统中挑选适当的业务流程,在软件中进行配置。而对软件的二次开发工作量极少,这就保证了用户能够把主要的精力都花在企业业务流程的优化上,真正起到上一套系统,管理提高一个层次的作用 Oracle: 由于缺乏足够的业务流程模板和软件功能的支持,在实施中Oracle软件经常被发现无法满足企业管理上的要求。比如在大型制药企业中必须的批次管理、质量管理、设备维护管理等,而Oracle软件根本没有此类模块。虽然Oracle公司一再的夸大告诉客户其软件的二次开发技术十分灵活,但是这实际上也就是在告诉用户这套软件功能不够,用户得自己去编程序。

谁有oracle support账号 ,https://support.oracle.com帮忙查一个oracle Siebel 的 Doc ID 1544334.1

CAUSEFull image of Siebel 8.1.1.10 installation media is for Siebel Enterprise Server and Siebel Web Server Extension, and not for Siebel Web Client and Siebel Tools. In other word, they are created as normal patch images.This information is written in Bookshelf;Siebel Installation Guide for Microsoft Windows > Creating the Siebel Installation Image on the Network > Product Changes for Siebel CRM Version 8.1.1.8 and Later SOLUTIONInstall Siebel Web Client 8.1.1.0 (base image) first, and then install Siebel Web Client 8.1.1.10.

oracle是什么意思?

意思:原意指(古希腊的)神示所;(传达神谕的)牧师,女祭司;(古希腊常有隐含意义的)神谕,神示;能提供宝贵信息的人(或书);权威;智囊。另外,也指甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司)。1、英文意思:(古希腊的)传神谕者,神使,宣示神谕的祭司。例句:In ancient Greece, an oracle was a priest or priestess who made statements about future events or about the truth.译文:在古希腊,神谕是一位牧师或女祭司,她对未来的事件或真理作了陈述。2、公司代称:甲骨文公司。甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1977年埃里森与同事Robert Miner创立“软件开发实验室”(Software Development Labs),当时IBM发表“关系数据库”的论文,埃里森以此造出新数据库,名为甲骨文。最先提出“关系数据库”的IBM采用RSI的数据库。1982年再更名为甲骨文(Oracle)。扩展资料:甲骨文公司产品主要有以下几类:1.服务器及工具(主要竞争对手:IBM、微软)数据库服务器:2013年最新版本Oracle 12C。应用服务器:Oracle Application Server。开发工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。2.企业应用软件(主要竞争对手:德国SAP公司)企业资源计划(ERP)软件。已有10年以上的历史。2005年,并购了开发企业软件的仁科软件公司(PeopleSoft)以增强在这方面的竞争力。客户关系管理(CRM)软件。自1998年开始研发这种软件。2005年,并购了开发客户关系管理软件的希柏软件公司(Siebel)。3. Oracle职业发展力计划(Oracle WDP)Oracle WDP 全称为Oracle Workforce Development Program,是Oracle (甲骨文)公司专门面向学生、个人、在职人员等群体开设的职业发展力课程。参考资料来源:百度百科-甲骨文公司

Oracle与sap哪个好用_oracle和sap的区别

这个问题在ERP行业是个经典问题,我试着回答一下:1)就功能而言,两者的差别很小,目前国内绝大多数企业的功能需求,这两个软件都能满足;2)实施方面,要取决于具体咨询顾问。目前国内SAP顾问人数远多于Oracle顾问人数,且经验也相对丰富些;3)行业方面,SAP是制造业ERP的鼻祖,所以在传统制造业(机械、汽车、石油化工等)里优势明显,而Oracle在服务行业(金融、电信、民航、零售)较为领先4)外围软件,Oracle优势明显,由于Oracle收购了PeopleSoft、Siebel、JDE、Hyperion等优势产品,因此在人力资源管理、全面预算管理、客户关系管理等领域的功能上远远强于SAP5)未来发展,SAP将会继续专注于企业管理领域,因此SAP下一代产品将会进一步优化其业务,适应互联网平台;Oracle近年来加强对应用软件底层架构的收购,如BEA、SUN等公司的介入,使得Oracle已经不是一个纯粹的软件公司了,有点类似以前的IBM和HP了,因此ERP有可能在Oracle公司内被边缘化。6)成本方面,软件价格差不多,实施成本差不多,不过近年来,Oracle系统的实施总成本在统计意义上比SAP要低一些,大概不到20%因此,在面对这两个软件作选型工作时,必须综合考虑上述因素,结合本企业实际情况,作出较为明智的选择。不过话要说回来,其实当企业面临最后这两个软件的选型时,最后选哪个,意义并不大,我认为选择咨询服务公司和实施团队更为重要。

SAPERP和ORACLEERP的区别是哪些(erp和sap的区别是什么意思啊)

俩品牌单纯的说区别不是很好对比,总体来说SAP系列的ERP软件档次划分比较多以及软件的行业划分是比较清晰比较详细的;Oracle和SAP是当今ERP市场仅存的两家超大型的供应商,Oracle同时又是数据库、中间件、硬件服务器以及多级中型ERP品牌的拥有者,公司有着较强的发展趋势和上升势头。而SAP一直专注于ERP产品的开发和实施,发展历史久远且;但由于近些年技术落后和产品的封闭性,且发展已经趋缓。1.软件功能优势分析:从传统ERP软件功能角度讲,两家的产品功能都比较齐全,而且也都是比较成熟可行的,企业在选型的时候可能更多的会关注在这些功能是否与自身行业特点或个性化需求相符合。可能以前某些领域Oracle相对SAP会弱一些,但Oracle通过收购来补足,比如全球最好的HR解决方案PeopleSoft,最好的CRM方案Siebel,最好的PLM/PDM方案Agile,最好的绩效管理方案Hyperion等等。另外,Oracle在石化、化工和制药等行业有专门的OPM制造解决方案,其具有鲜明石化和制药行业特征的“工艺配方管理”、“产品批次管理”等功能都充分体现了流程制造的特点。并且通过内部的高度集成,OPM系统可以和Oracle离散制造、采购、库存、销售、成本核算等众多模块联合已形成一整套完整的“医药行业制造、物流解决方案”。

Oracle 建表 constraint pk_course primary key (cno,tno)这句和SC表最后一句做什么用的?希望具体点儿

注意看 constraint 是表示 它是个约束; primary key 表示是个主键约束 所以 constraint pk_course primary key (cno,tno)表示 course表上存在一个名字叫“pk_course”的主键约束 ,它的主键列是 cno,tno的组合列下面那个同理表示 SC表上存在一个名字叫“pk_sc”的主键约束 ,它的主键列是 sno,cno的组合列这是primary key的资料:

Oracle Retek是什么

我接着回答下,Oracle Retail是零售行业端到端的完整管理系统。从采购到付款,从商机到收款(因为涵盖了Siebel的功能,所以不再是像EBS一样,只能从订单开始管理)。而其中的Retek,则是以他的计划Planning功能著称。主要有两部分:第一个是Merchandise Financial Planning 商品财务计划,将高层次的预算和目标,通过合理的逻辑分解到门店和具体的产品品类。第二个部分是Assortment planning ,品类计划。是上承MFP的具体细则。比较高的管理要求,是要AP和MFP能够一致吻合的。但是因为门店经营的目标和大环境的改变,真的能保证协调比较困难。

为什么oracle在定义主键的时候,primary key 后面为什么还要跟一个not null,primary key不就是要求非空的

primary key=unique key+not null1楼正解!

oracleprimary会影响normal吗

oracleprimary不会影响normal。primarykey(主键)和normal并没有直接的关系,也就是说primarykey并不会直接影响到normal。

Oracle primary key和unique key的区别与联系

primary key和unique key都是oracle中的约束类型。primary key,要求列值必须是唯一的,并且不能是nullunique key,同样要求列支必须是唯一的,但是可以为null他们两个在创建表的时候,都会自动添加唯一索引。不需要手工创建。

Oracle primary key和unique key的区别与联系

转:u2022primary key与unique key都是唯一性约束。但二者有很大的区别: u20221.作为primary key的1个或多个列必须为NOT NULL, u2022 如果建表时此列设为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。 u2022 而unique key约束的列可以为null,这是primary key与unique key最大的区别。 u20222.一个表只能有一个primary key(单列或多列,多列主键叫联合主键),但可以有多个unique key。 u2022实例1: u2022create table t(c1 number(2),c2 date,c3 varchar2(5),c4 int); u2022desc t; u2022Name Type Nullable Default Comments u2022---- ----------- -------- ------- -------- u2022C1 NUMBER(2) Y u2022C2 DATE Y u2022C3 VARCHAR2(5) Y u2022C4 INTEGER Y u2022// u2022实例2:添加primary key u2022alter table t add constraint t_pk primary key(c1,c2); u2022desc t; u2022Name Type Nullable Default Comments u2022---- ----------- -------- ------- -------- u2022C1 NUMBER(2) u2022C2 DATE u2022C3 VARCHAR2(5) Y u2022C4 INTEGER Y u2022我们看到,将c1,c2列设为联合主键后,他们变为not null; u2022如果在建表时就指定了主键的话,主键列将会默认为not null。 u2022// u2022如果我们在添加一个primary key,那么我们将会得到一个错误: u2022alter table t add constraint t_pk_2 primary key(c3,c4) u2022ORA-02260: table can have only one primary key u2022// u2022实例3:添加unique key u2022alter table t add constraint unique_key_t unique(c3,c4); u2022实例4:添加数据 u2022insert into t(c1,c2,c3,c4) u2022values(10,sysdate,"abc",3); u20221 row inserted u2022// u2022insert into t(c1,c2,c3,c4) u2022values(11,sysdate,"abc",3); u2022ORA-00001: unique constraint (SCOTT.UNIQUE_KEY_T) violated u2022我们看到,添加的第二条数据违反了刚刚创建的唯一键约束; u2022将unique_key_t删除,添加就能成功了。 u2022实例5:删除unique key u2022alter table t drop constraint unique_key_t; u2022insert into t(c1,c2,c3,c4) u2022values(11,sysdate,"abc",3); u20221 row inserted u2022// u2022实例6:删除primary key u2022alter table t drop constraint t_pk; u2022Table altered u2022// u2022desc t; u2022Name Type Nullable Default Comments u2022---- ----------- -------- ------- -------- u2022C1 NUMBER(2) Y u2022C2 DATE Y u2022C3 VARCHAR2(5) Y u2022C4 INTEGER Y u2022删除主键约束后,c1,c2列由恢复了原来的默认值null。 u2022// u20223.其实primary key也是unique key,被primary key约束的列not null,并且不允许重复 u2022实例7: u2022truncate table t; u2022Table truncated u2022// u2022alter table t add constraint t_pk primary key(c1,c2); u2022Table altered u2022// u2022insert into t(c1,c2,c3,c4) u2022values(1,to_date("2011-01-01","yyyy-mm-dd"),"csdn",10); u20221 row inserted u2022// u2022insert into t(c3,c4) u2022values("china",1); u2022ORA-01400: cannot insert NULL into ("SCOTT"."T"."C1") u2022// u2022insert into t(c1,c2,c3,c4) u2022values(1,to_date("2011-01-01","yyyy-mm-dd"),"csdn",10); u2022ORA-00001: unique constraint (SCOTT.T_PK) violated u2022这里,我们看到primary key t_pk变成了unique约束,证明了主键约束也是唯一约束。

Oracle是什么公司

ORACLE(甲骨文)公司,是仅次于微软的全球第二大软件公司,同时是全球最大的数据库管理系统(RDBMS)供应商.

SAP和Oracle的区别是什么

俩品牌单纯的说区别不是很好对比,总体来说sap系列的erp软件档次划分比较多以及软件的行业划分是比较清晰比较详细的;oracle和sap是当今erp市场仅存的两家超大型的供应商,oracle同时又是数据库、中间件、硬件服务器以及多级中型erp品牌的拥有者,公司有着较强的发展趋势和上升势头。而sap一直专注于erp产品的开发和实施,发展历史久远且;但由于近些年技术落后和产品的封闭性,且发展已经趋缓。软件功能优势分析:从传统erp软件功能角度讲,两家的产品功能都比较齐全,而且也都是比较成熟可行的,企业在选型的时候可能更多的会关注在这些功能是否与自身行业特点或个性化需求相符合。可能以前某些领域oracle相对sap会弱一些,但oracle通过收购来补足,比如全球最好的hr解决方案peoplesoft,最好的crm方案siebel,最好的plm/pdm方案agile,最好的绩效管理方案hyperion等等。另外,oracle在石化、化工和制药等行业有专门的opm制造解决方案,其具有鲜明石化和制药行业特征的“工艺配方管理”、“产品批次管理”等功能都充分体现了流程制造的特点。并且通过内部的高度集成,opm系统可以和oracle离散制造、采购、库存、销售、成本核算等众多模块联合已形成一整套完整的“医药行业制造、物流解决方案”。

Oracle是什么公司

甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。2018年12月,世界品牌实验室编制的《2018世界品牌500强》揭晓,甲骨文公司排名第31。甲骨文一向都有在第四财季末公布乐观财务数字的传统,公司销售部门在财年末的时候总是喜欢提供大幅折扣提高业绩,以致很多客户会把其采购推迟到5月份以获得很低的价格。“人生中有三件事情是可以肯定的,死亡、纳税以及甲骨文的第四财季,” Cowen and Co分析师Peter Goldmacher说。扩展资料:甲骨文公司的业务:一、服务器及工具(主要竞争对手:IBM、微软)1、数据库服务器:2013年最新版本Oracle 12C。2、应用服务器:Oracle Application Server。3、开发工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。二、企业应用软件(主要竞争对手:德国SAP公司)1、企业资源计划(ERP)软件。已有10年以上的历史。2005年,并购了开发企业软件的仁科软件公司(PeopleSoft)以增强在这方面的竞争力。2、客户关系管理(CRM)软件。自1998年开始研发这种软件。2005年,并购了开发客户关系管理软件的希柏软件公司(Siebel)。三、Oracle职业发展力计划(Oracle WDP)Oracle WDP 全称为Oracle Workforce Development Program,是Oracle (甲骨文)公司专门面向学生、个人、在职人员等群体开设的职业发展力课程。Oracle的技术广泛应用于各行各业,其中电信、电力、金融、政府及大量制造业都需要Oracle技术人才。Oracle公司针对职业教育市场在全球推广的项目,其以低廉的成本给这部分人群提供Oracle技术培训,经过系统化的实训,让这部分人群能够迅速掌握Oracle最新的核心技术,并能胜任企业大型数据库管理、维护、开发工作。参考资料来源:百度百科-甲骨文公司

Oracle VM VirtualBox虚拟机用u盘启动后,出现问题

在此虚拟机的设置中:系统--主板--扩展特性--把“启用EFI”前的钩去掉。 这个可以添加一个硬链接对应U盘,以下来源于互联网,向作者致敬!Windows下进入命令行cmdcd C:Program FilesSunxVM VirtualBox获取磁盘信息(这个最关键)wmic /output:d:diskdrive.html diskdrive list /format:htable打开d:diskdrive.html ,查看DeviceID栏,获取到你的U盘DeviceID,如.PHYSICALDRIVE1获取磁盘分区信息(确认是哪个U盘)VBoxManage internalcommands listpartitions -rawdisk \.PHYSICALDRIVE1下面是我的U盘信息,8G的,显示7655MBNumber Type StartCHS EndCHS Size (MiB) Start (Sect)1 0x0b 0 0 45 975 25463 7655 44为U盘创建启动文件VBoxManage internalcommands createrawvmdk -filename dUsbDisk.vmdk -rawdisk \.PHYSICALDRIVE1 打开virtualbox--设置--硬盘--添加连接(Ins)会找到刚才新建的UsbDisk.vmdk(如果没有自动找到,手工添加就可以了)常规--高级--Boot Order--硬盘,启动你的虚拟机,成功了!

怎么在java代码中设置oracle存储过程中的入参和出参

public String insertJCSP(Map parmaters) {// TODO Auto-generated method stubString str=null;Connection conn = null;CallableStatement csm = null;conn = (Connection) sqlSession.getSqlSessionFactory().openSession().getConnection();try {csm = conn.prepareCall("{Call pr_insert_JcInfo(?,?,?)}"); //调用存储过程csm.setString(1, (String) parmaters.get("lottId")); //第一个入参数csm.setString(2, (String) parmaters.get("idata"));//第二个入参数csm.registerOutParameter(3, java.sql.Types.VARCHAR);//返回参数csm.execute();str = csm.getString(3); //取得返回参数

求:判断当天是否为当月最后一天 的 oracle存储过程

select trunc(sysdate),trunc(last_day(sysdate)) from dual;

在oracle中如何得到当天月份的第一天和最后一天

sql@kokooa>SELECT Trunc(Trunc(SYSDATE, "MONTH") - 1, "MONTH") First_Day_Last_Month, 2 Trunc(SYSDATE, "MONTH") - 1 / 86400 Last_Day_Last_Month, 3 Trunc(SYSDATE, "MONTH") First_Day_Cur_Month, 4 LAST_DAY(Trunc(SYSDATE, "MONTH")) + 1 - 1 / 86400 Last_Day_Cur_Month 5 FROM dual;FIRST_DAY_LAST LAST_DAY_LAST_ FIRST_DAY_CUR_ LAST_DAY_CUR_M-------------- -------------- -------------- --------------01-9月 -09 30-9月 -09 01-10月-09 31-10月-09你试试

用oracle创建一个包 实现表的增删改查 用过程和函数实现。

create or replace package UBS_USER_PKG istype user_record_type is record ( userID number(4), username varchar2(20), createdate date, deptID number(4), gender number(1), job varchar2(30), remarks varchar2(200), birthday date, jobexperience varchar2(200), education varchar2(200), relationship varchar2(200) ); type user_ref_cursor is ref cursor return user_record_type; type user_table_type is table of user_record_type index by binary_integer;procedure user_query(dmlset in out user_ref_cursor); procedure user_lock(dmlset in out user_table_type); procedure user_insert(dmlset in out user_table_type); procedure user_update(dmlset in out user_table_type); procedure user_delete(dmlset in out user_table_type);end UBS_USER_PKG;/create or replace package body UBS_USER_PKG isprocedure user_query(dmlset in out user_ref_cursor) isbeginopen dmlset forselect userid,username,createdate,deptid,gender,job,remarks,birthday,jobexperience,education,relationshipfrom ubs_user;end;procedure user_lock(dmlset in out user_table_type) isuserID_holder number;beginselect userID into userID_holder from ubs_user where userID=dmlset(1).userID for update;end;procedure user_insert(dmlset in out user_table_type) isbegininsert into ubs_user(userid,username,createdate,deptid,gender,job,remarks,birthday,jobexperience,education,relationship)values(dmlset(1).userid,dmlset(1).username,dmlset(1).createdate,dmlset(1).gender,dmlset(1).job,dmlset(1).remarks,dmlset(1).birthday,dmlset(1).jobexperience,dmlset(1).education,dmlset(1).education,dmlset(1).relationship);end;procedure user_update(dmlset in out user_table_type) isbeginupdate ubs_user set

如何在ORACLE中定义一个数组

集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE和TableofRecord来代替多维数组,一样挺好用的。emp_type就好象一个table中的一条record一样,里面有id,name,gender等。emp_type_array象个table,里面含有一条条这样的record(emp_type),就象多维数组一样。--单维数组DECLARETYPEemp_ssn_arrayISTABLEOFNUMBERINDEXBYBINARY_INTEGER;best_employeesemp_ssn_array;worst_employeesemp_ssn_array;BEGINbest_employees(1):="123456";best_employees(2):="888888";worst_employees(1):="222222";worst_employees(2):="666666";FORiIN1..best_employees.countLOOPDBMS_OUTPUT.PUT_LINE("i="||i||",best_employees="||best_employees(i)||",worst_employees="||worst_employees(i));ENDLOOP;END;--多维数组DECLARETYPEemp_typeISRECORD(emp_idemployee_table.emp_id%TYPE,emp_nameemployee_table.emp_name%TYPE,emp_genderemployee_table.emp_gender%TYPE);TYPEemp_type_arrayISTABLEOFemp_typeINDEXBYBINARY_INTEGER;emp_rec_arrayemp_type_array;emp_recemp_type;BEGINemp_rec.emp_id:=300000000;emp_rec.emp_name:="Barbara";emp_rec.emp_gender:="Female";emp_rec_array(1):=emp_rec;emp_rec.emp_id:=300000008;emp_rec.emp_name:="Rick";emp_rec.emp_gender:="Male";emp_rec_array(2):=emp_rec;FORiIN1..emp_rec_array.countLOOPDBMS_OUTPUT.PUT_LINE("i="||i||",emp_id="||emp_rec_array(i).emp_id||",emp_name="||emp_rec_array(i).emp_name||",emp_gender="||emp_rec_array(i).emp_gender);ENDLOOP;END;--------------Result--------------i=1,emp_id=300000000,emp_name=Barbara,emp_gender=Femalei=2,emp_id=300000008,emp_name=Rick,emp_gender=Male

在oracle中,record可以当过程或者函数的参数嘛?

可以。 DECLARE TYPE line_rec IS RECORD( line_id NUMBER); a line_rec; b NUMBER; FUNCTION f(test IN line_rec) RETURN NUMBER IS BEGIN RETURN test.line_id; END f;BEGIN a.line_id := 1; b := f(a); dbms_output.put_line(b);END;

oracle 包中RECORD的用法和意思

cursor是一个游标(有些地方叫指针吧),它里面应该放的是指向内存中存放数据的首地址吧record是把数据直接放进去的吧

oracle中type,r_record is record 是什么意思

楼上说的对,提供的资料太少。猜想,你是不是用了关键字来做别名呢 检查下吧

如何在查询oracle列表中使用PRIOR操作

connect by prior 是结构化查询中用到的,其基本语法是: select ... from tablename start with 条件1 connect by prior 条件2 where 条件3; 例: select * from table start with org_id = "AAA" connect by prior org_id = parent_id; 简单说...

oracle prior在左边和右边的区别

connect by prior 是结构化查询中用到的,其基本语法是:select ... from tablename start with 条件1connect by prior 条件2where 条件3;例:select * from tablestart with org_id = "AAA"connect by prior org_id = parent_id;简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。用上述语法的查询可以取得这棵树的所有记录。其中:条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id =parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。条件3 是过滤条件,用于对返回的所有记录进行过滤。简单介绍如下:早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:第一步:从根节点开始;第二步:访问该节点;第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;第四步:若该节点为根节点,则访问完毕,否则执行第五步;第五步:返回到该节点的父节点,并执行第三步骤。总之:扫描整个树结构的过程也即是中序遍历树的过程。1. 树结构的描述树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下:SELECT 。。。CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}[START WITH];其中:CONNECTBY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。STARTWITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。START WITH: 不但可以指定一个根节点,还可以指定多个根节点。2. 关于PRIOR运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。PRIOR被置于CONNECTBY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:CONNECT BY PRIOR EMPNO=MGRPIROR运算符被置于CONNECT BY子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:CONNECT BY EMPNO=PRIOR MGR在这种方式中也应指定一个开始的节点。3. 定义查找起始节点在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。4.使用LEVEL在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2,依此类推。图1.2就表示了树结构的层次。5.节点和分支的裁剪在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。6.排序显示象在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序。

oracle CONNECT_BY_ROOT的prior用法

connect by 是结构化查询中用到的,其基本语法是:select ... from tablename start by cond1connect by cond2where cond3;简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。用上述语法的查询可以取得这棵树的所有记录。其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。COND3是过滤条件,用于对返回的所有记录进行过滤。

oracle 查询语句中prior什么意思

connect by prior 是结构化查询中用到的,其基本语法是:select ... from tablename start with 条件1connect by prior 条件2where 条件3;例:select * from tablestart with org_id = "AAA" connect by prior org_id = parent_id;简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。用上述语法的查询可以取得这棵树的所有记录。其中:条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id =parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。条件3 是过滤条件,用于对返回的所有记录进行过滤。简单介绍如下:早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:第一步:从根节点开始;第二步:访问该节点;第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;第四步:若该节点为根节点,则访问完毕,否则执行第五步;第五步:返回到该节点的父节点,并执行第三步骤。总之:扫描整个树结构的过程也即是中序遍历树的过程。1. 树结构的描述树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下:SELECT 。。。CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}[START WITH];其中:CONNECTBY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。STARTWITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。START WITH: 不但可以指定一个根节点,还可以指定多个根节点。2. 关于PRIOR运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。PRIOR被置于CONNECTBY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:CONNECT BY PRIOR EMPNO=MGRPIROR运算符被置于CONNECT BY子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:CONNECT BY EMPNO=PRIOR MGR在这种方式中也应指定一个开始的节点。3. 定义查找起始节点在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。4.使用LEVEL在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2,依此类推。图1.2就表示了树结构的层次。5.节点和分支的裁剪在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。6.排序显示象在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序。

oracle 中的process怎么理解?

session是Oracle中的概念,process是操作系统中的概念若不使用连接池,那新建一个连接,产生一个操作系统的process(进程),在oracle中体现为一个session,若使用连接池,那可能N个连接只有一个进程,而oracle中体现为N个session

Oracle数据库认证有哪些

数据库认证有很多,著名的都是一些国外厂商的,例如Oracle、微软等。简述如下: Oracle认证分为三类:OCA证书、OCP证书、OCM证书。 OCA(Oracle Certified Associate),是入门级别的资格证书; OCP(Oracle Certified Professionals),是专业...

关于plsql连接oracle,防火墙端口限制的问题

数据库监听在1521端口,防火墙禁用这个端口后,监听就会报错没法工作,当然也就无法远程连接了。不知道想实现什么样的效果

为什么我的电脑东西都安装好了,但我找不到oracle的文件夹,在path的路径里也找不到oracle的路径?

F:appPeterproduct11.2.0dbhome_1in这个不就是吗?

Linux下Oracle安装配置宝典

Oracle的安装包括企业版服务器端和客户端两部分,用户可以根据实际情况选择不同的部分安装。__这里以企业版服务器端为主要介绍对象,客户端的安装方法相对要简单一些。__服务器端安装分为:典型安装、最小安装和定制安装三种。__客户端安装分为:管理员客户端、程序员客户端、应用用户客户端、定制安装客户端。■系统需求1.硬件需求● 内存最低配置为128MB,建议使用256MB;● 硬盘交换分区至少是400MB或者是内存的二倍以上也可以;● 硬盘大小需求:服务器 典型安装 750mb最小安装 675mb定制安装 1gb客户端 管理员 350mb程序员 260mb应用用户 150mb定制安装 470mb2. 软件需求● Linux系统内核要求是V2.2或以上版本;● Java Runtime Environment (JRE)要求是V1.1.6或以上版本;● 系统必须支持X window。■安装前的准备工作1. 系统内核的修改对/usr/src/linux/include/asm/hmparam.h文件作如下修改:被修改量 修改后数值shmmax 内存大小*0.5shmmin 1shmmni 100shmseg 10对/usr/src/linux/include/linux/sem.h文件作如下修改:被修改量 修改后数值semmni 100semmsl processes参数+10segmns 所有数据库processes参数总和+10semopm 100semvmx 32767参数修改完后,用“make dep”、“make clean”、“make bzImage”命令重新编译内核,并用新内核启动计算机。2. 系统用户和安装目录的建立在Oracle的技术文档中建议为数据库建立两个组——oinstall、dba,但在实际使用中笔者发现只要建一个dba组就可以顺利安装Oracle,而不影响系统的使用;需要为数据库增加一个用户oracle,它属于dba组;再建立/u01/app/oracle/8.1.6目录,并把它的所有者设为oracle.dba。3. 设置环境变量并不是每个环境变量的设置都是必需的,但设置它们可以使你的安装和使用变得更方便,这一点可以在后面的安装过程中看出来。编辑Oracle用户主目录下的。bash_profile来设置环境变量:ORACLE_HOME=/u01/app/oracle/product/8.1.6export ORACLE_HOME/_包括Oracle软件的目录_/LD_LIBRARY_PATH=/u01/app/oracle/product/8.1.6/lib;export LD_LIBRARY_PATHORACLE_BASE=/u01/app/oracleexport ORACLE_BASE/_包括Oracle软件的目录和管理软件的目录_/ORACLE_SID=ORCLexport ORACLE_SID/_缺省数据库的标识_/ORACLE_TERM=vt100export ORACLE_TERMORA_NLS33=/u01/app/oracle/product/8.1.6/ocommon/nls/admin/dataexport ORA_NLS33 /_语言支持_/PATH=$PATH: /u01/app/oracle/product/8.1.6/binexport PATH对于内存比较小的用户,可能会在X window中安装Oracle时出现内存不足的情况,这时就需要设置DISPLAY变量,它的作用是把本应在本地输出的X window安装界面输出到DISPLAY变量设定的主机上,方法如下:DISPLAY=192.168.0.20:0.0export DISPLAY在输出的终端上还要设置一个变量:xhost servername;表示允许服务器把X window的显示界面送给该终端,这样可以降低服务器端的工作负载,节省安装时的系统资源。4. 安装Java Runtime Environment (JRE)由于数据库的安装是基于X window的图形界面,用的是Java程序,所以它需要Java Runtime Environment (JRE)的支持。5. 建立安装源目录如果用户用的是光盘安装,就要先将光驱映射成目录——“mount /dev/cdrom”;如果用户用的是下载的tar.gz文件,就要先将这个文件解压缩到/tmp目录,然后将生成的安装目录授权给oracle.dba。■数据库安装1. 以Oracle用户登录系统,进入安装源目录,运行“。/runInstaller”,开始安装;2. 进入安装界面后点“Next”,出现设置目录的界面;如果用户的环境变量设置正确这个界面中的目录会自动完成设置,否则就要通过“浏览”按钮选择目录,设置完成后点击“Next”,进入下一步;3. 剩下的工作就很简单了,只要按照提示做就基本没问题,但有以下一些地方要注意:● 在Unix Group Name 字段中添入“dba”;● 选择“Oracle8i Enterprise Edition”;● 安装类型选择“Custom”;● 建议安装内容中不要选择Intermedia,有些技术资料介绍说这个软件运行不太稳定,我们又何必自找麻烦呢!● 在询问是否在安装时建立数据库时,选择“No”,因为我们要用Oracle提供的专门工具建立数据库;● 在安装过程中需要以Root身份执行两个文件——只要用su命令进行一下身份转换就行了。4. 关键在于做好准备只要准备工作没问题,其实安装数据库系统的过程还是很简单的。从技术角度讲建立数据库时设置的所有参数都可以在数据库建完后进行修改,所以用户根本没必要担心自己设置错了怎么办,只需认真看每一个步骤中的提示就行。这里笔者有一个小小的建议:如果用户是初学者,建立数据。

oracle中如何创建clustered索引

create clustered index index_name on table(column); --------------------- 补充--------------------------聚簇索引 是建立在聚簇列上的。你这有聚簇列吗?
 首页 上一页  10 11 12 13 14 15 16 17  下一页  尾页