转 : oracle 常用知识点
原文链接:http://blog.csdn.net/weijiaxiaobao/article/details/51323573
Oracle是一个庞大的系统,里面的知识点很多,在学习的时候,看到一些知识点,就贴了下来,尽不知中贴了这么多,就先做个小结吧。里面有的知识点已经单独拿出来写成单篇的blog(http://blog.csdn.net/tianlesoftware)了。有的还没有进行整理。好记性不如烂笔头,不过我用的不是笔。^_^...
这里面大部分内容都是我泡CSDN论坛的时候整理的,现在要忙其他的事,就很少去了。泡论坛的那段时间,是我进步最快的时间,所以如果想在Oracle上有所发展的朋友,建议也可以去论坛泡泡。看到自己会的知识点,就帮别人解答,不会的就自己研究学习,一段时间下来,会有很大的进步。而且还能认识很多朋友。实在是一举两得的事。
1.每天的8:00到23:00每隔5分钟执行一个sql语句的JOB
--建立一个存储过程
CREATEORREPLACEPROCEDUREp_jobtestIS
v_hhVARCHAR2(2);
BEGIN
v_hh:=to_char(SYSDATE,'hh24');
IFv_hh>='08'ANDv_hh<='22'THEN
--你的sql语句
NULL;
ENDIF;
END;
/
--提交一个JOB
DECLARE
v_jobnoNUMBER;
BEGIN
dbms_job.submit(v_jobno,
'p_jobtest;',
trunc(SYSDATE,'mi')+1/1440,
'trunc(SYSDATE,''mi'')+5/1440');
END;
/
2.RMAN中的list命令显示的信息是从控制文件里获取的,如果使用rm等命令手工的删除备份文件,这个动作不会同步到控制文件,造成不一致,这种不一致会导致使用rman时报错。可以使用delete删除这些过期的记录,在用就不会报错了。
RMAN>crosscheckcopy;
RMAN>listcopy;
RMAN>deleteexpiredcopy;
3.触发LGWR进程的条件有:
1.用户提交
2.有1/3重做日志缓冲区未被写入磁盘
3.有大于1M的重做日志缓冲区未被写入磁盘
4.3秒超时
5.DBWR需要写入的数据的SCN大于LGWR记录的SCN,DBWR触发LGWR写入。
4.触发DBWR进程的条件有:
1.DBWR超时,大约3秒
2.系统中没有多余的空缓冲区来存放数据
3.CKPT进程触发DBWR
5.每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
当发生checkpoint时,会把SCN写到四个地方去。
三个地方于controlfile内,一个在datafileheader。
6.触发CheckPoint(检查点)条件有很多,比如:
1.通过正常事务处理或者立即选项关闭例程时(shutdownimmediate或者Shutdownnormal),
2.当通过设置初始化参数:
LOG_CHECKPOINT_INTERVAL,
LOG_CHECKPOINT_TIMEOUT,
FAST_START_IO_TARGET强制时;
ALtersystemcheckpoint;
altertablespace...offline;
4.每次日志切换时;
altersystemswitchlogfile
注意:
1.altersystemswitchlogfile也将触发完全检查点的发生。
2.alterdatabasedatafile...offline不会触发检查点进程。
7.RECOVERDATABASEUNTILCANCEL和RECOVERDATABASEUNTILCANCELUSINGBACKUPCONTROLFILE;区别
1)RECOVERDATABASEUNTILCANCEL==>OPENDATABASERESETLOG
==>DATAFILEHEADERSCN一定会小于CONTROLFILE的DATAFILESCN
如果你有进行RESTOREDATAFILE,则该RESTORE的DATAFILEHEADERSCN一定会小于目前CONTROLFILE的DATAFILESCN,此时会无法开启数据库,必须进行mediarecovery。重做archivelog直到该datafileheader的SCN=currentscn
8.建表前判断表是否存在的存储过程。
在Oracle中没有droptable...ifexists语法。所以我们可以在创建表之前用如下存储过程来判断。
createorreplaceprocedureproc_dropifexists(
p_tableinvarchar2
)is
v_countnumber(10);
begin
selectcount(*)
intov_count
fromuser_objects
whereobject_name=upper(p_table);
ifv_count>0then
executeimmediate'droptable'||p_table||'purge';
endif;
end;
9.表属性中pctused,和pctfree作用
表示数据块什么时候移入和移出freelist。
pctused:如果数据块的使用率小于pctused的值,则该数据块重新加入到fresslist中。
pctfree:如果数据块的使用率高于pctfree的值,则该数据块从freelist中移出。
10.oracle表空间大小没有限制,根存储空间而定。
oracle9i或以下,单个数据文件最大32G(对于8K的数据块),整个数据库最多有64K个数据文件.单个表空间的数据文件数量没有具体的限制,也应该是在64K以下.oracle10g以上,引入了bigfiletablespace,bigfiletablespace只有一个数据文件,最大为4G*8k=32Tdatabasefilesize:Operatingsystemdependent.Limitedbymaximumoperatingsystemfilesize;typically222(2的22次方)or4Mblocks
11.Oracle利用现有的表创建一张新表,只要表结构相同@H_403_165@ createtabledavidasselect*fromall_userswhere1<>1;@H_403_165@ @H_403_165@ 12.循环插入数据@H_403_165@ declareiinteger;@H_403_165@ begin@H_403_165@ foriin1..100000loop@H_403_165@ insertintotestvalues(i);@H_403_165@ endloop;@H_403_165@ commit;@H_403_165@ end;@H_403_165@ @H_403_165@ 13.开发人员通常习惯赋予所有用户DBA权限,查看权限@H_403_165@ Select*FromUser_Role_Privs@H_403_165@ Select*FromUser_Sys_Privs@H_403_165@ @H_403_165@ 14.看数据文件大小,单位是M@H_403_165@ selectround(bytes/(1024*1024),0)total_spacefromdba_data_files@H_403_165@ selectsum(bytes/(1024*1024))total_spacefromdba_data_files@H_403_165@ @H_403_165@ 15控制文件大小@H_403_165@ selectsum(block_size*file_size_blks)/1024/1024fromv$controlfile@H_403_165@ @H_403_165@ 16.建立表空间@H_403_165@ CREATETABLESPACEdata01@H_403_165@ DATAFILE'/oracle/oradata/db/DATA01.dbf'SIZE500M@H_403_165@ UNIFORMSIZE128k;#指定区尺寸为128k,如不指定,区尺寸默认为64k删除表空间@H_403_165@ DROPTABLESPACEdata01INCLUDINGCONTENTSANDDATAFILES;@H_403_165@ 修改表空间大小@H_403_165@ alterdatabasedatafile'/path/NADDate05.dbf'resize100M
查看表空间:
selecttablespace_name,file_name,sum(bytes)/1024/1024table_sizefromdba_data_filesgroupbytablespace_name,file_name;@H_403_165@ @H_403_165@ 17.有没有被lock,可以通过这2张dynamicview来确定:@H_403_165@ v$locked_object,V$session@H_403_165@ @H_403_165@ 可以把该session杀掉。@H_403_165@ selectsid,serial#fromv$sessionwhereusername='XXXX'@H_403_165@ 把得到的sid,serial#号替换到下面的语句中:@H_403_165@ altersystemkillsession'SID,SERIAL#'@H_403_165@ @H_403_165@ 18.PL/sqloracle查询前10条信息@H_403_165@ SELECT*FROMtableWHEREROWNUM<11@H_403_165@ select*from(select*fromtableorderbydesc)whererownum<=5@H_403_165@ ==selecttop5*fromtable;@H_403_165@ @H_403_165@ 19.查看表上是否存在的索引@H_403_165@ select*fromuser_indexeswheretable_name='yourtablename'@H_403_165@ createindexIX_Tablename_columnontablename(column)@H_403_165@ @H_403_165@ 20.selectid,id2,round((id/id2)*100,2)||'%'percentfromtest;@H_403_165@ @H_403_165@ 21.查询表的行数@H_403_165@ selectcount(*)fromtable_name;全表扫描,会自已找表有索引列并且该列为非空的(因为只有非空才能确保记录数是全的),走INDEX_FFS.@H_403_165@ selectcount(1)fromtable_name;不走索引,效率要高,但在表中有非空索引时也是走INDEX_FFS的@H_403_165@ @H_403_165@ 22.用function来查看当前session的trace文件的文件名@H_403_165@ 如下@H_403_165@ createorreplacefunctiongettracenamereturnvarchar2is@H_403_165@ v_resultvarchar2(200);@H_403_165@ begin@H_403_165@ SELECTd.VALUE@H_403_165@ ||'/'@H_403_165@ ||LOWER(RTRIM(i.INSTANCE,CHR(0)))@H_403_165@ ||'_ora_'@H_403_165@ ||p.spid@H_403_165@ ||'.trc'intov_result@H_403_165@ FROM(SELECTp.spid@H_403_165@ FROMv$mystatm,v$sessions,v$processp@H_403_165@ WHEREm.statistic#=1ANDs.SID=m.SIDANDp.addr=s.paddr)p,@H_403_165@ (SELECTt.INSTANCE@H_403_165@ FROMv$threadt,v$parameterv@H_403_165@ WHEREv.NAME='thread'@H_403_165@ AND(v.VALUE=0ORt.thread#=TO_NUMBER(v.VALUE)))i,@H_403_165@ (SELECTVALUE@H_403_165@ FROMv$parameter@H_403_165@ WHERENAME='user_dump_dest')d;@H_403_165@ @H_403_165@ returnv_result;@H_403_165@ endgettracename;@H_403_165@ @H_403_165@ 运行sql>selectgettracename()fromdual;即可@H_403_165@ GETTRACENAME()@H_403_165@ -----------------------------------------------------------------------@H_403_165@ @H_403_165@ F:/DEVELOPER/ORACLE/PRODUCT/10.2.0/ADMIN/ORCL/UDUMP/orcl_ora_3800.trc@H_403_165@ @H_403_165@ @H_403_165@ 23.selectcasewhen(a>b)thenaelsebendfromTableA;@H_403_165@ selectgreatest(a,b)fromtb@H_403_165@ @H_403_165@ 24.TRUNCATETABLETable_name@H_403_165@ 使用truncate时,速度比delete,但是系统不做Log。清空表的数据,仅保留类别结构,被删除的数据不能ROLLBACK,这点是与DELETE的主要差别.不能Rollback也就是会删除log文件.在sqlServer里面如果你用Truncate,自动增长的行又会从1开始@H_403_165@ @H_403_165@ 25.selectsubstrb('大小abc',1,6)fromdual;
@H_403_165@ 26.表中的数据如下图所示@H_403_165@ abc@H_403_165@ 1PP41982SO90029@H_403_165@ 2PP41982SO90029@H_403_165@ 只取出字段b,c不重复的字段,@H_403_165@ @H_403_165@ selectb,cfromtgroupbyb,chaving(count(b)<2)@H_403_165@ @H_403_165@ 27.查询锁的情况@H_403_165@ 1).insertintotestvalues(1);@H_403_165@ 2).selectuserenv('sid')fromdual;@H_403_165@ 3).select*fromv$lockwheresid=''@H_403_165@ sid在v$session中有这个列,可以结合v$session查询更多的信息@H_403_165@ @H_403_165@ 28.删除重复行:@H_403_165@ sql>DELETEFROMaWHEREROWIDIN(SELECTMAX(ROWID)FROMa);@H_403_165@ 已删除1行。@H_403_165@ sql>select*froma;@H_403_165@ NAMEIDORDER_TITLE@H_403_165@ --------------------------------------------------@H_403_165@ 中国科学技术大学1科学@H_403_165@ 中国科学技术大学1科学@H_403_165@ sql>@H_403_165@ @H_403_165@ 29.查看索引信息@H_403_165@ @H_403_165@ --查看索引名称@H_403_165@ SELECT*FROMUSER_INDEXES;@H_403_165@ --查看索引列名@H_403_165@ SELECT*FROMDBA_IND_COLUMNS;@H_403_165@ SELECT*FROMUSER_IND_COLUMNS;@H_403_165@ SELECT*FROMALL_IND_COLUMNS;@H_403_165@ @H_403_165@ 30.oracletrunc()函数用法
@H_403_165@ 1.TRUNC(fordates)@H_403_165@ TRUNC函数为指定元素而截去的日期值。@H_403_165@ 其具体的语法格式如下:@H_403_165@ TRUNC(date[,fmt])@H_403_165@ 其中:@H_403_165@ date一个日期值@H_403_165@ fmt日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去@H_403_165@ 下面是该函数的使用情况:@H_403_165@ TRUNC(TO_DATE(’24-Nov-199908:00pm’,’dd-mon-yyyyhh:miam’))@H_403_165@ =’24-Nov-199912:00:00am’@H_403_165@ TRUNC(TO_DATE(’24-Nov-199908:37pm’,’dd-mon-yyyyhh:miam’,’hh’))=’24-Nov-199908:00:00am’@H_403_165@ @H_403_165@ 2.TRUNC(fornumber)@H_403_165@ TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。@H_403_165@ 其具体的语法格式如下@H_403_165@ TRUNC(number[,decimals])@H_403_165@ 其中:@H_403_165@ number待做截取处理的数值@H_403_165@ decimals指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分@H_403_165@ 下面是该函数的使用情况:@H_403_165@ TRUNC(89.985,2)=89.98@H_403_165@ TRUNC(89.985)=89@H_403_165@ TRUNC(89.985,-1)=80@H_403_165@ 注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。@H_403_165@ @H_403_165@ 31.local是局部有序,整体无序,global是有序的,所以local可能会比global慢,得看你的sql语句怎么写的,需求是什么样的@H_403_165@ global索引->自己想怎么玩就怎么玩@H_403_165@ local索引->表怎么玩它就怎么玩@H_403_165@ @H_403_165@ 32,查看磁盘物理读写情况:@H_403_165@ SELECTNAME,phyrds,phywrts,readtim,writetimFROMv$filestata,v$datafilebWHEREa.FILE#=b.FILE#@H_403_165@ ORDERBYreadtimDESC;
33.从表中筛选出所有能被5整除的value值数据@H_403_165@ @H_403_165@ select*fromtablewheremod(datavalue,5)=0;
34.Union与UnionAll的区别@H_403_165@ 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者unionall关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。@H_403_165@ union和unionall的区别是,union会自动压缩多个结果集合中的重复结果,而unionall则将所有的结果全部显示出来,不管是不是重复。@H_403_165@ Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;@H_403_165@ UnionAll:对两个结果集进行并集操作,包括重复行,不进行排序;
selectempno,enamefromemp@H_403_165@ union@H_403_165@ selectdeptno,dnamefromdept@H_403_165@ @H_403_165@ 我们没有必要在每一个select结果集中使用orderby子句来进行排序,我们可以在最后使用一条orderby来对整个结果进行排序。例如:@H_403_165@ selectempno,dnamefromdept@H_403_165@ orderbyename;
35.查看看到A用户下的所有数据量>100万的表的信息@H_403_165@ select*fromuser_all_tablesa@H_403_165@ wherea.num_rows>1000000@H_403_165@ @H_403_165@ 前提是a用户下所有表的统计信息都是最新的。@H_403_165@ 保险的办法是所有表都count一遍:@H_403_165@ select'select'||''''||table_name||''','||'count(*)from'||table_namefromuser_all_tables;@H_403_165@ 把上面这段sql的执行结果拷贝出来执行即可
36.sqlPLUS里执行EXPLAINPLAN@H_403_165@ @H_403_165@ sql>EXPLAINPLANFOR你的sql语句;@H_403_165@ 如@H_403_165@ sql>EXPLAINPLANFORSELECT*FROMEMPWHEREEMPNO=7369;@H_403_165@ 然后@H_403_165@ SELECTplan_table_output@H_403_165@ FROMTABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));@H_403_165@ 查看结果就是前面sql语句的执行计划。
37.nvarchar2(2000)不区别汉字和字母@H_403_165@ varchar2(4000)只能存储2000个汉字@H_403_165@ @H_403_165@ nvarchar2最大2000@H_403_165@ varchar2最大4000
38.更新表被锁,KILLspid后,select*fromtabnameforupdate独占资源。@H_403_165@ v$locked_objectdba_objects联合可以知道锁表的session
39.PGA中sort_area_size大小不够时,用到临时表空间。
40.oracle没有标识列,自动增长的这个概念@H_403_165@ @H_403_165@ 需要用序列来实现@H_403_165@ CREATESEQUENCEsid@H_403_165@ INCREMENTBY1@H_403_165@ STARTWITH1@H_403_165@ MAXVALUE99999999@H_403_165@ @H_403_165@ selectsid.nextval,--取下一个序列@H_403_165@ sid.currval--取当前序列@H_403_165@ fromdual;
41.IMP/EXP的buffer达到1M以后,性能的提升并不大,5M或者10M的足够用
42.如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null.@H_403_165@ 如:@H_403_165@ IDDD@H_403_165@ 1e@H_403_165@ 2null@H_403_165@ selectcount(*)fromtable--结果是2@H_403_165@ selectcount(DD)fromtable---结果是1
count(1)和count(主键)这两个只扫描主键Index就可以得到数据,@H_403_165@ count(*)是扫描表的。@H_403_165@ 所以count(1)和count(主键)这两个效率高。@H_403_165@ 还有一种写法是count(ROWID)这也是只扫描Index的,效率高。
43.Linux挂在windows共享的盘@H_403_165@ @H_403_165@ 1.启动nfs服务:servicenfsstart@H_403_165@ 2.mount-ousername=user,password=123456//10.85.2.194/share/mnt
44.Killsession并使状态直接变成killed
EXECUTEIMMEDIATE''ALTERSYSTEMKILLSESSION'''':sid,:serial#''''IMMEDIATE''@H_403_165@ EXECUTEIMMEDIATE''ALTERSYSTEMKILLSESSION'''':sid,:serial#''''@H_403_165@ @H_403_165@ immediate是立即kill,不会有status会变成killed状态的,清楚了在v$session里的信息
45.truncate只是删除了表中的记录,并不会改变表的结构及依赖约束,所以truncate表后表的索引依然存在,但是表和索引所占用的空间会恢复到初始大小
46.这是看高速缓存命中率小于80%的sql@H_403_165@ SELECTEXECUTIONS,DISK_READS,BUFFER_GETS,@H_403_165@ round((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2)Hit_radio,@H_403_165@ ROUND(DISK_READS/EXECUTIONS,2)Reads_per_run,@H_403_165@ sql_TEXT@H_403_165@ FROMV$sqlAREA@H_403_165@ WHEREEXECUTIONS>0@H_403_165@ ANDBUFFER_GETS>0@H_403_165@ AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS<0.8@H_403_165@ ORDERBY2desc,4DESC;
47.数据库在主备库切换之后要手动的用sql来检查检查有没有死锁,如果有,kill就可以了..
sql>select'altersystemkillsession'''||sid||','||serial#||''';'fromv$sessionwheresidin(selectsidfromv$lockwhereblock=1);@H_403_165@ 'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||''';'@H_403_165@ @H_403_165@
48.EOF是标记控制字符开始,到结束,随便什么字符都可以用的
sqlplus'/assysdba'<<eof@H_403_165@ {@H_403_165@ shutdownimmediate;@H_403_165@ startupforcedbapfile=$ORACLE_HOME/dbs/init.ora;@H_403_165@ shutdownimmediate;@H_403_165@ }@H_403_165@ exit;@H_403_165@ eof@H_403_165@ @H_403_165@ 49.parallel(table,4)并行度为4@H_403_165@ parallel(table)如果使用parallel但未指定并行度,则DOP要通过初始化参数cpu_count和Parallel_THREADS_PER_cpu计算得到,@H_403_165@ @H_403_165@ 并行度为4的程序,最多可以分配或创建9个并行执行服务器来满足这个事务操作,所以并行操作速度有很大提高,但对cpu占用比较多@H_403_165@ @H_403_165@ 并行操作增加了事务操作的性能,但会连续的记录重做日志,并且造成瓶颈,所以可以使用nologging模式来避免瓶颈@H_403_165@ sql>altertabletable_nameNOLOGGING;
50.约束名从表user_constraints表中找@H_403_165@ SELECT*FROMUSER_CONSTRAINTSWHERETABLE_NAME='FJ5W_FZ_JMD_S'
51.Oracle确实没有convert函数,只有to_char()和to_date()...@H_403_165@ sql:CONVERT(VARCHAR(10),GETDATE(),111)@H_403_165@ oracle:to_char(sysdate,'yyyy/mm/dd')
52.V$视图是由catalog.sql脚本创建的.所以升级系统后要执行这个脚本..
53.用Oracle的orapwd命令@H_403_165@ orapwdfile=D:/PWDorcl.orapassword=adminentries=5;@H_403_165@ windows下oracle默认的位置是db_1/database目录,默认的文件名是pwdSID.ora,对于别的文件名是不认的。linux下oracle默认的位置是$ORACLE_HOME/dbs目录,默认的文件名是orapwSID,对于别的文件名是不认的。@H_403_165@ 其中参数entries的含义是表示口令文件中可以存放的最大用户数,对应于允许以SYSDBA/SYSOPER权限登录数据库的最大用户数,如果用户数超过这个值只能重建口令文件,增大entries。
54.oracle表空间大小没有限制,根存储空间而定。@H_403_165@ oracle9i或以下,也应该是在64K以下.@H_403_165@ oracle10g以上,最大为4G*8k=32T@H_403_165@ databasefilesize:@H_403_165@ Operatingsystemdependent.Limitedbymaximumoperatingsystemfilesize;typically222(2的22次方)or4Mblocks
55.ROWNUM是查询时的一个记录号,是一个伪列@H_403_165@ @H_403_165@ rownum只和最终输出结果orderby之前的顺序一致@H_403_165@ @H_403_165@ selectrownum,t.*fromuser_tablest;@H_403_165@ selectrownum,t.*from(select*fromuser_tablesorderbytable_name)t;@H_403_165@ select*from(selectrownum,t.*fromuser_tablestorderbytable_name);@H_403_165@ @H_403_165@
56.你的数据库是dedicated还是shared模式Oracle数据库服务器,根据客户端请求后process的调度方式,分为dedicated(专用)模式和shared(共享)模式。@H_403_165@ 专用模式意味着每个客户端的连接后,Oracle都会分配一个新的process和自进行交互。而共享模式是,通过一个调度程序,来分配process,有可能是以前客户端已经处理过的空闲的process,由于process的模式不是专用的,所以相对来说,节省资源。@H_403_165@ 那么我们如何来查看我们的oracle是哪种模式呢?@H_403_165@ Window系统下,通过任务管理列表里,查看Oracle.exe进程所占用的线程数,如果没有这个指标,可以通过view->selectcolumns->checkedThreadcount.即可。@H_403_165@ 用sqlplus连接成功以后,threadcount如果会增加,即为专用模式,来一个增加一个,走一个减一个。反之,共享模式。@H_403_165@ Linux下,通过psoracle查看oracle的进程个数。和window的判断方法一样,不过命令不同而已。@H_403_165@ 我们也可以查看数据库的parameter,如果shared_servers的数目大于0的话,即是。
57.orderbyt.tm_errordesc,必须是groupby里的字符,或者是统计字段。
58.大量更新表时:@H_403_165@ 1.关掉tableb的所有触发器,这个一定要关掉,movingdata的时候一定要全部关掉,不然批量操作的时候卡死你Y的。@H_403_165@ altersystemtablebdisablealltriggers;@H_403_165@ 执行完毕之后,启动触发器@H_403_165@ altersystemtablebenablealltriggers;@H_403_165@ 2,除了主键索引之外,tableb表剩余的索引全部删除掉。等执行完毕之后,重建索引(索引重建很快,我的800万数据的表的6个索引重建才花了2分钟而已)
59.访问V$FIXED_VIEW_DEFINITION视图可以获取组成V$视图的底层X$表的所有信息@H_403_165@ @H_403_165@ selectcount(*)fromv$fixed_tablewherenamelike'V%';@H_403_165@ selectview_namefromV$fixed_view_definition;@H_403_165@ selectcount(*)fromv$fixed_view_definition;@H_403_165@ selectview_definitionfromV$FIXED_VIEW_DEFINITIONWHEREview_name='V$PX_SESSION';
60.dba_views是从Oracle底层数据库的表中得到的,不是从X$表或者v$视图。@H_403_165@ @H_403_165@ sql>SETLONG2000000@H_403_165@ sql>selecttextfromdba_viewswhereviewname='DBA_IND_PARTITIONS';
61.Oracle10.2.0.1中有613张X$表,9i有394张。X$表包含了特定实例的各方面的信息,如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。X$表并不是驻留在数据库文件的永久表或临时表。X$表仅仅驻留在内存中,当实例启动时,他们就创建了,在内存中进行实时的维护。它们中的大多数至少需要装载或已经打开的数据库。X$表为SYS用户所拥有,并且是只读的。不能进行DML(更新,插入,删除)。
62.ParsecputoParseElapsd%:127.27%Non-Parsecpu:97.12@H_403_165@ parsecpu=amountofcputimeusedtoparse@H_403_165@ elapsedtimeparsing=amountoftimeonthewallclockspentparsing.@H_403_165@ 100*(parsetimecpu/parsetimeelapsed)=ParsecputoParseElapsd%@H_403_165@ inaperfectworld,withnocontention--parsecpu=parseelapsed.@H_403_165@ ratio=100%@H_403_165@ inabadworld,ittakeslongertoparse(elapsed)thencputimeused@H_403_165@ (contention).ratio<100%@H_403_165@ inyourcase,whatthisissayingisthecpuexceededtheelapsed,which@H_403_165@ technicallyisnotpossible--buthappensduetotheway"smallfastthings"@H_403_165@ aremeasuredoncomputers.Itishardtomeasurethingsthathappenvery@H_403_165@ rapidlyaccurately.So,thisratio,when>100%,isthesameas"100%"forall@H_403_165@ intentsandpurposes
63.sqlnet.ora文件里的内容注释掉,在重启下lsnrctl,应该就可以:@H_403_165@ #sqlNET.AUTHENTICATION_SERVICES=(NTS)@H_403_165@ EasyConnect指的是使用connscott/tiger@hostname(orip):port/globaldatabasename的方式连接数据库,这种方法不需要tnsnames.ora文件的任何内容.@H_403_165@ 在sqlnet.ora中需要声明你使用的命名方法。需要注意的是defaultdomain,如果你声明了,那么在tnsnames.ora中必须在netservicename后面把域名附加上。这样才能保证你在connscott/tiger@netsvname时候能够成功
64.sqlnet.ora文件决定找数据库服务器别名的方式@H_403_165@ 默认的参数有@H_403_165@ NAMES.DEFAULT_DOMAIN=WORLD@H_403_165@ NAMES.DIRECTORY_PATH=(TNSNAMES,ONAMES,HOSTNAME)@H_403_165@ @H_403_165@ 如果你的ORACLE客户端和服务器默认的域名不一样,需要用#号注释第一行@H_403_165@ #NAMES.DEFAULT_DOMAIN=WORLD@H_403_165@ 使它不起作用。@H_403_165@ NAMES.DIRECTORY_PATH指定找服务器别名的顺序(本地的tnsnames.ora文件,命名服务器,主机名方式)
65.在日文操作系统下用plsql开发@H_403_165@ 要求只能输入半角,用Length(a),LengthB(a)可以判断出是否是半角。@H_403_165@ 但是还有个要求是不能输入日本语,也就是要怎么判断是'半角片假名'呢?@H_403_165@ @H_403_165@ 用TO_SINGLE_BYTE()函数转成半角在插入
66.sql>!lsnrctlsetlog_statusoff;@H_403_165@ !在sql里面表示执行非sql的语句@H_403_165@ 如:@H_403_165@ sql>!fdisk-l@H_403_165@ window下是$,linux下是!
67.跨schema的交叉型trigger在exp/imp时会丢失,因为所依赖的基表在exp/imp时断开了。除非你把这些shema全都导出。
68.Number的数据声明如下:@H_403_165@ 表示作用说明@H_403_165@ Number(p,s)声明一个定点数p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,scale的取值范围为-84到127@H_403_165@ Number(p)声明一个整数相当于Number(p,0)@H_403_165@ Number声明一个浮点数其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。@H_403_165@ @H_403_165@ 定点数的精度(p)和刻度(s)遵循以下规则:@H_403_165@ ?当一个数的整数部分的长度>p-s时,Oracle就会报错@H_403_165@ ?当一个数的小数部分的长度>s时,Oracle就会舍入。@H_403_165@ ?当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。@H_403_165@ ?当s>p时,p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入
69.oracleupdate多表关联@H_403_165@ UPDATEa@H_403_165@ SET(ID,NAME)=(SELECTb.ID,b.NAME@H_403_165@ FROMb@H_403_165@ WHEREa.ID=b.ID)@H_403_165@ WHEREEXISTS(SELECT1@H_403_165@ FROMb@H_403_165@ WHEREa.ID=b.ID)
70.查看SCN:@H_403_165@ SELECTdbms_flashback.get_system_change_numberFROMdual;@H_403_165@ SELECTCURRENT_SCNFROMV$DATABASE;
71.注意理解系统时间标记与scn的每5分钟匹配一次这句话,举个例子,比如scn:339988,339989分别匹配08-05-3013:52:00和2008-13:57:00,则当你通过asoftimestamp查询08-05-3013:52:00或08-05-3013:56:59这段时间点内的时间时,oracle都会将其匹配为scn:339988到undo表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是08-05-3013:52:00这个时刻的数据。@H_403_165@ @H_403_165@ 查看SCN和timestamp之间的对应关系:@H_403_165@ selectscn,to_char(time_dp,'yyyy-mm-ddhh24:mi:ss')fromsys.smon_scn_time;
72.当查询的记录的结果集大于总记录的20%时,一定要使用全表扫描
73.当AWR显示,占用资源较多的sql是类似时,这是对这些sql就应该使用绑定变量来减少硬解析.
74.selectname,value,ISSYS_MODIFIABLEfromv$parameter@H_403_165@ 如果ISSYS_MODIFIABLE返回的是false,说明该参数无法用altersystem语句动态修改,需要重启数据库
75.oracle子查询中能使用orderby@H_403_165@ from子句后面的内联视图是可以使用orderby子句进行排序的。@H_403_165@ 然而,其它视图或子查询是不能用orderby进行排序的@H_403_165@ 如果你要用选择前几条的话,需要在套一层变成from后面的内联视图。@H_403_165@ 比如@H_403_165@ select*fromdepta@H_403_165@ 2wherea.deptnoin@H_403_165@ 3(@H_403_165@ selectdeptonfrom(@H_403_165@ 4selectb.deptnofromdeptb@H_403_165@ 5orderbyb.dname@H_403_165@ 6)[whererownum<5])
76.修改temp表空间自动增长:@H_403_165@ alterdatabasetempfile'D:/ORACLE/ORADATA/DBA/TEMP01.DBF'autoextendonnext20m;@H_403_165@ 修改表空间自动增长:@H_403_165@ alterdatabasedatefile'D:/ORACLE/ORADATA/DBA/user01.DBF'autoextendonnext20m;
77.alterindexrebuild与alterindexrebuildonline的区别@H_403_165@ online时可以在该索引的基表上执行DML,在在对基表操作的同时可以REBUILDINDEX,但是不能执行DDL语句,所以他们的锁机制是不样的。@H_403_165@ 创建索引时通常会对该表设置一个表级共享(DML)锁,如果设置ONLINE,@H_403_165@ 如果是非ONLINE方式,通常会对该表设置一个表级共享(DML)锁,那么就对DML语句冲突,如果设置ONLINE,(会使用临时日志IOT表来记录中间改变的数据),但要使用两倍于传统方法的空间.表会变成行级共享锁,在创建索引或者ALTER完成后,对临时日志表与基表进行MERGE@H_403_165@ @H_403_165@ 注意并行处理,DDL,位图索引不能使用ONLINE。
78.colb,字符串大对象,存的是长字符串数据@H_403_165@ blob,二进制大对象,存的是二进制型,比如图像、音频数据
79.sqlPLUS默认不是自动提交的.@H_403_165@ 自动提交命令:@H_403_165@ sql>setautocommiton
退出sqlPLUS时会自动提交@H_403_165@ 指定DDL,如CREATE,ALTER,DROP,会自动提交@H_403_165@ 执行DCL,如GRANT,REVOKE,会自动提交
80.临时表空间不能脱机。system,和正在使用(有活动session或transaction)的也不能。
81.查询正在执行的sql@H_403_165@ selectOSUSER,PROGRAM,USERNAME,SCHEMANAME,B.cpu_Time,STATUS,B.sql_TEXT@H_403_165@ fromV$SESSIONA@H_403_165@ LEFTJOINV$sqlBONA.sql_ADDRESS=B.ADDRESS@H_403_165@ ANDA.sql_HASH_VALUE=B.HASH_VALUE@H_403_165@ whereb.sql_TEXTisnotnull@H_403_165@ orderbyb.cpu_timedesc
82.Oracle在to_char()函数在计算一年中第几周是从该年的1月1日开始的。
83.正在连接的用户不能删除,确实要删除的话,如下@H_403_165@ 1、selectsid,serial#,usernamefromv$sessionwhereuser='USERNAME';@H_403_165@ 2、altersystemkillsession'sid,serial#';@H_403_165@ 3、dropuserusernamecascade;
84.在排除索引限制的条件下,如果索引还是没有被引用,可以检查下参数。@H_403_165@ optimizer_index_cost_adj为100,该参数影响优化器选择索引还是全表扫描的倾向,将其修改为35.
85.在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事。@H_403_165@ 常用的方法是:Selectto_number(to_char(sysdate,''yyyy''))fromdual,@H_403_165@ 而实际上,oracle本身有更好的方法,那就是使用Extract函数,@H_403_165@ 使用方法是:SelectExtract(yearfromsysdate)fromdual,这种方法省掉了类型转换,看上去更加简洁。@H_403_165@ 相应的,要取得月份或日,可以用selectextract(monthfromsysdate)fromdual和selectextract(dayfromsysdate)fromdual。@H_403_165@ 此方法获得的结果,是数值型的,大家可以设置一个方法测试一下。@H_403_165@ selectEXTRACT(yearFROMto_date('2009-11-10','yyyy-mm-dd'))yearfromdual;
86.查询数据库默认的表空间类型:@H_403_165@ sql>selectproperty_name,property_valuefromdatabase_propertieswhereproperty_name='DEFAULT_TBS_TYPE';@H_403_165@ PROPERTY_NAMEPROPERTY_VALUE@H_403_165@ ------------------------------------@H_403_165@ DEFAULT_TBS_TYPEBIGFILE@H_403_165@ @H_403_165@ 87.在10g中,有一个特性,就是bigfiletablespace,这种类型的表空间只能有一个数据文件,且该数据文件允许有4G的数据快,即如果db_block_size=8k的话,最大容量为4G*8K=32T,当然,这个还要看操作系统的限制了。@H_403_165@ @H_403_165@ 修改数据库默认的表空间类型为smallfile,就可以为表空间创建多个数据文件了。@H_403_165@ sql>alterdatabasesetdefaultsmallfiletablespace;@H_403_165@ Databasealtered.@H_403_165@ @H_403_165@ 也可以在创建表空间时,指定表空间类型:createsmallfile/bigfiletablespace....
88.exp失败执行的脚本:
Catexp.sql:这个脚本是用于生成exp命令执行时所需要的一些表和视图,在执行exp命令出现找不到什么什么表,什么什么视图时使用。@H_403_165@ CatMeta.sql:这个脚本是在升级后执行exp命令出现错误时运行,说是因为升级不成功,运行这个脚本可以重新创建系统表。
89.日期一般就用to_date(str,format)格式转换,像'yyyy-mm-dd'这样的可以直接用date'xxxx'简化
selectdate'2009-11-11'asdfromdual;@H_403_165@ select*fromtwheret.day=date'2009-11-11';@H_403_165@ @H_403_165@ 90.sqlplus命令save可以把sql语句保存到文件中,可是默认的存放路径是$ORACLE_HOME/bin,即sqlplus可执行文件存放的位置,当然有的人说在文件名前加绝对路径即可:saved:/oracle/admin/oradb/emp.sql@H_403_165@ 可是这种写法未免太麻烦,特别是使用get命令,也得使用绝对路径,因此如果能够修改save的默认位置,那么save/get就好写的多了。
91.查询某一对象的类型,比如查询'v$datafile'是同义词还是视图?@H_403_165@ select*fromall_objectswhereobject_name=upper('v$datafile')
92.http://download.csdn.net/source/1841831@H_403_165@ 我上传了一个包,可以获得汉字的拼音或者首字母,oracle汉字转拼音
93.IndexENABLE和DISABLE适用于FUNCTION-BASEDINDEX@H_403_165@ 如果普通索引的话,你就用unusable而不是disable@H_403_165@ ENABLE和DISABLE只针对函数索引。@H_403_165@ @H_403_165@ ENABLEappliesonlytoafunction-basedindexthathasbeendisabledbecauseauser-definedfunctionusedbytheindexwasdroppedorreplaced.Thisclauseenablessuchanindexiftheseconditionsaretrue:@H_403_165@ @H_403_165@ *Thefunctioniscurrentlyvalid@H_403_165@ *Thesignatureofthecurrentfunctionmatchesthesignatureofthefunctionwhentheindexwascreated@H_403_165@ *ThefunctioniscurrentlymarkedasDETERMINISTIC@H_403_165@ RestrictiononEnablingFunction-basedIndexes@H_403_165@ YoucannotspecifyanyotherclausesofALTERINDEXinthesamestatementwithENABLE.@H_403_165@ @H_403_165@ DISABLEClause@H_403_165@ @H_403_165@ DISABLEappliesonlytoafunction-basedindex.ThisclauseletsyoudisabletheuSEOfafunction-basedindex.Youmightwanttodoso,forexample,whileworkingonthebodyofthefunction.AfterwardyoucaneitherrebuildtheindexorspecifyanotherALTERINDEXstatementwiththeENABLEkeyword.@H_403_165@ @H_403_165@ 楼主试试:@H_403_165@ alterindexxxunusable;@H_403_165@ @H_403_165@ UNUSABLEClauseSpecifyUNUSABLEtomarktheindexorindexpartition(s)orindexsubpartition(s)UNUSABLE.Anunusableindexmustberebuilt,ordroppedandre-created,beforeitcanbeused.WhileonepartitionismarkedUNUSABLE,theotherpartitionsoftheindexarestillvalid.Youcanexecutestatementsthatrequiretheindexifthestatementsdonotaccesstheunusablepartition.Youcanalsosplitorrenametheunusablepartitionbeforerebuildingit.
94.如何清除inactive的session@H_403_165@ 1.方法一@H_403_165@ (1)UNIX的方法@H_403_165@ A。sql>selectusename,sid,paddr,status@H_403_165@ fromv$session@H_403_165@ whereusename='USERNAME'@H_403_165@ ANDSTATUS='INACTIVE';@H_403_165@ B。sql>SELECTSPIDFROMV$PROCESSWHEREADDR=上一步查出的PADDR@H_403_165@ C。$KILLSPID@H_403_165@ @H_403_165@ (2)WINDOWSnt/2000的方法@H_403_165@ c:/>orakillSIDSPID@H_403_165@ @H_403_165@ 2,方法二@H_403_165@ selectA.SID,B.SPID,A.SERIAL#,a.lockwait,A.USERNAME,A.OSUSER,a.logon_time,a.last_call_et/3600LAST_HOUR,A.STATUS,@H_403_165@ 'orakill'||sid||''||spidHOST_COMMAND,@H_403_165@ 'altersystemkillsession'''||A.sid||','||A.SERIAL#||''''sql_COMMAND@H_403_165@ fromv$sessionA,V$PROCESSBwhereA.PADDR=B.ADDRANDSID>6
95.sqlnet.ora文件中配置sqlnet.expire_time参数,DeadConnectionDetection在服务器端使用。每当一个客户端的连接建立时,sql*NET读取此参数,以决定多长时间发送包给连接的客户端,侦测连接是否还有效,如果无效,则通知操作系统释放该会话持有的资源。防止因网络的异常中断导致会话长期持有资源不释放。设置为0应该是不启用DCD。@H_403_165@ 如sqlnet.expire_time=10,则表示10分钟@H_403_165@ sqlnet.expire_time的单位为分钟.
96.EXP/IMP可以使用参数文件。如mypar.par,内容就是你要指定的参数,如@H_403_165@ owner=scott@H_403_165@ file=mydump.dmp@H_403_165@ log=mydump.log@H_403_165@ direct=y@H_403_165@ @H_403_165@ 在用exp时用parfile参数指定这个文件就可以了@H_403_165@ expmyname/mypass@mydbparfile=mypar.par
97.分页一般用到两种办法:@H_403_165@ 1,利用rownum@H_403_165@ 2,分析函数row_number()over()@H_403_165@ 1.@H_403_165@ selectfrom(@H_403_165@ selectt.*,rownumrnfrom(@H_403_165@ select*froma@H_403_165@ orderbycol1)t@H_403_165@ wherernbetween101and200)@H_403_165@ 2.@H_403_165@ select*@H_403_165@ from(selectt.*,row_number()over(orderbycol1)rn@H_403_165@ fromt)@H_403_165@ wherernbetween101and200@H_403_165@ @H_403_165@ 98.row_number()和ROWNUM是看起来相似但概念完全不同的东西,@H_403_165@ row_number()是一个分析函数(AnalyticFunction),它返回的是基于over()参数的行号。@H_403_165@ rownum是oracle特别提供的一个伪列,它只作用于查询的结果集,根据结果集输出的先后次序给每个纪录顺次编号。@H_403_165@ row_number()要比rownum高很多.对一大表测试时,row_number()用时6s,rownum用时17s.
99.listener主要是侦听从客户端发来的对数据库的连接请求。@H_403_165@ 如果你在服务器端用sqlplus进行连接,监听没有启动也是可以连上的,但是从远程来访问数据库,或者用PL/sqldev或者TOAD等进行连接,就必须启动监听。
100.这个命令可以查看建表的sql语句..@H_403_165@ selectdbms_Metadata.get_ddl('TABLE','&tname')fromdual;@H_403_165@ @H_403_165@ 101.查询视图可以通过@H_403_165@ select*fromall_views@H_403_165@ 索引:all_indexes,索引和列的关系all_ind_columns。table_name即索引所在的表@H_403_165@ 如果只想查询当前用户下的,将上面数据字典的all改成user
102.char最大长度是2000.@H_403_165@ sql>createtabletest(v2char(2001));@H_403_165@ createtabletest(cchar(2001))@H_403_165@ ERRORatline1:@H_403_165@ ORA-00910:specifiedlengthtoolongforitsdatatype@H_403_165@ sql>createtabletest1(cchar(2000));@H_403_165@ Tablecreated.
103.Oralce快照是Oralce7时候的叫法吧,8i之后改名物化视图
104,一个小触发器@H_403_165@ createtablet_temp@H_403_165@ (@H_403_165@ idvarchar2(10)primarykey,@H_403_165@ len1number(6,0),@H_403_165@ len2number(6,@H_403_165@ lennumber(7,0)@H_403_165@ )@H_403_165@ 当update某一行的len1或len2值后,则修改该行len的值(len=len1+len2),@H_403_165@ 或者insert一条新的记录后,修改len=len1+len2@H_403_165@ 哪位帮我用触发器实现上面的功能@H_403_165@ createtriggertri@H_403_165@ beforinsertorupdateont_temp@H_403_165@ foreachrow@H_403_165@ begin@H_403_165@ :NEW.len:=:NEW.len1+:NEW.len2;@H_403_165@ end;@H_403_165@ @H_403_165@ createorreplacetriggertgtemp@H_403_165@ beforeinsertorupdateoflen1,len2@H_403_165@ ont_temp@H_403_165@ foreachrow@H_403_165@ begin@H_403_165@ :new.len:=:new.len1+:new.len2;@H_403_165@ end;
oracle不允许触发器修改它正在触发的表,故用before可以,after不行..
105.udump下的trc文件可以通过配置不让产生,利用命令@H_403_165@ altersystemsetsql_trace=false;@H_403_165@ 其他的不能修改,只能手动的启动trace,手动的关闭trace.@H_403_165@ @H_403_165@ 比如:@H_403_165@ altersessionsetevents'immediatetracenamelibrary_cache|controlf|systemstate|processstate|file_hdrs|REDOHDRlevel10';@H_403_165@ altersessionsetevents'immediatetracenameoff';@H_403_165@ @H_403_165@ altersessionsetevents'10046tracenamecontextforever,level12';@H_403_165@ altersessionsetevents'10046tracenamecontextoff';@H_403_165@ @H_403_165@ altersystemsetevents'10046tracenamecontextforever,level12';@H_403_165@ altersystemsetevents'10046tracenamecontextoff';
106.重复数据只显示一条:@H_403_165@ selectmin(id)id,b,cfromtbgroupbyb,c@H_403_165@ @H_403_165@ 107.删除重复数据:@H_403_165@ deletefromtbwhererowidnotin(selectmin(rowid)fromtbgroupbyb,c);
108.oracle批量重建索引@H_403_165@ createorreplaceprocedurep_rebuild_all_index@H_403_165@ (tablespace_nameinvarchar2)@H_403_165@ as@H_403_165@ sqltvarchar(200);@H_403_165@ begin@H_403_165@ foridxin(selectindex_name,tablespace_name,statusfromuser_indexeswheretablespace_name=tablespace_nameandstatus='VALID'andtemporary='N')loop@H_403_165@ begin@H_403_165@ sqlt:='alterindex'||idx.index_name||'rebuild';@H_403_165@ dbms_output.put_line(idx.index_name);@H_403_165@ dbms_output.put_line(sqlt);@H_403_165@ EXECUTEIMMEDIATEsqlt;@H_403_165@ --错误后循环继续执行。@H_403_165@ EXCEPTION@H_403_165@ WHENOTHERSTHEN@H_403_165@ dbms_output.put_line(sqlERRM);@H_403_165@ end;@H_403_165@ endloop;@H_403_165@ end;@H_403_165@ oracle存储过程批量重建索引。@H_403_165@ 测试方法@H_403_165@ declare@H_403_165@ --表空间名称@H_403_165@ tablespace_namevarchar2(100);@H_403_165@ begin@H_403_165@ tablespace_name:='dddd';@H_403_165@ p_rebuild_all_index(tablespace_name);@H_403_165@ end;
109.oracle会将sql语句中in后面的东西生成一张内存中的临时表。然后进行查询。所以在相关字段上见索引比较重要。
110.在Oracle中查看各个表、表空间占用空间的大小查看当前用户每个表占用空间的大小:@H_403_165@ SelectSegment_Name,Sum(bytes)/1024/1024FromUser_ExtentsGroupBySegment_Name@H_403_165@ @H_403_165@ 查看每个表空间占用空间的大小:@H_403_165@ SelectTablespace_Name,Sum(bytes)/1024/1024FromDba_SegmentsGroupByTablespace_Name
111.格式化2个时间相减@H_403_165@ @H_403_165@ SELECTEXTRACT(DAYFROMinterval)@H_403_165@ ||'天'@H_403_165@ ||EXTRACT(HOURFROMinterval)@H_403_165@ ||'小时'@H_403_165@ ||EXTRACT(MINUTEFROMinterval)@H_403_165@ ||'分钟'@H_403_165@ ||EXTRACT(SECONDFROMinterval)@H_403_165@ ||'秒'@H_403_165@ 间隔@H_403_165@ FROM(SELECTNUMTODSINTERVAL(callbegin-callend,'DAY')interval@H_403_165@ FROMtbilllog12t@H_403_165@ WHEREcallbegin=@H_403_165@ TO_DATE('2009-12-10:00:58','YYYY-MM-DDHH24:MI:SS'))@H_403_165@ @H_403_165@ 间隔@H_403_165@ -----------------------------------------------@H_403_165@ 0天0小时0分钟-24秒@H_403_165@ 1rowselected.
112.相关定义
ORACLE_SID:操作系统环境变量ORACLE_SID用于和操作系统交互。也就是说,在操作系统中要想得到实例名,就必须使用ORACLE_SID,在操作系统级别唯一识别oracleinstance.@H_403_165@ LD_LIBRARY_PATH:你的系统用到oracle共享库存在于需要指定的路径。@H_403_165@ ORACLE_TERM:是ORACLE在XWINDOW图形界面安装时要使用的变量,必须正确设置,否则安装程序无法在xwindow中启动。@H_403_165@ ORACLE_OWNER:对该文件具有访问特权的用户;通常是创建该文件的用户。
113.修改系统时间格式:@H_403_165@ altersessionsetnls_date_format='YYYY-MM-DD'@H_403_165@ @H_403_165@ 修改默认的时间格式:@H_403_165@ 1、windows下,在注册表中HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE下增加一字符串:NLS_DATE_FORMAT,把其值设成:YYYY-MM-DD@H_403_165@ 2、Unix下,在用户的.profile文件中增加以下内容:@H_403_165@ NLS_DATE_FORMAT=YYYY-MM-DD@H_403_165@ exportNLS_DATE_FORMAT
Nls_lang是Linux系统的环境变量;@H_403_165@ Nls_language是数据库的参数。@H_403_165@ @H_403_165@ 如果数据库字符集没有问题,而查询出来的却是乱码,可以检查下系统的环境变量。@H_403_165@ exportNLS_LANG="simplifiedchinese_china.zhs16gbk"
修改系统时间格式:@H_403_165@ sql>altersessionsetnls_date_format='yyyy-mm-ddhh24:mi:ss';@H_403_165@ 或者在系统exportNLS_DATE_FORMAT=YYYY-MM-DDHH24:MI:SS@H_403_165@ 或者在pro_file里面添加一个变量nls_date_format,这样就不用每次都需要设置时间了。
114.ORACLE9.2.0.8不支持,notin()中带union的sql.
115.recoverdatabaseusingbackupcontrolfile和recoverdatabaseusingbackupcontrolfileuntilcancel@H_403_165@ 前者是利用backupcontrolfile完全恢复@H_403_165@ 后者是利用backupcontrolfile不完全恢复。@H_403_165@ @H_403_165@ usingbackupcontrolfile告诉Oracle不要使用controlfile中的scn@H_403_165@ usingbackupcontrolfileuntilcancel用于redologfile丢失时使用,如redologsequence#1,2,3,4,5,6,丢失4,5,会恢复到3。@H_403_165@ @H_403_165@ 两个连用告诉Oracle恢复的时候恢复到最后一个可用的redologfile,不管控制文件中的scn是多少
116.一般来说ORACLE实例内存=物理内存*80% 对于OLTP系统: PGA=实例内存*20% SGA=实例内存*80% 对于OLAP系统: PGA=实例内存*50% SGA=实例内存*50% 混合型系统在二者之间 确定内存容量后, 对于PGA:使用WORKAREA_SIZE_POLICY设置为AUT,表示PGA自动管理 用PGA_AGREGGATE_TARGET参数分配PGA 用SGA_TARGET参数分配SGA目标值 用SGA_MAX_SIZE分配SGA最大值