数据库oracle学习之路.docx
数据库oracle学习之路1 .数据库基础2 .数据库主键生成SelectSubstr(To_char(dbms_random.value),2,22)IIgetUUID.NextvalFromdual;3 .数据库空间查询表空间在什么空间下selectdf.tablespace_name"表空间名,totalspace"总空间M",freespace”剩余空间M',zround(l-freespacetotalspace)*100,2)from(selecttablespace-name,rond(sum(bytes)10241024)totalspacefromdba_data_filesgroupbytablespace_name)df,(selecttablespace-name,rond(sum(bytes)10241024)freespacefromdba_free_spacegroupbytablespace_name)fswheredf.tablespace_name=fs.tablespace_name;一查用户下所用空间SELECTowner,tablespace,namezROUND(SUM(BYTES)/1024/1024,2)"USED(M)"FROMdba_segmentsGROUPBYowner,tablespace_nameORDERBYSUM(BYTES)DESC;-查用户下所有表所占空间selectOWNER,t.segment_name,t.segment-typ/sum(t.bytes/1024/1024)mmmfromdba_segmentstwheret.owner='JIANGSU,andt.segment-type='TABLE,groupbyOWNER,t.segment_name,t.segment_typeorderbymmmdesc;4. oracle之删除重复数据selecta.rowid,a.*from表名awherea.rowid!=(selectmax(b.rowid)from表名bwherea.字段1=b.字段1anda.字段2=b.字段2)一删除deletefrom表名awherea.rowid!=(selectmax(b.rowid)from表名bwherea.字段1=b.字段1anda.字段2=b.字段2)5. oracle之查询数据第一条记录select*fromtabrownum<26. oracle之存储过程/函数等书写规则7. oracle之正则表达式函数:regexp_likeregexp_substr、regexp-instrregexp_replaceOracle使用正则表达式离不开这4个函数:IQregexpjike2oregexp_substr3oregexpjnstr4oregexp_replace看函数名称大概就能猜到有什么用了。regexpjike只能用于条件表达式,与like类似,但是使用的正则表达式进行匹配,语法很简单: REGEXP_LIKEQrnatch,pararnterV>.regexp_substr函数,与substr类似,用于拾取合符正则表达式描述的字符子串,语法如下:REGEXPSUBSTRIJroecr»>regexpjnstr函数,与instr类似,用于标定符合正则表达式的字符子串的开始位置,语法如下:T REGEXPNSTR f)our8/仙*"patterD÷regexp_replace函数,与replace类似,用于替换符合正则表达式的字符串,语法如下:REGEXPREPIACEPattemAegexp-replace FZr<X>GTXepb8.String)>2r<7)rnatch_paIameter)rrenoe÷这里解析一下几个参数的含义:dosource_char,输入的字符串,能够是列名或者者字符串常量、变量。(2。pattern,正则表达式。3omatchJDarameter,匹配选项。取值范围:i:大小写不敏感;c:大小写敏感;n:点号.不匹配换行符号;m:多行模式;X:扩展模式,忽略正则表达式中的空白字符。4。position,标识从第几个字符开始正则表达式匹配。5ooccurrence,标识第几个匹配组。6oreplace_string,替换的字符串。8. oracle之decode函数decode函数=java中的IrUe?A:Bdecode(参数,1,2,3)参数=1时结果为2否则结果为39. oracle之IinUX下启动脚本1)启动数据库OraCIeSUSe92:>sqlplsZnologSQL*Plus:Release9.2.0.4.0-ProductiononFriJan2002:29:372006Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.SQL>connect/assysdbaConnectedtoanidleinstance.SQL>startupORACLEinstancestarted.TotalSystemGlobalArea135352820bytesFixedSize455156bytesVariableSize109051904bytesDatabaseBuffers25165824bytesRedoBuffers679936bytesDatabasemounted.2)关闭数据库:OraeIeSLlSe92sqlplusnologSQL*Plus:Release9.2.0.4.0-ProductiononFriJan2002:29:372006Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.SQL>connect/assysdbaConnectedtoanidleinstance.SQL>Shutdwonabort;3)启动监听器OraCIeSUSe92:>Isnrctlstart4)停止监听器OraCIeSlJSe92Isnrctlstop5)查看监听器状态OraCIeSUSe92Isnrctlstatus或者ISnretl命令进入监听程序后再用status10. oracle之备份工作背景:OraCleIOg服务器,OraCIeIOg客户端,WindowsXP操作平台要求:Oracle数据库服务器对数据库ytcn每天自动备份一次。解决方案:利用任务计划、批处理文件与Oracle的exp导出功能,根据日期自动生成Oracle备份文件。全面步骤:1)创建批处理文件ytcn.batytcn.bat中全面内容如下:echooffecho正在备份Oracle数据库,清稍等expuserid='cnytcn11ytcnassysdba'file=mi|HHdate:0,4%date:5,2%date:8,2%.dmpecho任务完成!其中红色部分是根据需要进行变动的地方,比如作者的项目名“银通网”,数据库ytcn用户名ytcn,密码ytcn,要在目录,ebakytcnoracleytcn,下生成形如"ytcn200907ILdmp"与"ytcn20090711.log-的备份与日志文件,全表导出。另外:%date%的值在不一致的系统、语言版本下可能是不一样的,操纵面板里面区域选项的设定也会改变date%的值。请先在命令行中测试echo%date%的返回值。%date-4,10%是返回日期函数,后的第一个参数是要截取的起始位置(从0开始),第二个参数是要截取的长度,如没有则是截取到最后,参数可酌情修改。如需要准确的时间做为文件名,请用time%函数,参数同上。2)添加一个任务计划ytcn开始>所有程序>附件>系统工具>任务计划>添加任务计划>下一步>在浏览中查找刚刚写好的ytcn.bat文件>任务名输入ytcn,执行这个任务选择每天,下一步>起始时间下午12:00,起始日期2009711,下一步>输入用户名及密码,用户名要求是管理员权限用户名,下一步>完成点击“完成”之后,会在任务计划栏目下新增一个名为“ytcn”的任务计划,说明已经配置完毕。备注:有的时候点击“完成”之后,系统警告指定的错误是:bx8004l:这是由于电脑的任务计划程序服务没有启动起来。开始>所有程序>管理工具>服务,找到“TaSkSChedUIer”服务,发现启动类型为“已禁用”,右键单击更换为“自动”,并把它启动起来,然后重新添加一次任务计划ytcn就能够了。11. oracle之命中率查询Buffercache由数据块构成。1 .Buffercache的工作原理LRU列表:MRULRU,(全表扫描FTS放在LRU端。)缓冲区块的状态:Free.Pinned、Clean、Dirty.DirtyLiSt或者WriteList(写列表)。数据库写进程DBWO将缓冲区高速缓存中的数据写到数据文件中。2 .测量Buffercache的性能测量Buffercache的命中率:SQL>select1-(physical.value-direct.value-lobs.value)/logical.value)"BufferCacheHitRatio*physical, direct, lobs, logicalfromV$SYSSTATV$SYSSTATV$SYSSTATV$SYSSTATwherephysical.name=,physicalreads,Anddirect.name='physicalreadsdirect,andlobs.name='physicalreadsdirect(Iob)Andlogical.name=,sessionlogicalreads,;''BufferCacheHitRatio的值要>90%.使用STATSPACK来监视Buffercache.使用REPORT.TXT来监视Buffercache.非命中率指标:FreeBufferInspected>FreeBufferWaits、BufferBusyWaits.(V$sysstat)使用PerformanceManager(数据库例程)来监视BufferCache.3 .提高缓冲区高速缓存性能的方法加大BUfferCaChe的大小:init.ora参数DB_CACHE_SIZE(动态参数)。使用BufferCacheAdvisory功能决定BufferCache的大小:首先将initora参数DB_CACHE_ADVICE设成ON,然后查询V$DB_CACHE_ADVICE.使用多个缓冲区池:KeepPool:DB_KEEP_CACHE_SIZERecyclePLDB_RECYCLE_CACHE_SIZEDefaultPool:DBCACHESIZE在内存中缓存表:表的CACHE选项,对优化小表的全表扫描。