|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
操作被同步到从库上后,则主从都“回天无力”。技能
sql*plus利用的一些技能Sql*plus中储藏着很多多少技能,假如把握这些技能,关于在oracle数据库下举行疾速开辟与无效保护数据库都是无益的。上面就承受一二,1.利用SQL*PLUS静态天生批量剧本将spool与select命令分离起来利用,能够天生一个剧本,剧本中包括有能够批量实行某一义务的语句。例1:天生一个剧本,删除SCOTT用户下的一切的表:a.创立gen_drop_table.sql文件,包括以下语句:SPOOLc:drop_table.sqlSELECTDROPTABLE||table_name||;FROMuser_tables;SPOOLOFFb.以SCOTT用户登录数据库SQLPLUS>@…..gen_dorp_table.sqlc.在c盘根目次下会天生文件drop_table.sql文件,包括删除一切表的语句,以下所示:SQL>SELECTDROPTABLE||table_name||;FROMuser_tables;DROPTABLE||TABLE_NAME||;--------------------------------------------------------------------------------DROPTABLEDEPT;DROPTABLEEMP;DROPTABLEPARENT;DROPTABLESTAT_VENDER_TEMP;DROPTABLETABLE_FORUM;5rowsselected.SQL>SPOOLOFFd.对天生的drop_table.sql文件举行编纂往失落不用要的部分,只留下droptable…..语句e.在scott用户下运转dorp_table.sql文件,删除scott用户下一切的表。SQLPLUS>@c:dorp_table.sql在下面的操纵中,在天生的剧本文件中会有过剩的字符,如运转的sql语句,题目,或前往的行数,必要我们编纂该剧本后再运转,给实践的操纵带来诸多方便。怠惰是人的个性,这促使我们用更复杂的举措来完成下面的义务。a.创立gen_drop_table.sql文件,包括以下语句:setechooffsetfeedbackoffsetnewpagenonesetpagesize5000setlinesize500setverifyoffsetpagesize0settermoffsettrimsonsetlinesize600setheadingoffsettimingoffsetverifyoffsetnumwidth38SPOOLc:drop_table.sqlSELECTDROPTABLE||table_name||;FROMuser_tables;SPOOLOFFb.以SCOTT用户登录数据库SQLPLUS>@…..gen_dorp_table.sqlc.在c盘根目次下会天生文件drop_table.sql文件,包括删除一切表的语句,以下所示:DROPTABLEDEPT;DROPTABLEEMP;DROPTABLEPARENT;DROPTABLESTAT_VENDER_TEMP;DROPTABLETABLE_FORUM;d.在scott用户下运转dorp_table.sql文件,删除scott用户下一切的表。SQLPLUS>@c:dorp_table.sql2.将一个表中的数据导出身成一个文本文件,列与列之间以”,”离隔setechooffsetfeedbackoffsetnewpagenonesetpagesize5000setlinesize500setverifyoffsetpagesize0settermoffsettrimsonsetlinesize600setheadingoffsettimingoffsetverifyoffsetnumwidth38SPOOLc:drop_table.sqlselectDEPTNO||,||DNAMEFROMDEPT;SPOOLOFF将下面的内容保留为一个文本文件后,以scott登录,实行该文件后显现了局:10,ACCOUNTING20,RESEARCH30,SALES40,OPERATIONS经由过程下面的两个例子,我们能够将:setechooffsetfeedbackoffsetnewpagenonesetpagesize5000setlinesize500setverifyoffsetpagesize0settermoffsettrimsonsetlinesize600setheadingoffsettimingoffsetverifyoffsetnumwidth38SPOOLc:详细的文件名你要运转的sql语句SPOOLOFF作为一个模版,只需将需要的语句假设这个模版就能够了。在oracle的较新版本中,还能够用setcolsep命令来完成下面的功效:SQL>setcolsep,SQL>select*fromdept;10,ACCOUNTING,NEWYORK20,RESEARCH,DALLAS30,SALES,CHICAGO40,OPERATIONS,BOSTON35,aa,bb3.静态天生spool命令所需的文件名在我们下面的例子中,spool命令所必要的文件名都是流动的。偶然我们必要天天spool一次,而且每次spool的文件名都不不异,如文件名包括当天的日期,该怎样完成呢?columndat1new_valuefilename;selectto_char(sysdate,yyyymmddhh24mi)dat1fromdual;spoolc:&&filename..txtselect*fromdept;spooloff;4.怎样从剧本文件中失掉WINDOWS情况变量的值:在windos中:spoolc: emp\%ORACLE_SID%.txtselect*fromdept;...spooloff在下面的例子中,经由过程%ORACLE_SID%的体例援用情况变量ORACLE_SID的值,假如ORACLE_SID的值为orcl,则天生的spool文件名为:orcl.txt在UNIX中:spoolc: emp$ORACLE_SID.txtselect*fromdept;...spooloff在下面的例子中,经由过程$ORACLE_SID的体例援用情况变量ORACLE_SID的值,假如ORACLE_SID的值为orcl,则天生的spool文件名为:orcl.txt5.怎样指定缺省的编纂剧本的目次在sql*plus中,能够用save命令,将上一条实行的sql语句保留到一个文件中,可是怎样设置该文件的缺省目次呢?经由过程SQL>seteditfilec: empfile.sql命令,能够设置其缺省目次为c: mpe,缺省文件名为file.sql。6.怎样撤除表中不异的行找到不异的行:SELECT*FROMdeptaWHEREROWID(SELECTMAX(ROWID)FROMdeptbWHEREa.deptno=b.deptnoANDa.dname=b.dname--MakesureallcolumnsarecomparedANDa.loc=b.loc);正文:假如只找deptno列不异的行,下面的查询能够改成:SELECT*FROMdeptaWHEREROWID(SELECTMAX(ROWID)FROMdeptbWHEREa.deptno=b.deptno)删除不异的行:DELETEFROMdeptaWHEREROWID(SELECTMAX(ROWIDFROMdeptbWHEREa.deptno=b.deptnoANDa.dname=b.dname--MakesureallcolumnsarecomparedANDa.loc=b.loc);注重:下面其实不删除列值为null的行。7.怎样向数据库中拔出两个单引号(’’)Insertinotdeptvalues(35,’aa’’’’bb’,’a’’b’);在拔出时,用两个’暗示一个’。8.怎样设置sql*plus的征采路径,如许在用@命令时,就不必输出文件的全路径。设置SQLPATH情况变量。如:SQLPATH=C:ORANTDBS;C:APPSCRIPTS;C:MYSCRIPTS9.@与@@的区分是甚么?@即是start命令,用来运转一个sql剧本文件。@命令挪用以后目次下的,或指定全路径,或能够经由过程SQLPATH情况变量征采到的剧本文件。@@用在剧本文件中,用来指定用@@实行的文件与@@地点的文件在统一目次,而不必指定全路径,也不从SQLPATH情况变量指定的路径中寻觅文件,该命令一样平常用在嵌套剧本文件中。10.&与&&的区分&用来创立一个一时变量,每当碰到这个一时变量时,城市提醒你输出一个值。&&用来创立一个耐久变量,就像用用define命令或带new_vlaue字句的column命令创立的耐久变量一样。当用&&命令援用这个变量时,不会每次碰到该变量就提醒用户键进值,而只是在第一次碰到时提醒一次。如,将上面三行语句存为一个剧本文件,运转该剧本文件,会提醒三次,让输出deptnoval的值:selectcount(*)fromempwheredeptno=&deptnoval;selectcount(*)fromempwheredeptno=&deptnoval;selectcount(*)fromempwheredeptno=&deptnoval;将上面三行语句存为一个剧本文件,运转该剧本文件,则只会提醒一次,让输出deptnoval的值:selectcount(*)fromempwheredeptno=&deptnoval;selectcount(*)fromempwheredeptno=&deptnoval;selectcount(*)fromempwheredeptno=&deptnoval;11.引进copy的目标Copy命令在两个数据库之间拷贝数据时出格有效,出格是该命令能够在两个数据库之间传送long型字段的数据。弱点:在两个数据库之间传送数据时,有大概丧失精度(loseprecision)。12.问甚么在修正大批的行时,我的剧本会变得很慢?当经由过程PL/SQL块修正一个表中的很多行时,你会创立在表上创立一个cursor,可是只要在你封闭cursor时,才会开释ROLLBACKSEGMENT,如许,当cursor仍旧翻开时,修正历程会变慢,这是由于数据库不能不征采大批的rollbacksegment以便于保护读分歧性。为了不如许情形,试着在表上加一个标记字段来形貌该行是不是已被修正,然后封闭该cursor,然后再翻开该cursor。每次能够修正5000行.
转此:http://www.cnoug.org/viewthread.php?tid=31451
如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。 |
|