Oracle使用心得
Oracle安裝心得
選擇高級安裝
安裝路徑選擇默認
初裝Oracle的時候不安裝數(shù)據(jù)庫
安裝數(shù)據(jù)庫
安裝監(jiān)聽器
配置數(shù)據(jù)庫和監(jiān)聽器
導出數(shù)據(jù)exp用向導導入數(shù)據(jù)imp用向導創(chuàng)建用戶
createuserbase_55demoidentifiedbybase_55demo;
分配權限:
GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTObase_55demo
批量添加數(shù)據(jù)庫用戶
createuserbase_55demoidentifiedbybase_55demo;
GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTObase_55demo;createuserAMS1_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOAMS1_55DEMO;createuserAMS2_55DEMOidentifiedbyroot123456;
GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOAMS2_55DEMO;createuserAMS3_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOAMS3_55DEMO;createuserAMS4_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOAMS4_55DEMO;createuserBASE_55DEMOidentifiedbyroot123456;
GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOBASE_55DEMO;createuserCHANNEL_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOCHANNEL_55DEMO;createuserRES_55DEMOidentifiedbyroot123456;
GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTORES_55DEMO;createuserSEC_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOSEC_55DEMO;createuserSO1_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOSO1_55DEMO;createuserSO2_55DEMOidentifiedbyroot123456;
GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOSO2_55DEMO;createuserSO3_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOSO3_55DEMO;createuserSO4_55DEMOidentifiedbyroot123456;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTOSO4_55DEMO;
創(chuàng)建表空間
createtemporarytablespacetest_temp
tempfile"f:\\oracle\\product\\10.2.0\\oradata\\test_temp01.dbf"size32m
autoextendon
next32mmaxsize2048mextentmanagementlocal;
createtablespacetest_data
logging
datafile"F:\\oracle\\product\\10.2.0\\oradata\\demo_data01.dbf"size32m
autoextendon
next32mmaxsize2048mextentmanagementlocal;
createuserbase_55demoidentifiedbybase_55demodefaulttablespacetest_datatemporarytablespacetest_temp;
//給用戶授予權限
grantconnect,resourcetobase_55demo;GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTO用戶名字查看SID
select*fromv$instance
修改密碼
alteruserAMS1_55DEMOidentifiedbyAMS1_55DEMO;alteruserAMS2_55DEMOidentifiedbyAMS2_55DEMO;alteruserAMS3_55DEMOidentifiedbyAMS3_55DEMO;alteruserAMS4_55DEMOidentifiedbyAMS4_55DEMO;
alteruserCHANNEL_55DEMOidentifiedbyCHANNEL_55DEMO;
alteruserRES_55DEMOidentifiedbyRES_55DEMO;
alteruserSEC_55DEMOidentifiedbySEC_55DEMO;
alteruserSO1_55DEMOidentifiedbySO1_55DEMO;
alteruserSO2_55DEMOidentifiedbySO2_55DEMO;
alteruserSO3_55DEMOidentifiedbySO3_55DEMO;
alteruserSO4_55DEMOidentifiedbySO4_55DEMO;
擴展閱讀:oracle的使用心得
oracle的使用心得
oracle的使用心得
1、DDL(DataDefinitionLanguage)Commandcreate,alter,dropobjects;
grant,revokeprivilegesandroles;establishingauditingoptions;
addcommentstothedatadictionary;
BeforeandaftereachDDLstatement,Oracleimplicitlycommitthecurrenttransactions.
2、DML(DataManipulationLanguage)Command
QueryandModifydatawithinexistingschemaobjects;
DMLstatementsconsistofDELETE,INSERT,SELECTandUPDATEstatements;EXPLAINPLANstatements;LOCKTABLEstatements;
UnlikeDDLCommand,acommitisnotimplicit,afterexecuteDDLCommand,mustexecutecommitcommandtocommitatransaction;
3、DynamicPerformanceTables
Thesetablesarecreatedattheinstancestartupandusedtostoreinformationabouttheperformanceoftheinstance.Thisinformationincludesconnectioninformatioion,I/OS,initializationparametervaluesandsoon..
4、ProcedureandFunctionareidenticalexceptthatFounctionarealwaysreturnavalue(Proceduredonot).
5、SchemaisacollectionofObjectsthatassociatedwiththeDataBase.
6、SGAismadeupof:DataBaseBuffers;RedoLogBuffers;TheSharedPool;
7、TransactionisalogicalunitofworkconsistingofoneormoreSQLstatements,endinginacommitorrollback.
8、TheDataBaseThePhysicalLayer
(1)Oneormoredatafiles;(2)Twoormoreredologfiles;(3)Oneormorecontrolfiles;TheLogicalLayer(1)Oneormoretablespaces;
(2)Thedatabaseschema;
9、Thedatabaseisdevidedintooneormorelogicalpiecesknownastablespace;
10、RecommendthateveryoneneedDBArolesshouldhaveadifferentaccount,thus,ifauditingisenabled,thereisarecordwhomadethesesystemchanges.
11、TheInstanceisthelogicaltermthatreferstothecomponentsnecessarytoaccessthedatainadatabase.
12、數(shù)據(jù)庫實例(也稱為服務器Server),是用來訪問一個數(shù)據(jù)庫文件集的一個存儲結構及后臺進程的集合。Oralce并行服務器是指一個單獨的數(shù)據(jù)庫可以被多個實例訪問。
13、查詢實例名:
selectinstance_namefromv$instance;
14、查詢動態(tài)視圖v$waitstat、v$system_event、v$session_event、v$session_wait和v$buffer_pool_statistics(在Oracle8中通過catperf.sql腳本創(chuàng)建)以獲取下面所的統(tǒng)計信息,
目的是為了檢查服務器進程是否正等待DBWR(對單個會話而言,也對整個數(shù)據(jù)庫而言)。
15、
(1)SMON:系統(tǒng)監(jiān)控程序(2)PMON:進程監(jiān)控程序(3)DBWR:數(shù)據(jù)庫寫入程序(4)LGWR:日志寫入程序(5)CKPT:檢查點進程(6)ARCH:歸檔日志(7)RECO:恢復進程(8)SNPn:快照進程(9)LCKn:鎖定進程(10)Dnnn:調度程序進程(11)Snnn:服務器進程
(12)Pnnn:并行查詢服務器進程
16、數(shù)據(jù)庫備份之前,若使用了shutdownabort命令,則需要進行如下操作,然后才能進行數(shù)據(jù)庫備份:
1)執(zhí)行一個shutdownabort命令;2)啟動數(shù)據(jù)庫實例;3)執(zhí)行shutdown命令;
17、使用OPS數(shù)據(jù)庫時,如何解決兩個服務器同時對同一記錄的更新?更新同一個表的數(shù)據(jù)的用戶使用同一個實例來訪問數(shù)據(jù)庫。
18、通過ORACLE數(shù)據(jù)庫對非ORACLE數(shù)據(jù)庫進行訪問,首先需要在運行非ORACLE數(shù)據(jù)庫的服務器端安裝ORACLE透明網(wǎng)關產(chǎn)品,每種被訪問的數(shù)據(jù)引擎需要一個獨立的網(wǎng)關;然后需要在本地ORACLE數(shù)據(jù)庫中建立一個數(shù)據(jù)庫連接(DATABASELINK)。
19、外部文件訪問:
1)用作腳本文件的源代碼寫入SQL*PLUS、SQL、PL/SQL中;2)用作SQL*PLUS腳本文件的輸出,用SPOOL命令生成;
3)用作PL/SQL程序的輸入或輸出,通過UTL_FILE軟件包訪問;
4)用作PL/SQL程序的腳本文件的輸出,通過DBMS_OUTPUT軟件包生成;5)用作通過BFILE數(shù)據(jù)類型在數(shù)據(jù)庫中引用的外部數(shù)據(jù),BFILE數(shù)據(jù)類型含有一個指向外部二進制數(shù)據(jù)文件的指針,用戶必須通過CREATEDIRECTORY命令,在ORACLE中創(chuàng)建一個目錄指針,指向存儲文件的目錄。6)用作通過DBMS_PIPE訪問的外部程序,該程序必須以ORACLE支持的3GL來編寫。
20、取消用戶在SYSTEM表空間上創(chuàng)建對象的定額:
ALTERUSERUSER_NAMEQUOTA0ONSYSTEM;注:
如果一個用戶被授權UNLIMITED_TABLESPACE系統(tǒng)權限或RESOURCE角色(Resouce角色擁有使用數(shù)據(jù)庫中所有表空間的權限),則這個授權將覆蓋用戶的任何定額設置。21、創(chuàng)建一個用戶,并且指定缺省表空間:
CREATEUSERUSER_NAMEIDENTIFIEDBYUSER_PASSWORDDEFAULTTABLESPACETABLESPACE_NAME;
22、重新指定用戶的缺省表空間:
ALTERUSERUSER_NAMEDEFAULTTABLESPACETABLESPACE_NAME;
23、從數(shù)據(jù)表中分離出已有的索引:
ALTERINDEXINDEX_NAMEREBUILDTABLESPACEINDEX_TABLESPACE
STORAGE(INITIAL2MNEXT2MPCTINCREASE0);
24、創(chuàng)建表時指定數(shù)據(jù)表空間和索引表空間:CREATETABLETAB_NAME(COLUMN_ATYPE,COLUMN_BTYPE,…
COLUM_NTYPE,
CONSTRAINTTAB_NAME_PKPRIMARYKEY(COLUMN_A)USINGINDEXTABLESPACETABLESPACE_INDEXESSTORAGE(INITIAL2MNEXT2MPCTINCREASE0))TABLESPACETABLESPACE_DATA
STORAGE(INITIAL5MNEXT5MPCTINCREASE0);25、TEMP表空間只有在大型排序操作時才使用;
26、STORAGE子句的意義:
Storage(initial盤區(qū)大小next盤區(qū)大小pctincrease每個順序盤區(qū)幾何增長的系數(shù));使用非零pctincrease參數(shù)的結果:
storage(initial10Mnext10Mpctincrease50);盤區(qū)號大小總塊數(shù)盤區(qū)容量注釋11010INITIAL21020NEXT31535NEXT×1.5422.557.5NEXT×1.5×1.5533.7591.25NEXT×1.5×1.5×1.5............理想的情況:
一個段只具有一個大小合適的盤區(qū),并且next值較小,設表的pctincrease值為零;實際上:
在表空間級設置pctincrease的值為零,會影響ORACLE自動合并表空間中自由空間的能力,把表空間缺省pctincrese設置為一個非常低的值,例如1;
27、通常稱作TEMP的臨時表空間,由于其自身的特點會有很多碎片,臨時段總是在不斷的創(chuàng)建、擴展和撤銷,對于臨時表,將INITIAL和NEXT盤區(qū)大小設為表空間大小的1/20到1/50,對于這個表空間,INITIAL和NEXT缺省設置應該相等,PCTINCREASE的值為0,這樣,段將有同樣大小的盤區(qū)構成,當撤消這些段時,下一個臨時段將能夠重新利用這些已撤消的盤區(qū)。
28、
1)將一個表空間改為臨時表空間:
altertablespacetablespace_nametemporary;2)將一個表空間轉換為能存儲永久對象:
altertablespacetablespace_namepermenent;
3)強制表空間合并其自由空間(只能合并位置相鄰的自由盤區(qū)):altertablespacetalbespace_namecoalesce;
29、
1)手工縮放數(shù)據(jù)文件(只能增大不能減小):
alterdatabasedatafile"$path/datafile01.dat"resizennnM;2)創(chuàng)建一個在需要時自動擴展的文件:
CREATETABLESPACEDATA
DATAFILE"$PATH/DATAFILE01.DAT"SIZE200MAUTOEXTENDONNEXT10M
MAXSIZE250M;
3)通過ALTERTABLESPACE增加一個新的數(shù)據(jù)文件:altertablespacetablespace_nameadddatafile"$path/datafile02.dat"size200Mautoextendonmaxsize300M;
40、移動數(shù)據(jù)文件:
1)關閉實例;
2)使用操作系統(tǒng)命令來移動數(shù)據(jù)文件;
3)安裝數(shù)據(jù)文件并使用ALTERDATABASE命令改變數(shù)據(jù)庫中的文件名;4)啟動實例;具體步驟如下:1)>svrmgrl>connectinternal>shutdown>exit
2)mv/db01/oracle/cc1/data01.dbf/db02/oracle/cc1/3)>svrmgrl
>connectinternal>startupmountcc1
>alterdatabaserenamefile"/db01/oracle/cc1/data01.dbf"to"/db02/oracle/cc1/data01.dbf";
4)startup
31、
查看回滾段名稱:v$rollname查看表空間:dba_tablespace;
查看用戶表空間:user_tablespaces;
查看回滾段狀態(tài)信息:dba_rollback_segs;
查看數(shù)據(jù)庫回滾段的當前分配情況:dba_segments;
32、
若系統(tǒng)中有多個表空間,就需要在system表空間中創(chuàng)建"第二回滾段"來支持多個表空間,有了"第二回滾段",system表空間就只用于管理數(shù)據(jù)庫級的事務。
33、
ipcs|greporacle
ipcrm[-m|-s]ipcid(數(shù)字)
34、連接字符串:||
select"droptalbe"||table_namefromuser_tables;
35、視圖中不能使用orderby,但可以用groupby代替來達到排序目的:createviewasselectb1,b2fromtable_bgroupbyb1,b2;
36、用戶間復制數(shù)據(jù):copyfromuser1@databasextouser2@databaseycreatetable2usingselect*fromtalbe1;
37、察看數(shù)據(jù)庫的大小,和空間使用情況
selectb.file_idFileID,b.tablespace_nameTableSpace,b.file_namePhysicalFileName,b.bytesTotalBytes,(b.bytes-sum(nvl(a.bytes,0)))UsedSpace,sum(nvl(a.bytes,0))FreeSpace,sum(nvl(a.bytes,0))/(b.bytes)*100FreePecentfromdba_free_spacea,dba_data_filesbwherea.file_id=b.file_idgroupbyb.tablespace_name,b.file_name,b.file_id,b.bytesorderbyb.tablespace_name;
38、Oracle提供了幾個包,它們可以用來完成很多任務,從內部進程通信到文件I/O,到在PL/SQL塊中動態(tài)創(chuàng)建和執(zhí)行SQL語句。所有這些包由SYS用戶所擁有-當Oracle最初安裝時兩個用戶中的一個,這些包中最重要的包括:
DBMS_ALERT不用輪詢就允許應用命名并發(fā)出警告條件信號的過程與函數(shù)DBMS_DDL允許獲取PL/SQL程序內部一定數(shù)量的DDL語句的過程DBMS_DESCRIBE為存儲過程與函數(shù)描述API的過程
DBMS_JOB管理BLOBs、CLOBs、NCLOBs與BFILEs的過程與函數(shù)DBMS_OUTPUT允許PL/SQL程序生成終端輸出的過程與函數(shù)
DBMS_PIPE允許數(shù)據(jù)庫會話使用管道通信(通信頻道)的過程與函數(shù)DBMS_SQL在PL/SQL程序內部執(zhí)行動態(tài)SQL的過程與函數(shù)DBMS_ULTILITYDBMS_ULTILITY
ULT_FILE允許PL/SQL程序讀寫服務器文件系統(tǒng)上的文本文件的過程與函數(shù)
39、如何解決單機監(jiān)聽不啟動的問題:
你給IP固定一個值,然后配置NET8時最好用機器名,把listener.ora,tnsname.ora里的IP改成機器名。
40、查看日志文件的路徑和數(shù)量:select*fromv$logfile;
41、oracle中的配置文件:init.oratnsname.oralistener.orasqlnet.ora
42、如何利用rownum檢索紀錄:(在oracle中,只能通過rownum檢索比rownum值小的所有的列)利用如下方法,可以檢索表中rownum等于固定值的列:
select*from(selectrownumrn,column1,column2,…fromtable_name)wherern=要查詢的值;
43、利用translate(char,from,to)函數(shù)判斷一個字符串是否可以轉換成number型:translate(str,"x1234567890","x")isnull,則str為純字符串。
利用fromto參數(shù),把str字段中所有的0-9的字符替換為空,然后判斷函數(shù)返回值,返回值為空,則str一定可以轉換成number型。
44、如何修改internal用戶的密碼?用法:orapwdfile=password=entries=參數(shù)解釋:
file-nameofpasswordfile(mand),
password-passwordforSYSandINTERNAL(mand),entries-maximumnumberofdistinctDBAandOPERs(opt),Therearenospacesaroundtheequal-to(=)character.1)進入DOS下
2)默認internal密碼文件在c:\\orant\\database下,是隱藏屬性,文件名稱與數(shù)據(jù)庫實例名有關
如默認ORACLE實例名為ORCL,則internal密碼文件名為pwdorcl.ora3)建立新的internal密碼文件,起個新名字為pwdora8.ora
orapwd80file=pwdora8.orapassword=Bentries=5--注:password項一定要用大寫,并且不要用單引號4)拷貝pwdora8.ora文件到c:\\orant\\database目錄下5)運行regedit,修改口令文件指向
6)找到HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE項
定位ORA_ORCL_PWFILE子項,改變其值為c:\\orant\\database\\pwdora8.ora7)關閉ORACLE數(shù)據(jù)庫,重新啟動
8)進入svrmgrl服務程序,測試internal密碼是否更改成功
45、只有對象的擁有者才有對對象的操作權。如,把用戶user1下的表tab_1賦給用戶user2查看的權限。此時,必須以uer1用戶登陸,讓后執(zhí)行如下語句:grantselectontab_1touser2;
46、Oracle的本地進程ps-aef|grepLOCAL=YES的父進程ID不能為1,若為1,則該進程被掉死,需要用命令殺死改進程。
47、在Windows201*server操作系統(tǒng)下,用netstart命令啟動oracle的服務,如下:netstartOracleServiceORCLnetstartOracleStartORCLnetstartOracleTNSListener80netstartOracle
或者,利用netstop命令來終止服務:netstoporaclestartorclnetstoporacleserviceorclnetstoporacletnslistener80…
啟動數(shù)據(jù)庫的另外一個方法:oradim-startup-sidSID關閉數(shù)據(jù)庫的另外一個方法:oradim-shutdown-sidSID
48、多表操作在被實際執(zhí)行前,查詢優(yōu)化器會根據(jù)連接條件,列出幾組可能的連接方案并從中找出系統(tǒng)開銷最小的最佳方案。連接條件要充份考慮帶有索引的表、行數(shù)多的表;內外表的選擇可由公式:外層表中的匹配行數(shù)*內層表中每一次查找的次數(shù)確定,乘積最小為最佳方案。
49、保持Oracle數(shù)據(jù)庫優(yōu)良性能的若干訣竅:
1)分區(qū):
根據(jù)實際經(jīng)驗所得,在一個大數(shù)據(jù)庫中,數(shù)據(jù)庫空間的絕大多數(shù)是被少量的表所占有。如何簡化大數(shù)據(jù)庫和管理,如何改善應用的查詢性能,一般可以使用分區(qū)這種手段。所謂分區(qū)就是動態(tài)地將表中記錄分離到若干不同的表空間上,使數(shù)據(jù)在物理上被分割開來,便于維護、備份、恢復、事務及查詢性能。當使用的時候可建立一個連接所有分區(qū)的視圖,使其在邏輯上仍以一個整體出現(xiàn)。(1)建立分區(qū)表
CreatetableEmployee(
EmpNovarchar2(10)primarykey,Namevarchar2(30),DeptNoNumber(2))
Partitionbyrange(DeptNo)(
partitionPART1valueslessthan(11)tablespacePART1_TS,
partitionPART2valueslessthan(21)tablespacePART2_TS,
partitionPART3valueslessthan(31)tablespacePART3_TS
partitionPART4valueslessthan(MAXVALUE)tablespacePART4_TS);
表Employee依據(jù)DeptNo列進行分區(qū)。(2)分區(qū)索引
CreateindexEmployee_DeptNoonEmployee(DeptNo)local(
partitionPART1tablespacePART1_NDX_TS,partitionPART2tablespacePART2_NDX_TS,partitionPART3tablespacePART3_NDX_TS,partitionPART4tablespacePART4_NDX_TS,);
當分區(qū)中出現(xiàn)許多事務并且要保證所有分區(qū)中的數(shù)據(jù)記錄的唯一性時采用全局索引,如:CreateindexEmployee_DeptNoonEmployee(DeptNo)globalpartitionbyrange(DeptNo)(
partitionPART1valueslessthan(11)tablespacePART1_NDX_TS,
partitionPART2valueslessthan(21)tablespacePART2_NDX_TS,
partitionPART3valueslessthan(31)tablespacePART3_NDX_TS
partitionPART4valueslessthan(MAXVALUE)tablespacePART4_NDX_TS
);在建立全局索引時,global子句允許指定索引的范圍值,這個范圍值可以不同于表分區(qū)的范圍值。只有建立局部索引才會使索引索引分區(qū)與表分區(qū)間建立起一一對應關系。因此,在大多數(shù)情況下,應該使用局部索引分區(qū)。若使用了此索引,分區(qū)就能夠很容易地將索引分區(qū)與表分區(qū)建立關聯(lián),局部索引比全局索引更易于管理。
(3)分區(qū)管理
根據(jù)實際需要,還可以使用altertable命令來增加、丟棄、交換、移動、修改、重命名、劃分、截短一個已存在分區(qū)的結構。
2)RebuildIndexes(重建索引不會影響存儲過程)如果表中記錄頻繁的被刪除或插入,盡管表中的記錄總量保持不變,索引空間的使用量會不斷增加。雖然記錄從索引中被刪除,但是該記錄索引項的使用空間不能被重新使用。因此,如果表變化不定,索引空間量會不斷增加,不管表中記錄數(shù)量是否增加--只僅僅是因為索引中無效空間量的增加。
要回收那些曾被刪除記錄使用的空間,需要使用alterindexrebuild命令?梢宰鲆粋定期運行的批處理程序,來重建最活動表的索引。這個批處理程序可以在空閑時運行,以避免程序與用戶沖突。若能堅持索引的這一程序規(guī)劃,便可以及時回收那些未使用空間,提高空間利用率。
3)段的碎片整理
當生成一個數(shù)據(jù)庫對象時(一個表或一個索引),通過用戶缺省值或指定值來為它指定表空間。一個在表空間中所生成的段,用于存儲對象的相關數(shù)據(jù)。在段被關閉、收縮、截斷之前,段所分配的空間將不被釋放。
一個段是由范圍組成,而范圍是由相鄰的Oracle塊組成。一旦存在的范圍不能再存儲新的數(shù)據(jù),那這個段就會去獲得新的范圍,且并不要求這些范圍是彼此相鄰的。這樣的擴展會一直繼續(xù)下去,直到表空間中的數(shù)據(jù)文件不能提供更多的自由空間,或者范圍數(shù)量已達到極限。因此,一個碎片太多的數(shù)據(jù)段,不僅會影響運行,也會引發(fā)表空間中的空間管理問題。所以,每個數(shù)據(jù)段只含有一個范圍是十分有益的。借助監(jiān)控系統(tǒng),可以通過檢查DBA_SEGMENTS數(shù)據(jù)字典視圖來了解哪些數(shù)據(jù)庫對象含有10個或更多范圍的段,確定其數(shù)據(jù)段碎片。若一個段的碎片過多,可用兩種方法解決這個問題:
(1)用正確的存儲參數(shù)建立一個新表,將舊表中的數(shù)據(jù)插入到新表中,再刪除舊表;(2)利用Export/Import工具。
如:expsystem/managerfile=exp.dmpcompress=Ygrants=Yindexes=Ytables=(T1,T2)
若輸出成功,進入Oracle,刪除上述表。
注:compress=Y決定將在輸出過程中修改它們的存儲參數(shù)。
impsystem/managerfile=exp.dmpcommit=Ybuffer=64000full=Y注:在輸入時重新配置新的存儲參數(shù)。
自由范圍的碎片整理
表空間中的一個自由范圍是表空間中相連自由(空間)塊的集合。當一個段關閉時,它的范圍將被釋放,并被標記為自由范圍。然而,這些自由范圍再也不能與相鄰的自由范圍合并,它們之間的界線始終存在。但是當表空間的缺省值pctincrease設置不為0時,SMON后臺進會定期的將這些相鄰的自由范圍合并。若pctincrease設置為0,那相鄰自由范圍不會被數(shù)據(jù)庫自動合并。但可以使用altertablespace命令coalesce選項,來強迫進行相鄰自由范圍的合并。
不進行自由范圍合并,在日后的空間請求中,會影響到表空間中的空間分配。當需要一個足夠大的范圍時,數(shù)據(jù)庫并不會合并相鄰的自由范圍,除非沒有其他選擇。這樣,當表空間中前面較小自由范圍已被相關使用時,將使用表空間中后面部分最大的一個自由范圍。結果,會因為它們沒有足夠多的使用空間,從而導致表空間中速度上的矛盾。由于這樣的進程出現(xiàn),使數(shù)據(jù)庫的空間分配距理想越來越遠。自由空間碎片常會出現(xiàn)在那些經(jīng)常關閉又重新生成的數(shù)據(jù)庫表和索引中。
在理想的ORACLE表空間中,每一個數(shù)據(jù)庫對象存儲在一個單獨的范圍中,并且所有有效自由空間集中在一個巨大而連續(xù)的范圍中。這樣,在一個對象需要附加存儲空間時,可以在增加獲取足夠大自由空間的可能性同時,最小化空間中的循環(huán)調用,提高自由空間使用率
50、查看和修改Oracle服務器端字符集:方法一:
1)查看服務器端字符集:
select*fromv$nls_parameters;
select*fromnls_database_parameters;select*fromsys.props$;
2)修改服務器端字符集(用sys用戶):
首先執(zhí)行:updateprops$setvalue$="WE8ISO8859P1"wherename="NLS_CHARACTERSET";
updateprops$setvalue$="china"wherename="NLS_LANGUAGE";提交(commit),然后,重新啟動數(shù)據(jù)庫;
3)用客戶端工具(PL/SQLDEVELOPorPBetc.)查詢數(shù)據(jù)庫,若顯示亂碼,先查詢出數(shù)據(jù)庫端的字符集,然后,從注冊表中修改NLS_LANG字段的值,可能為AMERICAN_AMERICA.WE8ISO8859P1或者SIMPLIFIEDCHINESE_CHINA.ZHS16GBK或者NA等。方法二:
altersystemenablerestrictedsession;
alterdatabaseORCLcharactersetZHS16GBK;
alterdatabaseORCLnationalcharactersetZHS16GBK;
51、查看系統(tǒng)中的角色:select*fromdba_roles;
52、Import使用指南:1)關鍵字缺省值:
KeywordDescription(Default)KeywordDescription(Default)--------------------------------------------------------------------------
USERIDusername/passwordFULLimportentirefile(N)
BUFFERsizeofdatabufferFROMUSERlistofownerusernamesFILEInputfile(EXPDAT.DMP)TOUSERlistofusernamesSHOWjustlistfilecontents(N)TABLESlistoftablenamesIGNOREignorecreateerrors(N)RECORDLENGTHlengthofIOrecordGRANTSimportgrants(Y)INCTYPEincrementalimporttypeINDEXESImportindexes(Y)COMMITcommitarrayinsert(N)ROWSimportdatarows(Y)PARFILEparameterfilename
KeywordDescription(Default)
-----------------------------------------------------------------------------LOGlogfileofscreenoutput
DESTROYoverwritetablespacedatafile(N)INDEXFILEwritetable/indexinfotospecifiedfile
CHARSETcharactersetofexportfile(NLS_LANG)
POINT_IN_TIME_RECOVERTablespacePoint-in-timeRecovery(N)
SKIP_UNUSABLE_INDEXESskipmaintenanceofunusableindexes(N)ANALYZEexecuteANALYZEstatementsindumpfile(Y)
FEEDBACKdisplayprogresseveryxrows(0)
VOLSIZEnumberofbytesinfileoneachvolumeofafileontape說明:
1)如果導出用戶沒有DBA權限,則導入用戶可以不用指定fromuser、touser參數(shù);2)如果導出用戶擁有DBA權限,則導入用戶也必須擁有DBA權限;
53、常用的SQL關鍵字:
1)UNION:返回兩個查詢結果并去除其中重復的部分;
2)UNIONALL:返回兩個查詢結果但是并不去除重復的紀錄;3)INTERSECT:返回兩個表中共有的行;
4)MINUS:返回第一個表中存在的但是第二個表中不存在的紀錄;5)BETWEEN…AND…:返回…和…之間的值,包括邊界值;
54、常用的SQL一些函數(shù):
1)ADD_MONTHS(column_name,number_value):在當前的日期上增加number_value個月;
注:column_name為日期型;number_value為整型數(shù)值;2)LAST_DAY(column_name):返回當前月的最后一天;
注:column_name為日期型;
3)MONTHS_BETWEEN(column_a,column_b):返回兩個日期間月份的個數(shù);
4)NEXT_DAY(column_name,"SUNDAY[MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,…]"
5)LPAD(column_name,number_value,"fill_character")6)RPAD(column_name,number_value,"fill_character")7)LTIRM(column_name[,fill_character])8)RTRIM(column_name[,fill_character])
9)REPLACE(column_name,"old_stings"[,"new_strings"])10)SUBSTR(column_name,number_start,number_count)
11)TRANSLATE(column_name,"origin_characters","translate_into_characters")12)INSTR(column_name,"strings_to_search",number_1,number_2)strings_to_seach:將要搜索的字符串;
number_1:從第number_1個字符開始查找;
number_2:返回第number_2個字符串首字符的位置;13)LENGTH(column_name):返回字符串的長度;14)TO_CHAR()15)TO_NUMBER()
16)GREATEST(var_1,var_2,var_3,…)17)LEAST(var_1,var_2,var_3,…)
18)USER:返回當前使用數(shù)據(jù)庫的用戶名字;
55、
1)GROUPBY:
當要求分組結果返回多個數(shù)值時,不能在select語句中使用使用除分組列以外的列,這將會導致錯誤的返回值,你可以使用select語句中未列出的列進行分組;
2)HAVING:
匯總函數(shù)不能工作在WHERE子句中,HAVING允許將匯總函數(shù)作為條件,代替WHERE子句;
3)STARTINGWITH:等同于LIKE;
56、關于sys用戶以sysdba的身份登陸的一些注意事項:
1)把sysdba系統(tǒng)權限與dba角色要分開,不要混淆,有dba角色不一定是sysdba;2)在server上可能用了操作系統(tǒng)認證,用了操作系統(tǒng)認證就不能在本機上以sysdba身份登但是可以在client上測試;
3)把INIT.ORA中REMOTE_LOGIN_PASSWORD設置為EXCLUSIVE或SHARED。同時把sqlnet.ora文件中SQLNET.AUTHENTICATION_SERVICES設置為NONE或注釋后,然后在服務器上進行測試,就可以通過;
4)查看系統(tǒng)中具有sysdba權限的用戶:select*fromv$pwfile_users;
57、給數(shù)據(jù)庫中的表和列加上注釋:
commentontableTable_nameis"注釋的內容";
commentoncolumnTable_name.column_nameis"注釋內容";查看表的注釋:
select*fromuser_tab_comment;查看列的注釋:
select*fromuser_col_comment;
其他于此相關的視圖:
dba_tab_comments、dba_col_comments;58、P4機器的安裝問題
在基于奔四的Windows201*系統(tǒng)上安裝Oracle8i數(shù)據(jù)庫時有可能產(chǎn)生錯誤,癥狀為單擊Setup.exe時沒有反應。這是因為Oracle8i的安裝程序不能識別Intel的奔四處理器?砂凑找韵路椒▉斫鉀Q這個問題:
(1)安裝最新的Windows201*服務包補丁程序(如sp2,sp3等),可在windows201*/downloads/上下載;
(2)在奔四服務器上創(chuàng)建一個臨時目錄(e.g.\\TEMP);
(3)將Oracle數(shù)據(jù)庫服務器安裝光盤的所有內容拷貝到第二步創(chuàng)建的臨時目錄中;(4)在第二步創(chuàng)建的臨時目錄里搜索名為SYMCJIT.DLL的文件;(5)把SYMCJIT.DLL修改為SYMCJIT.OLD;
(6)從\\TEMP\\install\\win32目錄運行SETUP.EXE來安裝Oracle8.1.x。
59、手工編譯存儲過程、觸發(fā)器:
alterprocedureprocedure_namecomplile;altertriggertrigger_namecompile;
60、
1)給表中的某個字段加上主鍵約束:
altertabletabl_nameaddconstraintprimary_key_nameprimarykey(column_name);2)刪除表中的主鍵約束:
altertabletable_namedropprimarykeycascade;
altertalbetable_namedropconstrainconstraint_namecascade;
61、查看快照:
select*fromuser_snapshots
62、
1)改變回滾段的大。
alterrollbacksegmentrbs_nameshrinktonnM;2)合并自由表空間:
altertablespacetablespace_namecoalesce;3)改變表空間數(shù)據(jù)文件的大小:
alterdatabasedatafile"$path$\\datafile_name"RESIZEnnM;
63、
1)數(shù)據(jù)庫名稱:
select*fromv$database;select*fromglobal_name;2)實例名稱:
select*fromv$instance;
64、ORADERBY和GROUPBY的一些關系:
一個SQL語中有GroupBy語句,那么OrderBy中的表達式就必須是在GroupBy中出現(xiàn)過。
65、對大于2G的數(shù)據(jù)庫如何解決操作系統(tǒng)最大文件為2G的限制?可以利用如下方法,把導出的dmp文件保存到多個文件中:expuser_name/passwordfilesize=1999M
file=\\(/home1/back0/user_infor_0.dmp,/home1/back0/user_infor_1.dmp\\)log=/home1/back0/user_infor_Xtables=user_table_name
(如果要導出整個用戶下的數(shù)據(jù),則把tables=user_table_name替換為full=y)
65、Orale數(shù)據(jù)庫中的數(shù)據(jù)字典:ViewODBCAPIOLEDBAPI
ALL_CATALOGSQLTablesDBSCHEMA_CATALOGS
ALL_COL_COMMENTSSQLColumnsDBSCHEMA_COLUMNS
ALL_CONS_COLUMNSSQLPrimaryKeys,SQLForeignKeysDBSCHEMA_PRIMARY_KEYS,DBSCHEMA_FOREIGN_KEYS
ALL_CONSTRAINTSSQLPrimaryKeys,SQLForeignKeysDBSCHEMA_PRIMARY_KEYS,DBSCHEMA_FOREIGN_KEYS
ALL_IND_COLUMNSSQLStatisticsDBSCHEMA_STATISTICSALL_INDEXESSQLStatisticsDBSCHEMA_STATISTICS
ALL_OBJECTSSQLTables,SQLProcedures,SQLStatisticsDBSCHEMA_TABLES,DBSCHEMA_PROCEDURES,DBSCHEMA_STATISTICS
ALL_TAB_COLUMNSSQLColumnsDBSCHEMA_COLUMNSALL_TAB_COMMENTSSQLTablesDBSCHEMA_TABLESALL_TABLESSQLStatisticsDBSCHEMA_STATISTICSALL_USERSSQLTablesDBSCHEMA_TABLESALL_VIEWSSQLTablesDBSCHEMA_TABLESDICTIONARYSQLTablesDBSCHEMA_TABLESUSER_CATALOGSQLTablesDBSCHEMA_TABLES
USER_COL_COMMENTSSQLColumnsDBSCHEMA_COLUMNS
USER_CONS_COLUMNSSQLPrimaryKeys,SQLForeignKeysDBSCHEMA_PRIMARY_KEYS,DBSCHEMA_FOREIGN_KEYS
USER_CONSTRAINTSSQLPrimaryKeys,SQLForeignKeysDBSCHEMA_PRIMARY_KEYS,DBSCHEMA_FOREIGN_KEYS
USER_IND_COLUMNSSQLStatisticsDBSCHEMA_STATISTICSUSER_INDEXESSQLStatisticsDBSCHEMA_STATISTICS
USER_OBJECTSSQLTables,SQLProcedures,SQLStatisticsDBSCHEMA_TABLES,DBSCHEMA_PROCEDURES,DBSCHEMA_STATISTICSUSER_TAB_COLUMNSSQLColumnsDBSCHEMA_COLUMNSUSER_TAB_COMMENTSSQLTablesDBSCHEMA_TABLESUSER_TABLESSQLStatisticsDBSCHEMA_STATISTICSUSER_USERSSQLTablesDBSCHEMA_TABLESUSER_VIEWSSQLTablesDBSCHEMA_TABLES
66、查詢系統(tǒng)中的數(shù)據(jù)庫連接:(DatabaseLink)select*fromuser_db_links;
67、如何單獨從Oracle數(shù)據(jù)庫中備份多個用戶?
expsystem/managerowner=(用戶1,用戶2,…,用戶n)file=導出文件;
68、如何備份一個或多個表?
Expsystem/managertables=(用戶1.表1,\\用戶1.表2,\\用戶1.表3,\\……
用戶2.表n+1,\\用戶2.表n+2,\\用戶2.表n+3……)
69、如何導入指定的表?
Impuser_name/passwordfromuser=dmp_user_nametouser=user_nametables=…file=…注釋:
1)果導出用戶沒有DBA權限,則導入用戶可以不用指定fromuser、touser參數(shù)2)如果導出用戶擁有DBA權限,則導入用戶也必須擁有DBA權限
70、如何備份控制文件?
1)產(chǎn)生一個跟蹤文件,里面存放創(chuàng)建控制文件的腳本,可以用記事本等文本編輯器打開這個腳本可以重新創(chuàng)建控制文件,生成一個跟蹤文件到init.ora中user_dump_dest所指的目錄下($ORACLE_HOME\\ADMIN\\ORADB\\UDUMP\\):Alterdatabasebackupcontrolfiletotrace;
Alterdatabasebackupcontrolfiletotraceresetlogs;
Alterdatabasebackupcontrolfiletotracenoresetlogs;
2)產(chǎn)生一個二進制文件,當前控制文件的一個一模一樣的備份:alterdatabasebackupcontrolfileto文件名;alterdatabasebackupcontrolfileto文件名reuse;
71、如何移動控制文件到一個新的目錄?1)SHUTDOWN
2)用操作系統(tǒng)命令將C:\\Oracle\\oradata\\oradb\\control01.ctl拷貝到新的目錄:D:\\Oracle\\oradb\\data,
則現(xiàn)在控制文件的完整路徑為:D:\\Oracle\\oradb\\data\\control01.ctl,修改init.ora文件,在control_files參數(shù)中改變控制文件的路徑,修改前
control_files=("C:\\Oracle\\oradata\\oradb\\control01.ctl")修改后
control_files=("D:\\Oracle\\oradb\\data\\control01.ctl")3)STARTUP72、存儲參數(shù)(storage子句)含義及設置技巧
該子句可用于:表空間、回滾段、表、索引、分區(qū)、快照、快照日志,具體應用如下:參數(shù)名稱缺省值最小值最大值說明
INITIAL5(數(shù)據(jù)塊)2(數(shù)據(jù)塊)操作系統(tǒng)限定分配給Segment的第一個Extent的大小,以字節(jié)為單位,這個參數(shù)不能在alter語句中改變,如果指定的值小于最小值,則按最小值創(chuàng)建。
NEXT5(數(shù)據(jù)塊)1(數(shù)據(jù)塊)操作系統(tǒng)限定第二個Extent的大小等于NEXT的初值,以后的NEXT值=前一NEXT大小乘以(1+PCTINCREASE/100),如果指定的值小于最小值,則按最小值創(chuàng)建。
如果在alter語句中改變NEXT的值,則下一個分配的Extent將具有指定的大小,而不管上一次分配的Extent大小和PCTINCREASE參數(shù)值。MINEXTENTS1(Extent)
回滾段為2個Extent1(Extent)
回滾段為2個Extent操作系統(tǒng)限定Segment第一次創(chuàng)建時分配的Extent數(shù)量MAXEXTENTS根據(jù)數(shù)據(jù)塊大小而定1(Extent)
回滾段為2個Extent無限制隨著Segment中數(shù)據(jù)量的增長,最多可分配的Extent數(shù)量
PCTINCREASE50%(Oracle816中為0%)0%操作系統(tǒng)限定指定第三個及其后的Extent相對于上一個Extent所增加的百分比,
如果PCTINCREASE為0,則Segment中所有新增加的Extent的大小都相同,等于NEXT的值,
如果PCTINCREASE大于0,則每次計算NEXT的值(用上面的公式),PCTINCREASE不能為負數(shù)。
創(chuàng)建回滾段時,不可指定此參數(shù),回滾段中此參數(shù)固定為0。
OPTIMAL----不能小于回滾段初始分配空間操作系統(tǒng)限定僅與回滾段有關,當回滾段因為增長、擴展而超過此參數(shù)的設定范圍時,Oracle系統(tǒng)會根據(jù)情況動態(tài)地重新分配Extents,試圖收回多分配的Extent。
FREELISTS11數(shù)據(jù)塊大小限制只能在CREATETABLE、CLUSTER、INDEX中指定FREELISTS和FREELISTGROUPS參數(shù)。
模式對象中每一個自由列表組中自由列表的數(shù)量
FREELISTGROUPS11取決于Oracle并行實例的數(shù)量用戶創(chuàng)建的數(shù)據(jù)庫對象的自由列表組的數(shù)量,只有用OPS并行服務器選項時才使用這一參數(shù),一個實例對應一個組。
BUFFER_POOL------------給模式對象定義缺省緩沖池(高速緩存),該對象的所有塊都存儲在指定的高速緩存中,對于表空間或回滾段無效。
建議PCTINCREASE參數(shù)設置為0,可使碎片最小化,使每一個Extent都相同(等于NEXT值)
一旦建立了某個對象,它的INITIAL和MINEXTENTS參數(shù)不能修改(Oracle816中可修改MINEXTENTS參數(shù))
對于NEXT和PCTINCREASE的任何修改都只影響后來分配的那些Extent在分配一個新Extent時,系統(tǒng)直接按NEXT的值分配一個Extent,
然后用公式:前一NEXT值*(1+PCTINCREASE/100)計算出下一個應該分配的Extent的大小,
并把計算結果保存到相關數(shù)據(jù)字典的NEXT_EXTENT列上,做為下一個應該分配的Extent的大小。
73、查看系統(tǒng)后臺進程:select*fromv$bgprocess;SMON系統(tǒng)進程PMON用戶進程
DBWR數(shù)據(jù)庫寫入進程LGWR日志寫入進程
CKPT檢查點進程用來減少實例恢復所需時間,
init.ora中,log_checkpoint_interval=10000,此參數(shù)設置檢查點出現(xiàn)的頻度ARCH歸檔進程將聯(lián)機重做日志拷貝到磁盤或磁帶,即將聯(lián)機重做日志歸檔RECO恢復進程用于分布式數(shù)據(jù)庫中的分布式處理,
init.ora中,distributed_transactions=10,此參數(shù)大于0時才被建立
SNPn快照進程數(shù)量取決于init.ora中參數(shù)job_queue_processes=4LCKn鎖進程可選項,用于并行服務器Dnnn調度進程可選項,僅用于多線程服務器
74、如何啟動archivelog模式?1)管理器:
>connectinternal
>shutdown--若執(zhí)行了shutdownabort則需要重新startup,然后再正常shutdown>startupmount[dbname]
>alterdatabase[dbname]archivelog;>archivelogstart
>alterdatabase[dbname]open;
>altersystemswitchlogfile;--強制系統(tǒng)進行日志切換,可馬上觀察到歸檔日志的產(chǎn)生;>exit
2)改數(shù)據(jù)庫初始化參數(shù)文件,定義歸檔模式(自動)、歸檔日志保存路徑歸、檔日志命名方法。
3)重新啟動數(shù)據(jù)庫;
解釋init.ora參數(shù)文件中關于歸檔重做日志參數(shù)項的含義歸檔模式是自動還是手工,true為自動,false為手工log_archive_start=true歸檔日志文件所保存的路徑
log_archive_dest_1="location=C:\\Oracle\\oradata\\oradb\\archive"歸檔日志文件的命名方法
log_archive_format=%%ORACLE_SID%%T%TS%S.ARC歸檔命令:
啟動自動歸檔模式,系統(tǒng)重起后,將按init.ora中的參數(shù)log_archive_start的值設置歸檔方式
SVRMGR>archivelogstart啟動手工歸檔模式
SVRMGR>archivelogstop
查看歸檔信息:重做日志是否歸檔方式、是自動歸檔還是手工歸檔、歸檔路徑、最舊的聯(lián)機日志循序號...
SVRMGR>archiveloglist
歸檔一個已滿,但沒有歸檔的聯(lián)機重做日志SVRMGR>archivelognext
歸檔所有已滿,但沒有歸檔的聯(lián)機重做日志SVRMGR>archivelogall
注意:一個事務即使不被提交,也會被寫入到重做日志中
停用歸檔日志模式:
alterdatabase[db_name]noarchivelog;
75、Oracle數(shù)據(jù)庫有哪幾種啟動方式?有以下幾種啟動方式:
1)startupnomount
非安裝啟動,這種方式啟動下可執(zhí)行:重建控制文件、重建數(shù)據(jù)庫
讀取init.ora文件,啟動instance,即啟動SGA和后臺進程,這種啟動只需要init.ora文件。
2)startupmountdbname
安裝啟動,這種方式啟動下可執(zhí)行:數(shù)據(jù)庫日志歸檔、數(shù)據(jù)庫介質恢復、
使數(shù)據(jù)文件聯(lián)機或脫機,
重新定位數(shù)據(jù)文件、重做日志文件。
執(zhí)行"nomount",然后打開控制文件,確認數(shù)據(jù)文件和聯(lián)機日志文件的位置,
但此時不對數(shù)據(jù)文件和日志文件進行校驗檢查。3)startupopendbname先執(zhí)行"nomount",然后執(zhí)行"mount",再打開包括Redolog文件在內的所有數(shù)據(jù)庫文件,這種方式下可訪問數(shù)據(jù)庫中的數(shù)據(jù)。4)startup,等于以下三個命令startupnomount
alterdatabasemountalterdatabaseopen5)startuprestrict約束方式啟動
這種方式能夠啟動數(shù)據(jù)庫,但只允許具有一定特權的用戶訪問非特權用戶訪問時,會出現(xiàn)以下提示:
ERROR:
ORA-01035:ORACLE只允許具有RESTRICTEDSESSION權限的用戶使用6)startupforce強制啟動方式
當不能關閉數(shù)據(jù)庫時,可以用startupforce來完成數(shù)據(jù)庫的關閉先關閉數(shù)據(jù)庫,再執(zhí)行正常啟動數(shù)據(jù)庫命令
7)startuppfile=參數(shù)文件名帶初始化參數(shù)文件的啟動方式
先讀取參數(shù)文件,再按參數(shù)文件中的設置啟動數(shù)據(jù)庫例:startuppfile=E:\\Oracle\\admin\\oradb\\pfile\\init.ora8)startupEXCLUSIVE
76、如何查看SGA剩余的內存?
selectname,sgasize/1024/1024"Allocated(M)",bytes/1024"自由空間(K)",round(bytes/sgasize*100,2)"自由空間百分比(%)"from(selectsum(bytes)sgasizefromsys.v_$sgastat)s,sys.v_$sgastatfwheref.name="freememory";
77、存儲過程/函數(shù)只能被賦予執(zhí)行的權限:
grantexecuteonprocedure_name/function_nametouser_name;
78、如何把一個表空間授權給一個用戶?
Alteruserquotaon;
79、快照(snapshot):
快照,也叫物化的視圖,Oracle在復制環(huán)境中利用快照復制數(shù)據(jù)到備份服務器中,目的是緩解一個大的數(shù)據(jù)倉庫中昂貴的查詢開銷。
Asnapshotisareplicaofatargetmastertablefromasinglepointintime.
Snapshotcanalsocontainawhereclausesothatsnapshotsitecancontaincustermizeddatasets.創(chuàng)建一個快照:
CREATESNAPSHOTemp_snapASSELECT*FROMscott.emp@db1.world;1)Primarykeysnapshotaredefaulttypeofsnapshot:
CREATESNAPSHOTsales.customerFORUPDATEASSELECT*FROMsales.customer@dbs1.acme.com;
2)為了向后兼容Oracle支持ROWIDSnapshots(onlysupportedbyoracle7)3)omplexSnapshots,支持connectby、intersect、union、minusetc。
80、如何對CLOB行字段執(zhí)行全文檢索?
超過4000字的文本一般存儲在CLOB中(MSQL、Sysbase是存放在Text中),在目前的Oracle版本(Oracle8i)中,對大字段CLOB仍然不支持在where子句直接的like操作,如何實現(xiàn)對存儲在CLOB字段中的內容進行l(wèi)ike查找呢?下面的文章也許能給你幫助。雖然在SQL*PLUS中能實現(xiàn)用select直接看到CLOB的內容,但是如何通過DBMS_LOB包實現(xiàn)對中文環(huán)境下的CLOB內容的讀取我一直沒有找到好的方法(使用Documents中提到的Samples只適用英文字符集),這極大的限制了使用第3方軟件開發(fā)工作的自由度。表結構:
createtableproducts(productidnumber(10)notnull,namevarchar2(255),descriptionCLOB);方法:
SELECTproductid,nameFROMproducts
WHEREdbms_lob.instr(products.description,"sometext",1,1)>0;
下面列出了DBMS_LOB包中的過程函數(shù):
APPENDprocedureAppendsthecontentsofthesourceLOBtothedestinationLOB.
CLOSEprocedureClosesapreviouslyopenedinternalorexternalLOB.COMPAREfunctionComparestwoentireLOBsorpartsoftwoLOBs.
COPYprocedureCopiesall,orpart,ofthesourceLOBtothedestinationLOB.CREATETEMPORARYprocedureCreatesatemporaryBLOBorCLOBanditscorrespondingindexintheuser"sdefaulttemporarytablespace.ERASEprocedureErasesallorpartofaLOB.FILECLOSEprocedureClosesthefile.
FILECLOSEALLprocedureClosesallpreviouslyopenedfiles.FILEEXISTSfunctionChecksifthefileexistsontheserver.
FILEGETNAMEprocedureGetsthedirectoryaliasandfilename.
FILEISOPENfunctionChecksifthefilewasopenedusingtheinputBFILElocators.
FILEOPENprocedureOpensafile.
FREETEMPORARYprocedureFreesthetemporaryBLOBorCLOBintheuser"sdefaulttemporarytablespace.
GETCHUNKSIZEfunctionReturnstheamountofspaceusedintheLOBchunktostoretheLOBvalue.
GETLENGTHfunctionGetsthelengthoftheLOBvalue.
INSTRfunctionReturnsthematchingpositionofthenthoccurrenceofthepatternintheLOB.
ISOPENfunctionCheckstoseeiftheLOBwasalreadyopenedusingtheinputlocator.
ISTEMPORARYfunctionChecksifthelocatorispointingtoatemporaryLOB.LOADFROMFILEprocedureLoadsBFILEdataintoaninternalLOB.
OPENprocedureOpensaLOB(internal,external,ortemporary)intheindicatedmode.
READprocedureReadsdatafromtheLOBstartingatthespecifiedoffset.SUBSTRfunctionReturnspartoftheLOBvaluestartingatthespecifiedoffset.TRIMprocedureTrimstheLOBvaluetothespecifiedshorterlength.WRITEprocedureWritesdatatotheLOBfromaspecifiedoffset.WRITEAPPENDprocedureWritesabuffertotheendofaLOB
81、
OracleSQL運行時間的最主要的組成部分是花在為執(zhí)行準備新的SQL語句上的時間。不過,如果了解了可執(zhí)行計劃產(chǎn)生的內在機制,你就可以控制Oracle花費在評估表的連接順序的時間,并在總體上提高查詢的性能。1)準備為執(zhí)行提供的SQL語句在一個SQL語句進入Oracle庫的cache之后、而真正被執(zhí)行之前,將會依次發(fā)生如下事件:
語法檢查--檢查該SQL語句的拼寫和詞序是否正確。
語義解析--Oracle根據(jù)數(shù)據(jù)詞典(datadictionary)來驗證所有的表格(table)和列(column)。
已保存綱要檢查--Oracle檢查詞典以確認對應該SQL語句是否已存在已保存的綱要(StoredOutline)。
產(chǎn)生執(zhí)行計劃--Oracle根據(jù)一種罰值(cost-based)優(yōu)化算法和數(shù)據(jù)詞典中的統(tǒng)計數(shù)據(jù)來決定如何生成最優(yōu)執(zhí)行計劃。
產(chǎn)生二進制代碼--Oracle在執(zhí)行計劃的基礎上生成可執(zhí)行的二進制代碼。
一旦開始準備執(zhí)行SQL語句,上述的過程很快就會執(zhí)行,這是因為Oracle可以識別出同樣的SQL語句并對同樣的SQL語句重復使用對應的可執(zhí)行代碼。然而,對產(chǎn)生adhocSQL的系統(tǒng)以及SQL中嵌入文本值(literalvalue)的情況,SQL執(zhí)行計劃的生成時間就會變得相當長,而且以前的執(zhí)行計劃也常常不能被再次利用。對那些牽涉到許多表格的查詢,Oracle可能要花上很長的時間來決定把連接這些表格的順序。2)評估連接表格的順序
生成可執(zhí)行計劃的時間往往是SQL的準備過程中最大的開銷組成部分,尤其是在處理有多個表的連接的查詢的情況下。當Oracle評估表的連接順序時,它必須考慮每一種可能的排序。例如,當有六個表格需要連接時,Oracle需要考慮720種(6的排列數(shù),即6×5×4×3×2×1=720)可能的連接排序。當需要連接的表的數(shù)量超過10時,這個排列問題將變得非常突出:如果需要連接的表格有15個,那么需要考慮的可能的查詢排列順序超過一萬億種(精確值為1,307,674,368,000)。
在optimizer_search_limit參數(shù)中設置限制
你可以通過optimizer_search_limit參數(shù)來控制上述問題的發(fā)生,該參數(shù)用來指定優(yōu)化器評估的表格連接順序的最大數(shù)目。利用這個參數(shù),就可以防止優(yōu)化器在評估所有可能的表格連接順序中所花費的多余時間。如果查詢中的表的數(shù)量少于或者等于optimizer_search_limit,那么優(yōu)化器檢查所有的可能表的連接方式。
例如,涉及了五個表的查詢一共有120種(5!=5×4×3×2×1=120)可能的連接順序,所以如果參數(shù)optimizer_search_limit的值設置為5(默認值),那么優(yōu)化器就會考慮所有的這120種可能的連接順序。optimizer_search_limit參數(shù)還用來控制啟動開始連接指示(starjoinhint)的閾值。當查詢所涉及的表格數(shù)量少于參數(shù)optimizer_search_limit的設定值,開始連接指示將被設置。
82、DECODE的用法:decode(expr,value1,result1,value2,result2,....
valueN,resultN,default_result)
當expr=valueN的時候,返回resultN,否則返回default_result;
83、DUAL在ORACLE數(shù)據(jù)庫里代表什么?是一個系統(tǒng)表么?一個臨時表,由系統(tǒng)創(chuàng)建的。
84、select*fromuser_objectswherestatus"VALID";alterpackagepackage_namecompile;--編譯包
alterpackagepackage_namecompilebody;--僅編譯包體
85、從oracle數(shù)據(jù)庫中導出數(shù)據(jù),若是按用戶導出數(shù)據(jù),最后一步提示如下:Abouttoexportspecifiedusers...
Usertobeexported:(RETURNtoquit)>
此時,必須至少輸入一個用戶,如zbtel,輸入用戶并回車后,又出現(xiàn)如下提示:Usertobeexported:(RETURNtoquit)>若此時按回車鍵,則僅僅導出用戶zbtel下的數(shù)據(jù);
若不按回車,又輸入用戶zbnet,按回車,又出現(xiàn)如下提示:Usertobeexported:(RETURNtoquit)>
此時再按回車,則導出用戶zbtel、zbnet下的數(shù)據(jù);以此類推,可以導出數(shù)據(jù)庫中部同用戶的數(shù)據(jù)。
86、、dropuseruser_namecascade;
Whenauserisdropped,theuserandassociatedschemaisremovedfromthedatadictionaryandallschemaobjectscontainedintheuser"sschema,ifany,areimmediatelydropped.
Auserthatiscurrentlyconnectedtoadatabasecannotbedropped.Todropaconnecteduser,youmustfirstterminatetheuser"ssessionsusingeitherEnterpriseManager/GUI,ortheSQLcommandALTERSYSTEMwiththeKILLSESSIONclause.Iftheuser"sschemacontainsanyschemaobjects,usetheCASCADEoptiontodroptheuserandallassociatedobjectsandforeignkeysthatdependonthetablesoftheusersuccessfully.IfyoudonotspecifyCASCADEandtheuser"sschemacontainsobjects,anerrormessageisreturnedandtheuserisnotdropped.
87、viewingmemoryusingperusersession
SELECTusername,value||"bytes""Currentsessionmemory"FROMv$sessionsess,v$sesstatstat,v$statnamenameWHEREsess.sid=stat.sid
ANDstat.statistic#=name.statistic#ANDname.name="sessionmemory";
88、
鎖定一個用戶:alteruserscottaccountlock;解鎖一個用戶:alteruserscottaccountunlock;
89、給用戶授權:grantprivs_1,privs_2,…sessiontouser_name;
解除給用戶的授權:revokeprivies_1,privies_2,…sessionfromuser_name;給用戶賦予角色:grantrole_1,role_2,…touser_name;
收回賦予用戶的角色:revokerole_1,role_2,…fromuser_name;90、dynamicperformanceviews:
Dynamicperformanceviewsprovidedataoninternaldiskstructuresandmemorystructures.Theseviewscanbeselectedfrom,butneverupdatedoralteredbytheuser.
91、在sql/plus中的一種計算某個表中的一種記錄占整個表的所有記錄數(shù)的比例的方法:selecta.cnt/b.cnt
from
(selectcount(*)cntfromsubscriberwheresubsnamelike"秦%")a,(selectcount(*)cntfromsubscriber)b;
92、在提交某一事物之前,設置事物的回滾段:
SETTRANSACTIONUSEROLLBACKSEGMENTRBS_name;
注:設置回滾段必須在某個事務之前設定,并且進對當前事務發(fā)生作用,當事務提交(commit)后,設置自動取消作用。
93、查看又戶下的所有的表以及該表使用的表空間:select*fromuser_talbes;
查看系統(tǒng)所有用戶的表以及相應的表使用的表空間:
select*fromdba_talbes;
注:表user_tables和表dba_tables中的表的名稱都是大寫的。
94、用sql語句在數(shù)據(jù)庫中的某個表檢索數(shù)據(jù)時,建立了主索引的列一定要放在最前,這樣會提高系統(tǒng)的運行速度。
95、向一個已經(jīng)存在的表中增加一列,用如下命令:
altertalbetab_nameadd(column_namecolumn_type,column_namecolumn_type……);
96、改變一個已經(jīng)存在的表的列(modify):ALTERTABLEtab_name
MODIFY(column_nameDEFAULTNULL);
97、改變表的pctfree,pctused的值:
altertabletab_namepctfreevalue_apctusedvalue_b;
98、主鍵約束:主鍵列的值必須唯一;主鍵列不能又空值;
一個表只能有一個主鍵;
AprimarykeycolumncannotbeofdatatypeLONGorLONGRAW.Youcannotdesignatethesamecolumnorcombinationofcolumnsasbothaprimarykeyandauniquekeyorasbothaprimarykeyandaclusterkey.However,youcandesignatethesamecolumnorcombinationofcolumnsasbothaprimarykeyandaforeignkey.
99、用一個已經(jīng)存在的表創(chuàng)建一個新表:復制一個新表:
createtablenew_tableas(select*fromold_table);
創(chuàng)建一個包含原表部分字段的新表:
createtablenew_tableas(selectcolumn_1,column_2,column_3fromold_table);注意:用createtablenew_tableas(select*fromold_table)創(chuàng)建新表時,舊表的默認值不能利用該命令傳遞,即即使舊表的有不為空的缺省值,新表的缺省值也為空,即表的索引、約束等都不被傳遞。
100、一個關于PCTFRREE、PCTUSED、ROWChaining的簡單介紹
Twospacemanagementparameters,PCTFREEandPCTUSED,enableyoutocontroltheuseoffreespaceforinsertsofandupdatestotherowsinallthedatablocksofaparticularsegment.Youspecifytheseparameterswhencreatingoralteringatableorcluster(whichhasitsowndatasegment).YoucanalsospecifythestorageparameterPCTFREEwhencreatingoralteringanindex(whichhasitsownindexsegment).
ThePCTFREEparametersetstheminimumpercentageofadatablocktobereservedasfreespaceforpossibleupdatestorowsthatalreadyexistinthatblock.ThePCTUSEDparametersetstheminimumpercentageofablockthatcanbeusedforrowdataplusoverheadbeforenewrowswillbeaddedtotheblock.AfteradatablockisfilledtothelimitdeterminedbyPCTFREE,OracleconsiderstheblockunavailablefortheinsertionofnewrowsuntilthepercentageofthatblockfallsbelowtheparameterPCTUSED.Untilthisvalueisachieved,Oracleusesthefreespaceofthedatablockonlyforupdatestorowsalreadycontainedinthedatablock.
101、在調用一個帶有多個默認參數(shù)的過程中,如果使用按名稱對應法則,可以任意指定參數(shù)的值,不必理會參數(shù)在過程中的位置;而如果使用了按位置的對應法則,則必須按照嚴格的位置指定參數(shù)值,一旦某個參數(shù)使用了缺省值,則該參數(shù)后的所有的參數(shù)都必須是缺省值。
102、過程與函數(shù):
在執(zhí)行的結果要求有多個返回值的時候,用過程;在執(zhí)行的結構只有一個返回值的時候,可用函數(shù);
103包:包是由存儲在一起的相關對象組成的PL/SQL結構。包包括說明部分和包體,這兩部分獨立存儲在數(shù)據(jù)詞典中。
104、取消表tab_test中的col_test列的缺省值:altertabletab_testmodifty(col_testdefaultnull);允許或取消表tab_test的col_test列的值可以為空:altertabletab_testmodify(col_testnull);altertabletab_testmodify(col_testnotnull);
105、用import向一個數(shù)據(jù)庫中導入數(shù)據(jù)的時候,import指定的表在新的數(shù)據(jù)庫中必須是不存在的,若存在,需要drop掉。
106、user_triggers是系統(tǒng)的一個視圖,可以查看系統(tǒng)觸發(fā)器的詳細信息:select"altertrigger"||TRIGGER_NAME||"disable;"fromuser_triggers;select"altertrigger"||TRIGGER_NAME||"enable;"fromuser_triggers;
107、ORACEL8的TNS服務不能啟動時,首先要檢查網(wǎng)絡是否暢通,然后,進入lsnrctl,執(zhí)行stop命令,查找出錯誤的原因,然后執(zhí)行start命令,若未成功,可修改$ORACLE_HOME\\network\\admin\\listernerl.ora文件,然后再次執(zhí)行start命令。
108、用exp導出文件,若要將該文件導入到另外一個庫的某個用戶下,導出數(shù)據(jù)用戶的權限要與導入的用戶具有相同的權限或者后者的權限大于前者的權限。
109、從幾個表中通過關聯(lián)取部分字段插入一個新表的時候,可以用如下方式:
selecttab_1.col1,tab_2.col2fromtab_1,tab_2wheretab_1.col3=tab_2.col3;
用pb,把選擇出來的數(shù)據(jù)保存成文本格式,然后,仍然利用pb,retrieve將要插入的表,從菜單中選擇—Rows‖,—Import‖,選擇保存好的文本文件,打開,然后從按鈕欄上單擊—savechanges‖圖標。(注:導入數(shù)據(jù)的表必須有主鍵約束或唯一性索引)
110、從一個ORACLE數(shù)據(jù)庫直接向另外一個ORACLE數(shù)據(jù)庫中導數(shù)據(jù),方法如下:首先,建立一個數(shù)據(jù)庫鏈接,并賦予別名:
create[public]databaselink要連接的數(shù)據(jù)庫實例名connectto用戶名identifiedby密碼using數(shù)據(jù)庫鏈接字符串‘;刪除數(shù)據(jù)庫連接:
drop[public]databaselinkdatabase_link_name;注意:
1)數(shù)據(jù)庫鏈接字符串是用NET8EASYCONFIG或者直接修改TNSNAMES.ORA里定義的。數(shù)據(jù)庫參數(shù)global_name=true時要求數(shù)據(jù)庫鏈接名稱跟遠端數(shù)據(jù)庫名稱一樣。數(shù)據(jù)庫全局名稱可以用以下命令查出SELECT*FROMGLOBAL_NAME。在global_name=ture時,若數(shù)據(jù)庫名稱后面沒由域名,需要用如下語句改變global_name的名稱:alterdatabaserenameglobal_nameto數(shù)據(jù)庫名稱.域名;
UsetheALTERDATABASEstatementtochangethedomaininadatabase"sglobalname.Notethatafterthedatabaseiscreated,changingtheinitializationparameterDB_DOMAINhasnoeffectontheglobaldatabasenameorontheresolutionofdatabaselinknames.
2)要連接的數(shù)據(jù)庫實例名必須是數(shù)據(jù)庫全局名稱,即用SELECT*FROMGLOBAL_NAME選出來的字符串。
要選擇數(shù)據(jù)庫的表中的數(shù)據(jù),如下:
select*fromtable_name@要連接的數(shù)據(jù)庫實例名;表與表之間的拷貝為:insertintolocal_table_name(select*fromtable_name@數(shù)據(jù)庫鏈接名);
111、Oracel中Howtoterminateasession?altersystemkillsession"sid,serial#";
112、查看當前鏈接地數(shù)據(jù)庫:
selectglobal_namefromglobal_name;
113、查看SGA的大。簊elect*fromv$sga;
114、增加一個表空間(tablespace)的大小:alterdatabasedatafile"filename"resizennM;
或者
altertablespacetablespace_nameadddatafile"filename"sizennM;(Makesureyouspecifythefullpathnameforthefilename.)115、用sql查詢Oracle數(shù)據(jù)庫中地一些屬性:--LISTDBNAME
SELECT*FROMGLOBAL_NAME;--LISTTABLESPACES
selecttablespace_name,max_extents,pct_increase,statusfromdba_tablespaces;--LISTDBDATAFILES
columntablespace_nameformatA16;columnfile_nameformatA46;select*fromdba_data_files;--LISTTABLEASPACEUSAGE
select*from(selecttablespace_name,sum(bytes)/(1024*1024)as"free_space(M)"fromdba_free_space
groupbytablespace_name)orderby"free_space(M)";--LISTROLLBACKSEGMENT
columnsegment_nameformatA10;columntablespace_nameformatA16;columnstatusformatA10;
selectsegment_name,tablespace_name,r.status,(initial_extent/1024)"InitialExtent(K)",
(next_extent/1024)"NextExtent(K)",
max_extents"max_extents(K)",v.curext"CurExtent(K)"Fromdba_rollback_segsr,v$rollstatvWherer.segment_id=v.usn(+)orderbysegment_name;
--LISTCONTROLFILES
selectname"controlfilename"fromv$controlfile;--LISTLOGFILES
selectmember"logfilename"fromv$logfile;--LISTVERSIONOFORACLESelectversion"oracleversion"FROMProduct_component_versionWhereSUBSTR(PRODUCT,1,6)="Oracle";
--LISTCREATEDDATEANDLOG_MODEOFORACLE
SelectCreated"dbcreatedtime",Log_ModeFromV$Database;--LISTSGASIZE
selectsum(value)/(1024*1024)"sgasize"fromv$sga;--LISTCUREENTSESSIONS
selectcount(*)"currentusernumber",username"currentusername"fromv$sessiongroupbyusername;
--LISTDBUSERSANDTHEIRDEFAULTTABLESPACE
selectusername,default_tablespace,temporary_tablespacefromdba_users;--listquotaofusers
select*fromDBA_TS_QUOTASorderbyTablespace_Name,Username;--LISTREPORTTIME
selectsysdate"reporttime"fromdual;
116、RollBackSegment是ORACLE里很特殊地一種數(shù)據(jù)庫對象,它處理事務回滾操作。通常,一般需要并發(fā)ORACLE用戶數(shù)/4個RollBackSegment,用Private類型。selectname,valuefromv$parameterwhereinstr(name,"rollback")>0;創(chuàng)建一個回滾段:
createrollbacksegementrbs_05tablespacerbsstorage(initial128knext128kminextents20);
alterrollbacksegmentrbs_05online;
rollbacksegemt缺省的存儲參數(shù):pctincrease0minextents偶數(shù)maxextent跟數(shù)據(jù)庫的塊大小有關2K121
4K2498K505
針對某個特定的大事務操作,如update大量數(shù)據(jù)時,可以建一個大的rollbacksegment,如:
createrollbacksegmentrtetablespacerbsstorage(initial5Mnext5Mminextents20);
alterrollbacksegmentrteonline;
改數(shù)據(jù)庫參數(shù)文件init(oraid).ora
rollback_segments=(r01,r02,r03,r04,r05,r06,r07,r08,r09,r10,r11,r12,rte)重啟數(shù)據(jù)庫,新建的rollback_segment才生效把大事務操作指給大的回滾段rtecommit;
settransactionuserollbacksegmentrte;......;..
commit;
117、重命名一個表:
altertabletable_name_oldrenametotable_name_new;或者
renameold_table_nametonew_table_name;
118、查看當前用戶的角色(role):select*fromuser_role_privs;
119、查看當前用戶缺省表空間:
selectusername,default_tablespacefromuser_users;
120、查看當前用戶的系統(tǒng)權限和表級權限:select*fromuser_sys_privs;select*fromuser_tab_privs;
121、查看用戶下的所有表:select*fromuser_tables;
122、查看當前用戶下的所有對象:select*fromuser_objects;
123、查看某表的創(chuàng)建時間:
selectobject_name,createdfromuser_objectswhereobject_name=upper("&object_name");
124、查看某表的大小
selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segmentswheresegment_name=upper("&table_name");
(注:user_sgments中的行數(shù)=user_tables中的行數(shù)+user_indexes中的行數(shù))
125、查看ORACLE放在內存區(qū)里的表:
selecttable_name,cachefromuser_tableswhereinstr(cache,"Y")>0;
126、查看索引的個數(shù)和類別:
selectindex_name,index_type,table_namefromuser_indexesorderbytable_name;
127、查看被索引的字段:
select*fromuser_ind_columnswhereindex_name=upper("&index_name");
128、查看索引的大小:
selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segmentswheresegment_name=upper("&index_name");129、查看序列號發(fā)生器(last_number是當前值):
select*fromuser_sequences;
130、查看某表的約束條件:
selectconstraint_name,constraint_type,search_condition,r_condition_namefromuser_constraintswheretable_name=upper("&table_name");
131、查看函數(shù)、過程的狀態(tài):
selectobject_name,statusfromuser_objectwhereobject_type="FUNCTION";selectobject_name,statusfromuser_objectwhereobject_type="PROCEDRUE";
132、查找ORACLE的字符集(sys權限):
select*fromsys.props$wherename="NLS_CHARACTERSET";
133、ORACLE字符集不匹配會導致整個營業(yè)程序中凡是用到數(shù)據(jù)庫中數(shù)據(jù)帶有漢字的地方的時候,顯示大量的—?????‖字符,要改變終端的字符集,需要從注冊表中找出所有的—NLS_LANG‖,并把其字符串改為與ORACLE數(shù)據(jù)庫中對應的字符集相匹配的字符串。若是數(shù)據(jù)庫是ENGLISH字符串,則NLS_LANG對應的值為—AMERICAN_AMERICA.WE8ISO8859P1‖。
134、在PL/SQL語句中,幾個小知識點:
substr(sting,m,n)中參數(shù)的含義:
string:要從中取值的字符串;
m:從字符串中第m個字母開始取值;
n:從第m個字母開始取值直到第m+n-1個值(即取n個值);用to_date()函數(shù)格式化顯示的日期格式,如下:(1)yyyy-mm-ddhh24:mi:ss(2)MM-DD-YYYY
(3)January15,1989,11:00A.M.(4)Monthdd,YYYY,HH:MIA.M.
135、查看oracle中的數(shù)據(jù)文件:select*fromsys.dba_data_files;
136、刷新oracle數(shù)據(jù)庫中的共享池,使碎片小塊內存合并為大塊的內存,語句實現(xiàn)如下:altersystemflushshared_pool;
在執(zhí)行上述語句時,會造成系統(tǒng)性能暫時尖峰,因為對象都要重新加載,所以應該在數(shù)據(jù)庫的負載不是很大的情況下進行。
137、offiline一個表空間:
Altertablespacetablespace_nameofflinenormal;
138、SLQ/PLUS中修改用戶的密碼:
alteruseruser_nameidentifiedbynew_password;
139、Oralce中的groupby子句:
UsetheGROUPBYclausetogroupselectedrowsandreturnasinglerowofsummaryinformation.Oraclecollectseachgroupofrowsbasedonthevaluesoftheexpression(s)specifiedintheGROUPBYclause.
140、查看oracle數(shù)據(jù)庫的背景進程(v$bgprocess)select*fromv$bgprocess;
141、查看用戶對某一個表的權限(sys.dba_tab_privs):
select*fromsys.dba_tab_privswheregrantee="用戶名"andtable_name="表名";
142、unix下mail命令的用法:#mail
?n2(讀取第二封信)?n4(讀取第四封信)?+(讀取下一封信)?-(讀取上一封信)
143、創(chuàng)建同義詞:
CREATE[public]SYNONYM同義詞名稱FOR用戶名.表名@數(shù)據(jù)庫連接名;Dropanysynonym;刪除所有的同義詞Dropsynonymsynonym_name;查看同義詞:
selectsynonym_namefromuser_synonyms;
144、若OracleOPS中的一個down掉,最好OPS服務器的各個節(jié)點的數(shù)據(jù)庫同時重新啟動:
Shutdownabort;startup;
145、創(chuàng)建視圖:
createviewview_nameasselectcol1,[[col2],…]from用戶名.表名@數(shù)據(jù)庫連接名;刪除視圖:
dropviewview_name;刪除任何視圖:dropanyview;
查看視圖:
selectview_namefromuser_views;
146、建觸發(fā)器:
createorreplacetriggertrigger_name
before/afterupdateordeleteorinsertontab_namebegin……
end;
147、用DBMS_OUTPUT輸出使,若要在SQL/PLUS中顯示出來,需要先執(zhí)行如下語句:
SETSERVEROUTPUTON;
148、SQL語言共分為四大類:數(shù)據(jù)查詢語言DQL,數(shù)據(jù)操縱語言DML,數(shù)據(jù)定義語言DDL,數(shù)據(jù)控制語言DCL。1)數(shù)據(jù)查詢語言DQL
數(shù)據(jù)查詢語言DQL基本結構是由SELECT子句,F(xiàn)ROM子句,WHERE子句組成的查詢塊:SELECTFROMWHERE
2)數(shù)據(jù)操縱語言DML
數(shù)據(jù)操縱語言DML主要有三種形式:(1)插入:INSERT(2)更新:UPDATE(3)刪除:DELETE
3)數(shù)據(jù)定義語言DDL
數(shù)據(jù)定義語言DDL用來創(chuàng)建數(shù)據(jù)庫中的各種對象-----表、視圖、索引、同義詞、聚簇等如:
CREATETABLE/VIEW/INDEX/SYNONYM/CLUSTER|||||
表視圖索引同義詞簇
4)數(shù)據(jù)控制語言DCL
數(shù)據(jù)控制語言DCL用來授予或回收訪問數(shù)據(jù)庫的某種特權,并控制數(shù)據(jù)庫操縱事務發(fā)生的時間及效果,對數(shù)據(jù)庫實行監(jiān)視等。如:(1)GRANT:授權。
(2)ROLLBACK[WORK]TO[SAVEPOINT]:回退到某一點;貪L---ROLLBACK
回滾命令使數(shù)據(jù)庫狀態(tài)回到上次最后提交的狀態(tài)。其格式為:SQL>ROLLBACK;
(3)COMMIT[WORK]:提交。
在數(shù)據(jù)庫的插入、刪除和修改操作時,只有當事務在提交到數(shù)據(jù)庫時才算完成。在事務提交前,只有操作數(shù)據(jù)庫的這個人才能有權看到所做的事情,別人只有在最后提交完成后才可以看到。
提交數(shù)據(jù)有三種類型:顯式提交、隱式提交及自動提交。下面分別說明這三種類型。(1)顯式提交用COMMIT命令直接完成的提交為顯式提交。其格式為:
SQL>COMMIT;(2)隱式提交
用SQL命令間接完成的提交為隱式提交。這些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。(3)自動提交
若把AUTOCOMMIT設置為ON,則在插入、修改、刪除語句執(zhí)行后,系統(tǒng)將自動進行提交,這就是自動提交。其格式為:SQL>SETAUTOCOMMITON;
149、ORACLE用戶連接的管理
用系統(tǒng)管理員,查看當前數(shù)據(jù)庫有幾個用戶連接:SQL>selectusername,sid,serial#fromv$session;如果要停某個連接用
SQL>altersystemkillsession"sid,serial#";
如果這命令不行,找它UNIX的進程數(shù)
SQL>selectpro.spidfromv$sessionses,v$processprowhereses.sid=21andses.paddr=pro.addr;
說明:21是某個連接的sid數(shù)然后用kill命令殺此進程號。
150、ORACLE邏輯備份的SH文件1)完全備份的SH文件:exp_comp.shrq=‘date+"%m%d"‘
su-oracle-c"expsystem/managerfull=yinctype=completefile=/oracle/export/db_comp$rq.dmp"
2)累計備份的SH文件:exp_cumu.shrq=‘date+"%m%d"‘
su-oracle-c"expsystem/managerfull=yinctype=cumulativefile=/oracle/export/db_cumu$rq.dmp"
3)增量備份的SH文件:exp_incr.sh
rq=‘date+"%m%d"‘
su-oracle-c"expsystem/managerfull=yinctype=incrementalfile=/oracle/export/db_incr$rq.dmp"
151、改數(shù)據(jù)庫的啟動方式為archive歸檔方式:1)先按正常方式關閉數(shù)據(jù)庫,然后%svrmgrl
SVRMGRL>connectinternal
SVRMGRL>startupmount[database_name];
SVRMGRL>alterdatabase[database_name]archivelog;SVRMGRL>archiveloglist;
SVRMGRL>alterdatabaseopen;
2)設置數(shù)據(jù)庫開啟后自動啟動archive進程,改參數(shù)文件initoraid.ora中l(wèi)og_archive_start=true
log_archive_dest=directoryordevicenamelog_archive_format=filenameformat再重新啟動數(shù)據(jù)庫,即可
3)注意事項
有足夠的資源存放歸檔日志文件
定一個熱備份計劃,定期刪除歸檔日志文件
152、ORACLE的分布式管理
物理上存放于網(wǎng)絡的多個ORACLE數(shù)據(jù)庫,邏輯上可以看成一個單個的大數(shù)據(jù)庫。用戶可以通過網(wǎng)絡對異地數(shù)據(jù)庫中的數(shù)據(jù)同時進行存取,而服務器之間的協(xié)同處理對于工作站用戶及應用程序而言是完全透明的:開發(fā)人員無需關心網(wǎng)絡的鏈接細節(jié)、無需關心數(shù)據(jù)在網(wǎng)絡接點中的具體分布情況、也無需關心服務器之間的協(xié)調工作過程。
數(shù)據(jù)庫之間的鏈接建立在DATABASELINK上。要創(chuàng)建一個DBLINK,必須先在每個數(shù)據(jù)庫服務器上設置鏈接字符串。例如Oracle中的tnsnames.ora中有以下一條和北京的數(shù)據(jù)庫鏈接tobeijing:
鏈接字符串的設置說明
tobeijing=(description=databaselink名稱:tobeijing(address=(protocol=tcp)采用tcp/ip協(xié)議
(host=)欲鏈接主機名稱或IP地址(port=1521))網(wǎng)絡端口1521
(connect_data=(sid=oracle7)))安裝ORACLE采用的sid
然后進入系統(tǒng)管理員SQL>操作符下,運行命令:
SQL>createpublicdatabaselinkbeijingconnecttoscottidentifiedbytigerusing"tobeijing";
則創(chuàng)建了一個以scott用戶和北京數(shù)據(jù)庫的鏈接beijing,我們查詢北京的scott數(shù)據(jù):SQL>select*fromemp@beijing;
這樣就可以把深圳和北京scott用戶的數(shù)據(jù)做成一個整體來處理。
為了使有關分布式操作更透明,ORACLE數(shù)據(jù)庫里有同義詞的對象synonymSQL>createsynonymbjscottempforemp@beijing;
于是就可以用bjscottemp來替代帶@符號的分布式鏈接操作emp@beijing。查看所有的數(shù)據(jù)庫鏈接,進入系統(tǒng)管理員SQL>操作符下,運行命令:
SQL>selectowner,object_namefromdba_objectswhereobject_type="DATABASELINK";
建ORACLE快照日志:
SQL>createsnapshotlogontable3withprimarykey;建快照:
SQL>createsnapshottable3beijingrefreshforcestartwithsysdatenextsysdate+1/24withprimarykeyasselect*fromtable3@beijing;ORACLE的快照刷新方式refresh有三種:fast快速刷新,用snapshotlog,只更新時間段變動部分complete完全刷新,運行SQL語句
force自動判斷刷新,介于fast和complete之間
153、定期分析數(shù)據(jù)庫對象的腳本
ORACLE9以后如果你想用基于成本的優(yōu)化器,需要定期(每周)對數(shù)據(jù)庫里的表和索引做analyze分析。
數(shù)據(jù)庫參數(shù)文件initorasid.ora里默認的優(yōu)化器optimizer_mode=choose你要改成
optimizer_mode=first_rows(OLTP系統(tǒng))optimizer_mode=all_rows(DSS系統(tǒng))
下面是一個可以在UNIX環(huán)境自動生成分析表和索引的腳本analyze.sh(sys用戶的密碼password要根據(jù)情況修改。)su-oracle-c"sqlplussys/password"setechooff;
setfeedbackoff;
spool/oracle_backup/bin/del_analyze.sql;select
"analyzetable"||owner||"."||table_name||"deletestatistics;"
fromdba_tableswhereownernotin("SYS","SYSTEM","PERFSTAT");select
"analyzeindex"||owner||"."||index_name||"deletestatistics;"
fromdba_indexeswhereownernotin("SYS","SYSTEM","PERFSTAT");spooloff;setechoon;setfeedbackon;
spool/oracle_backup/log/del_analyze.log;@/oracle_backup/bin/del_analyze.sqlspooloff;exit;
154、OLTP和DSS不同數(shù)據(jù)庫設計OLTP數(shù)據(jù)庫DSS數(shù)據(jù)庫
OLTP=onlinetransactionprocessingDSS=datawarehousing聯(lián)機事物處理數(shù)據(jù)倉庫
例如:飛機訂票,網(wǎng)上交易,BBS等例如:各種資源資料查詢系統(tǒng)大量的在線用戶和DML操作很少的DML操作大量基于索引的查詢大量的全表掃描的查詢
用B-tree,reversekey索引,定期索引重建用bitmap索引需要較多的小的回退段需要較少的大的回退段不要用分布式查詢用分布式查詢
數(shù)據(jù)對象的存儲參數(shù)pctfree=20或者更高數(shù)據(jù)對象的存儲參數(shù)pctfree0共享程序代碼和各種變量常量字符變量和線索啟動多線索服務使用大的數(shù)據(jù)塊,db_file_mutiblock_read_count
使用較大的日志文件使用較小的日志文件listener開多個響應端口增加sort_area_size
155、在Oracle中實現(xiàn)數(shù)據(jù)庫的復制
在Internet上運作數(shù)據(jù)庫經(jīng)常會有這樣的需求:把遍布全國各城市相似的數(shù)據(jù)庫應用統(tǒng)一起來,一個節(jié)點的數(shù)據(jù)改變不僅體現(xiàn)在本地,還反映到遠端。復制技術給用戶提供了一種快速訪問共享數(shù)據(jù)的辦法。
一、實現(xiàn)數(shù)據(jù)庫復制的前提條件
1)數(shù)據(jù)庫支持高級復制功能
您可以用system身份登錄數(shù)據(jù)庫,查看v$option視圖,如果其中Advancedreplication為TRUE,則支持高級復制功能;否則不支持。2)數(shù)據(jù)庫初始化參數(shù)要求①db_domain=test.com.cn指明數(shù)據(jù)庫的域名(默認的是WORLD),這里可以用您公司的域名。②global_names=true
它要求數(shù)據(jù)庫鏈接(databaselink)和被連接的數(shù)據(jù)庫名稱一致,F(xiàn)在全局數(shù)據(jù)庫名:db_name+‖.‖+db_domain③有跟數(shù)據(jù)庫job執(zhí)行有關的參數(shù)job_queue_processes=1job_queue_interval=60distributed_transactions=10open_links=4
第一行定義SNP進程的啟動個數(shù)為n。系統(tǒng)缺省值為0,正常定義范圍為0~36,根據(jù)任務的多少,可以配置不同的數(shù)值。
第二行定義系統(tǒng)每隔N秒喚醒該進程一次。系統(tǒng)缺省值為60秒,正常范圍為1~3600秒。事實上,該進程執(zhí)行完當前任務后,就進入睡眠狀態(tài),睡眠一段時間后,由系統(tǒng)的總控負責將其喚醒。
如果修改了以上這幾個參數(shù),需要重新啟動數(shù)據(jù)庫以使參數(shù)生效。二、實現(xiàn)數(shù)據(jù)庫同步復制的步驟
假設在Internet上我們有兩個數(shù)據(jù)庫:一個叫深圳(shenzhen),一個叫北京(beijing)。具體配置見下表:
數(shù)據(jù)庫名shenzhenbeijing
數(shù)據(jù)庫域名test.com.cntest.com.cn數(shù)據(jù)庫sid號shenzhenbeijing
Listener端口號15211521
服務器ip地址10.1.1.10010.1.1.200
1)確認兩臺數(shù)據(jù)庫之間可以互相訪問,在tnsnames.ora里設置數(shù)據(jù)庫連接字符串。①例如:深圳這邊的數(shù)據(jù)庫連接字符串是以下的格式beijing=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521)))
(CONNECT_DATA=
(SERVICE_NAME=beijing)))
運行$tnspingbeijing出現(xiàn)以下提示符:
Attemptingtocontact(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n毫秒)
表明深圳數(shù)據(jù)庫可以訪問北京數(shù)據(jù)庫。
②在北京那邊也同樣配置,確認$tnspingshenzhen是通的。
2)改數(shù)據(jù)庫全局名稱,建公共的數(shù)據(jù)庫鏈接。①用system身份登錄shenzhen數(shù)據(jù)庫
SQL>alterdatabaserenameglobal_nametoshenzhen.test.com.cn;用system身份登錄beijing數(shù)據(jù)庫:
SQL>alterdatabaserenameglobal_nametobeijing.test.com.cn;②用system身份登錄shenzhen數(shù)據(jù)庫
SQL>createpublicdatabaselinkbeijing.test.com.cnusing"beijing";測試數(shù)據(jù)庫全局名稱和公共的數(shù)據(jù)庫鏈接
SQL>select*fromglobal_name@beijing.test.com.cn;返回結果為beijing.test.com.cn就對了。
用system身份登錄beijing數(shù)據(jù)庫:
SQL>createpublicdatabaselinkshenzhen.test.com.cnusing"shenzhen";測試數(shù)據(jù)庫全局名稱和公共的數(shù)據(jù)庫鏈接
SQL>select*fromglobal_name@shenzhen.test.com.cn;返回結果為shenzhen.test.com.cn就對了。3)建立管理數(shù)據(jù)庫復制的用戶repadmin,并賦權。①用system身份登錄shenzhen數(shù)據(jù)庫
SQL>createuserrepadminidentifiedbyrepadmindefaulttablespaceuserstemporarytablespacetemp;
SQL>executedbms_defer_sys.register_propagator("repadmin");SQL>grantexecuteanyproceduretorepadmin;
SQL>executedbms_repcat_admin.grant_admin_any_repgroup("repadmin");SQL>grantcommentanytabletorepadmin;SQL>grantlockanytabletorepadmin;
②同樣用system身份登錄beijing數(shù)據(jù)庫,運行以上的命令,管理數(shù)據(jù)庫復制的用戶repadmin,并賦權。
說明:repadmin用戶名和密碼可以根據(jù)用戶的需求自由命名。4)在數(shù)據(jù)庫復制的用戶repadmin下創(chuàng)建私有的數(shù)據(jù)庫鏈接。
①用repadmin身份登錄shenzhen數(shù)據(jù)庫
SQL>createdatabaselinkbeijing.test.com.cnconnecttorepadminidentifiedbyrepadmin;
測試這個私有的數(shù)據(jù)庫鏈接:
SQL>select*fromglobal_name@beijing.test.com.cn;返回結果為beijing.test.com.cn就對了。②用repadmin身份登錄beijing數(shù)據(jù)庫
SQL>createdatabaselinkshenzhen.test.com.cnconnecttorepadminidentifiedbyrepadmin;
測試這個私有的數(shù)據(jù)庫鏈接
SQL>select*fromglobal_name@shenzhen.test.com.cn;返回結果為shenzhen.test.com.cn就對了。
5)創(chuàng)建或選擇實現(xiàn)數(shù)據(jù)庫復制的用戶和對象,給用戶賦權,數(shù)據(jù)庫對象必須有主關鍵字。
假設我們用ORACLE里舉例用的scott用戶,dept表。
①用internal身份登錄shenzhen數(shù)據(jù)庫,創(chuàng)建scott用戶并賦權
SQL>createuserscottidentifiedbytigerdefaulttablespaceuserstemporarytablespacetemp;
SQL>grantconnect,resourcetoscott;SQL>grantexecuteonsys.dbms_defertoscott;②用scott身份登錄shenzhen數(shù)據(jù)庫,創(chuàng)建表deptSQL>createtabledept
(deptnonumber(2)primarykey,dnamevarchar2(14),
locvarchar2(13));
③如果數(shù)據(jù)庫對象沒有主關鍵字,可以運行以下SQL命令添加:
SQL>altertabledeptadd(constraintdept_deptno_pkprimarykey(deptno));
④在shenzhen數(shù)據(jù)庫scott用戶下創(chuàng)建主關鍵字的序列號,范圍避免和beijing的沖突。SQL>createsequencedept_noincrementby1startwith1maxvalue44cyclenocache;
(說明:maxvalue44可以根據(jù)應用程序及表結構主關鍵字定義的位數(shù)需要而定)⑤在shenzhen數(shù)據(jù)庫scott用戶下插入初始化數(shù)據(jù)
SQL>insertintodeptvalues(dept_no.nextval,"accounting","newyork");SQL>insertintodeptvalues(dept_no.nextval,"research","dallas");SQL>commit;
⑥在beijing數(shù)據(jù)庫那邊同樣運行以上①,②,③
⑦在beijing數(shù)據(jù)庫scott用戶下創(chuàng)建主關鍵字的序列號,范圍避免和shenzhen的沖突。SQL>createsequencedept_noincrementby1startwith45maxvalue99cyclenocache;
⑧在beijing數(shù)據(jù)庫scott用戶下插入初始化數(shù)據(jù)
SQL>insertintodeptvalues(dept_no.nextval,"sales","chicago");SQL>insertintodeptvalues(dept_no.nextval,"operations","boston");SQL>commit;
6)創(chuàng)建要復制的組scott_mg,加入數(shù)據(jù)庫對象,產(chǎn)生對象的復制支持①用repadmin身份登錄shenzhen數(shù)據(jù)庫,創(chuàng)建主復制組scott_mgSQL>executedbms_repcat.create_master_repgroup("scott_mg");
說明:scott_mg組名可以根據(jù)用戶的需求自由命名。②在復制組scott_mg里加入數(shù)據(jù)庫對象
SQL>executedbms_repcat.create_master_repobject(sname=>"scott",oname=>"dept",type=>"table",use_existing_object=>true,gname=>"scott_mg");參數(shù)說明:
sname實現(xiàn)數(shù)據(jù)庫復制的用戶名稱
oname實現(xiàn)數(shù)據(jù)庫復制的數(shù)據(jù)庫對象名稱
(表名長度在27個字節(jié)內,程序包名長度在24個字節(jié)內)type實現(xiàn)數(shù)據(jù)庫復制的數(shù)據(jù)庫對象類別
(支持的類別:表,索引,同義詞,觸發(fā)器,視圖,過程,函數(shù),程序包,程序包體)use_existing_objecttrue表示用主復制節(jié)點已經(jīng)存在的數(shù)據(jù)庫對象gname主復制組名
③對數(shù)據(jù)庫對象產(chǎn)生復制支持
SQL>executedbms_repcat.generate_replication_support("scott","dept","table");(說明:產(chǎn)生支持scott用戶下dept表復制的數(shù)據(jù)庫觸發(fā)器和程序包)④確認復制的組和對象已經(jīng)加入數(shù)據(jù)庫的數(shù)據(jù)字典
SQL>selectgname,master,statusfromdba_repgroup;SQL>select*fromdba_repobject;
7)創(chuàng)建主復制節(jié)點
①用repadmin身份登錄shenzhen數(shù)據(jù)庫,創(chuàng)建主復制節(jié)點SQL>executedbms_repcat.add_master_database
(gname=>"scott_mg",master=>"beijing.test.com.cn",use_existing_objects=>true,copy_rows=>false,propagation_mode=>"asynchronous");參數(shù)說明:
gname主復制組名
master加入主復制節(jié)點的另一個數(shù)據(jù)庫
use_existing_objecttrue表示用主復制節(jié)點已經(jīng)存在的數(shù)據(jù)庫對象copy_rowsfalse表示第一次開始復制時不用和主復制節(jié)點保持一致propagation_mode異步地執(zhí)行
②確認復制的任務隊列已經(jīng)加入數(shù)據(jù)庫的數(shù)據(jù)字典SQL>select*fromuser_jobs;
8)使同步組的狀態(tài)由停頓(quiesced)改為正常(normal)①用repadmin身份登錄shenzhen數(shù)據(jù)庫,運行以下命令
SQL>executedbms_repcat.resume_master_activity("scott_mg",false);②確認同步組的狀態(tài)為正常(normal)
SQL>selectgname,master,statusfromdba_repgroup;
③如果這個①命令不能使同步組的狀態(tài)為正常(normal),可能有一些停頓的復制,運行以下命令再試試(建議在緊急的時候才用):
SQL>executedbms_repcat.resume_master_activity("scott_mg",true);
9)創(chuàng)建復制數(shù)據(jù)庫的時間表,我們假設用固定的時間表:10分鐘復制一次。①用repadmin身份登錄shenzhen數(shù)據(jù)庫,運行以下命令SQL>begin
dbms_defer_sys.schedule_push(destination=>"beijing.test.com.cn",interval=>"sysdate+10/1440",next_date=>sysdate);end;
SQL>begin
dbms_defer_sys.schedule_purge(next_date=>sysdate,
interval=>"sysdate+10/1440",delay_seconds=>0,rollback_segment=>"");end;
②用repadmin身份登錄beijing數(shù)據(jù)庫,運行以下命令SQL>begin
dbms_defer_sys.schedule_push(
destination=>"shenzhen.test.com.cn",interval=>"sysdate+10/1440",next_date=>sysdate);
end;
SQL>begin
dbms_defer_sys.schedule_purge(next_date=>sysdate,
interval=>"sysdate+10/1440",delay_seconds=>0,rollback_segment=>"");end;
10)添加或修改兩邊數(shù)據(jù)庫的記錄,跟蹤復制過程
如果你想立刻看到添加或修改后數(shù)據(jù)庫的記錄的變化,可以在兩邊repadmin用戶下找到push的job_number,然后運行:SQL>execdbms_job.run(job_number);三、異常情況的處理
1)檢查復制工作正常否,可以在repadmin用戶下查詢user_jobsSQL>selectjob,this_date,next_date,what,brokenfromuser_jobs;正常的狀態(tài)有兩種:
任務閑this_date為空,next_date為當前時間后的一個時間值任務忙this_date不為空,next_date為當前時間后的一個時間值異常狀態(tài)也有兩種:
任務死鎖next_date為當前時間前的一個時間值
任務死鎖next_date為非常大的一個時間值,例如:4001-01-01這可能因為網(wǎng)絡中斷照成的死鎖解除死鎖的辦法:$psef|greporale
找到死鎖的刷新快照的進程號ora_snp*,用kill9命令刪除此進程然后進入repadmin用戶SQL>操作符下,運行命令:SQL>execdbms_job.run(job_number);
說明:job_number為用selectjob,this_date,next_date,whatfromuser_jobs;命令查出的job編號。
2)增加或減少復制組的復制對象
①停止主數(shù)據(jù)庫節(jié)點的復制動作,使同步組的狀態(tài)由正常(normal)改為停頓(quiesced)用repadmin身份登錄shenzhen數(shù)據(jù)庫,運行以下命令
SQL>executedbms_repcat.suspend_master_activity(gname=>"scott_mg");②在復制組scott_mg里加入數(shù)據(jù)庫對象,保證數(shù)據(jù)庫對象必須有主關鍵字。
SQL>executedbms_repcat.create_master_repobject(sname=>"scott",oname=>"emp",type=>"table",use_existing_object=>true,gname=>"scott_mg");
對加入的數(shù)據(jù)庫對象產(chǎn)生復制支持
SQL>executedbms_repcat.generate_replication_support("scott","emp","table");③在復制組scott_mg里刪除數(shù)據(jù)庫對象。
SQL>executedbms_repcat.drop_master_repobject("scott","dept","table");④重新使同步組的狀態(tài)由停頓(quiesced)改為正常(normal)。SQL>executedbms_repcat.resume_master_activity("scott_mg",false);
156、較好的重新啟動數(shù)據(jù)庫的步驟
因為各種各樣的原因,有時候工作數(shù)據(jù)庫需要重新啟動.我列出一個較好的操作步驟,希望對初學者有些幫助.1)停應用層的各種程序.2)停oralce的監(jiān)聽進程:
$lsnrctlstop
3)在獨占的系統(tǒng)用戶下,備份控制文件:
SQL>alterdatabasebackupcontrolfiletotrace;
4)在獨占的系統(tǒng)用戶下,手工切換重作日志文件,確保當前已修改過的數(shù)據(jù)存入文件:SQL>altersystemswitchlogfile;
5)在獨占的系統(tǒng)用戶下,運行下面SQL語句,生成殺數(shù)據(jù)庫用戶連接的kill_all_session.sql文件:
setheadoff;setfeedbackoff;
setnewpagenone;
spool/oracle_backup/bin/kill_all_session.sql
select"altersystemkillsession"""||sid||","||serial#||""";"fromv$sessionwhereusernameisnotnull;spooloff;
6)在獨占的系統(tǒng)用戶下,執(zhí)行殺數(shù)據(jù)庫用戶連接的kill_all_session.sql文件SQL>@/oracle_backup/bin/kill_all_session.sql
7)在獨占的系統(tǒng)用戶下,用immediate方式關閉數(shù)據(jù)庫:SQL>shutdownimmediate;或者
SVRMGRL>shutdownimmediate;
8)啟動oralce的監(jiān)聽進程$lsnrctlstart
9)進入獨占的系統(tǒng)用戶下,啟動oralce數(shù)據(jù)庫$sqlplus/nolog
SQL>connect/assysdbaSQL>startup;或者
$svrmgrl
SVRMGRL>connectinternal;SVRMGRL>startup;10)啟動應用層的各種程序.
157、導出創(chuàng)建非唯一索引腳本的方法
在ORACLE里用邏輯備份工具exp導出數(shù)據(jù)時,如果使用默認參數(shù),會把創(chuàng)建索引的語句一起導出來。當數(shù)據(jù)和索引小的時候,我們可能不太會計較導入時間;如果數(shù)據(jù)和索引大的時候,就應該考慮導入時間的問題了。如果在導出時選擇indexes=n的參數(shù),索引類型是非唯一(nounique)要根據(jù)ORACLE數(shù)據(jù)字典dba_indexes和dba_ind_columns里的信息生成創(chuàng)建索引的腳本。在導入完成后再根據(jù)需要運行這些創(chuàng)建索引的腳本。dba_indexes里記錄了索引類型和存儲參數(shù)等信息。
dba_ind_columns里記錄了索引的字段信息,它的結構如下:SQL>descdba_ind_columns;
namenull?type
--------------------------------------------------------------------------index_ownernotnullvarchar2(30)index_namenotnullvarchar2(30)table_ownernotnullvarchar2(30)table_namenotnullvarchar2(30)column_namevarchar2(4000)column_positionnotnullnumbercolumn_lengthnotnullnumberdescendvarchar2(4)
column_name記錄著有索引的字段,column_position標記著字段在創(chuàng)建索引時的位置,descend指索引的排序,有asc和desc兩種,而desc排序方法用的較少,本文只考慮asc的情況。步驟一:先創(chuàng)建一個視圖index_nouniq_column_num列出非系統(tǒng)用戶nonunique索引的用戶名,索引名和字段數(shù)量。
SQL>createviewindex_nouniq_column_numasselectt1.owner,t1.index_name,count(0)ascolumn_numfromdba_indexest1,dba_ind_columnst2where
t1.uniqueness="NONUNIQUE"andinstr(t1.owner,"sys")=0andt1.owner=t2.index_ownerandt1.index_name=t2.index_name
groupbyt1.owner,t1.index_nameorderbyt1.owner,column_num;
步驟二:為了處理方便,建一個索引字段臨時表index_columns,它的column_names記錄了以逗號分隔,順序排列的索引字段。SQL>createtableindex_columns(index_ownervarchar2(30)notnull,index_namevarchar2(30)notnull,column_namesvarchar2(512)notnull)
tablespaceusers;
步驟三:把只有一個字段的索引內容插入索引字段臨時表index_columns。
SQL>insertintoindex_columnsselectt1.owner,t1.index_name,t2.column_namefrom
index_nouniq_column_numt1,dba_ind_columnst2
wheret1.column_num=1andt1.owner=t2.index_ownerandt1.index_name=t2.index_nameorderbyt1.owner,t1.index_name;SQL>commit;
步驟四:把多個字段的索引內容插入索引字段臨時表index_columns。用到以下一個函數(shù)getcloumns和過程select_index_columns。函數(shù)getcloumns:createorreplacefunctiongetcloumns(index_owner1invarchar2,index_name1invarchar2,column_nums1innumber)returnvarchar2is
all_columnsvarchar2(512);total_numnumber;inumber;
cursorc1isselectcolumn_namefromdba_ind_columnswhereindex_owner=index_owner1and
index_name=index_name1orderbycolumn_position;dummyc1%rowtype;begin
total_num:=column_nums1;openc1;
fetchc1intodummy;i:=0;
whilec1%foundloopi:=i+1;
if(i=total_num)then
all_columns:=all_columns||dummy.column_name;else
all_columns:=all_columns||dummy.column_name||",";endif;
fetchc1intodummy;endloop;closec1;
returnall_columns;exception
whenno_data_foundthenreturnall_columns;end;/
過程select_index_columns:
createorreplaceprocedureselect_index_columnsis
all_columnsvarchar2(201*);
cursorc1isselect*fromindex_nouniq_column_numwherecolumn_num>=2;dummyc1%rowtype;begin
openc1;
fetchc1intodummy;whilec1%foundloop
selectgetcloumns(dummy.owner,dummy.index_name,dummy.column_num)intoall_columnsfromdual;
insertintoindex_columnsvalues(dummy.owner,dummy.index_name,all_columns);fetchc1intodummy;endloop;commit;closec1;exception
whenothersthenrollback;end;/
SQL>execselect_index_columns;
執(zhí)行select_index_columns過程就可以把多個字段的索引內容插入索引字段臨時表了。步驟五:最后運行create_now_index.sql,根據(jù)索引字段臨時表index_columns和dba_indexes在路徑/oracle_backup/log
下生成創(chuàng)建非唯一索引腳本create_index.sql。
create_now_index.sql內容:
setheadingoff;
setpagesize5000;
truncatetableindex_columns;
--把多個字段的索引內容插入索引字段臨時表execselect_index_columns;
--把只有一個字段的索引內容插入索引字段臨時表
insertintoindex_columnsselectt1.owner,t1.index_name,t2.column_name
fromindex_nouniq_column_numt1,dba_ind_columnst2
wheret1.column_num=1andt1.owner=t2.index_ownerandt1.index_name=t2.index_name
orderbyt1.owner,t1.index_name;commit;
spool/oracle_backup/log/create_index.sql;
SELECT"CREATEINDEX"||t1.owner||"."||t1.index_name||chr(10)||"ON"||t1.table_name||"("||column_names||")"||chr(10)||"TABLESPACE"||t1.tablespace_name||chr(10)||"PCTFREE"||t1.pct_free||chr(10)||"STORAGE(INITIAL"||t1.initial_extent||"NEXT"||t1.next_extent||"PCTINCREASE"||t1.pct_increase||");"||chr(10)||chr(10)FROMdba_indexest1,index_columnst2
WHEREt1.owner=t2.index_ownerandt1.index_name=t2.index_nameORDERBYt1.owner,t1.table_name;spooloff;
158、ORACLE常用的SQL語法和數(shù)據(jù)對象
一.數(shù)據(jù)控制語句(DML)部分
1)INSERT(往數(shù)據(jù)表里插入記錄的語句)
INSERTINTO表名(字段名1,字段名2,……)VALUES(值1,值2,……);INSERTINTO表名(字段名1,字段名2,……)SELECT(字段名1,字段名2,……)FROM另外的表名;
字符串類型的字段值必須用單引號括起來,例如:‘GOODDAY‘
如果字段值里包含單引號‘需要進行字符串轉換,我們把它替換成兩個單引號"".字符串類型的字段值超過定義的長度會出錯,最好在插入前進行長度校驗.日期字段的字段值可以用當前數(shù)據(jù)庫的系統(tǒng)時間SYSDATE,精確到秒或者用字符串轉換成日期型函數(shù)TO_DATE(201*-08-01‘,‘YYYY-MM-DD‘)TO_DATE()還有很多種日期格式,可以參看ORACLEDOC.年-月-日小時:分鐘:秒的格式YYYY-MM-DDHH24:MI:SS
INSERT時最大可操作的字符串長度小于等于4000個單字節(jié),如果要插入更長的字符串,請考慮字段用CLOB類型,
方法借用ORACLE里自帶的DBMS_LOB程序包.
INSERT時如果要用到從1開始自動增長的序列號,應該先建立一個序列號
CREATESEQUENCE序列號的名稱(最好是表名+序列號標記)INCREMENTBY1STARTWITH1
MAXVALUE99999CYCLENOCACHE;
其中最大的值按字段的長度來定,如果定義的自動增長的序列號NUMBER(6),最大值為999999,INSERT語句插入這個字段值為:序列號的名稱.NEXTVAL2)DELETE(刪除數(shù)據(jù)表里記錄的語句)
DELETEFROM表名WHERE條件;
注意:刪除記錄并不能釋放ORACLE里被占用的數(shù)據(jù)塊表空間.它只把那些被刪除的數(shù)據(jù)塊標成unused.如果確實要刪除一個大表里的全部記錄,可以用TRUNCATE命令,它可以釋放占用的數(shù)據(jù)塊表空間:TRUNCATETABLE表名;此操作不可回退.
3)UPDATE(修改數(shù)據(jù)表里記錄的語句)
UPDATE表名SET字段名_1=值1,字段名_2=值2,……WHERE條件;
如果修改的值N沒有賦值或定義時,將把原來的記錄內容清為NULL,最好在修改前進行非空校驗;值N超過定義的長度會出錯,最好在插入前進行長度校驗..注意事項:
A.以上SQL語句對表都加上了行級鎖,
確認完成后,必須加上事物處理結束的命令COMMIT才能正式生效,否則改變不一定寫入數(shù)據(jù)庫里.
如果想撤回這些操作,可以用命令ROLLBACK復原.
B.在運行INSERT,DELETE和UPDATE語句前最好估算一下可能操作的記錄范圍,應該把它限定在較小(一萬條記錄)范圍內,.否則ORACLE處理這個事物用到很大的回退段。
程序響應慢甚至失去響應.如果記錄數(shù)上十萬以上這些操作,可以把這些SQL語句分段分次完成,其間加上COMMIT確認事物處理.
二.數(shù)據(jù)定義(DDL)部分
1)CREATE(創(chuàng)建表,索引,視圖,同義詞,過程,函數(shù),數(shù)據(jù)庫鏈接等)ORACLE常用的字段類型有
CHAR固定長度的字符串VARCHAR2可變長度的字符串NUMBER(M,N)數(shù)字型M是位數(shù)總長度,N是小數(shù)的長度DATE日期類型
創(chuàng)建表時要把較小的不為空的字段放在前面,可能為空的字段放在后面創(chuàng)建表時可以用中文的字段名,但最好還是用英文的字段名創(chuàng)建表時可以給字段加上默認值,例如DEFAULTSYSDATE這樣每次插入和修改時,不用程序操作這個字段都能得到動作的時間創(chuàng)建表時可以給字段加上約束條件
例如不允許重復UNIQUE,關鍵字PRIMARYKEY2)ALTER(改變表,索引,視圖等)改變表的名稱
ALTERTABLE表名1TO表名2;在表的后面增加一個字段
ALTERTABLE表名ADD字段名字段名描述;修改表里字段的定義描述
ALTERTABLE表名MODIFY字段名字段名描述;給表里的字段加上約束條件
ALTERTABLE表名ADDCONSTRAINT約束名PRIMARYKEY(字段名);ALTERTABLE表名ADDCONSTRAINT約束名UNIQUE(字段名);把表放在或取出數(shù)據(jù)庫的內存區(qū)ALTERTABLE表名CACHE;ALTERTABLE表名NOCACHE;
3)DROP(刪除表,索引,視圖,同義詞,過程,函數(shù),數(shù)據(jù)庫鏈接等)刪除表和它所有的約束條件
DROPTABLE表名CASCADECONSTRAINTS;4)TRUNCATE(清空表里的所有記錄,保留表的結構)TRUNCATE表名;
三.查詢語句(SELECT)部分
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE條件;字段名可以帶入函數(shù)
例如:COUNT(*),MIN(字段名),MAX(字段名),AVG(字段名),DISTINCT(字段名),TO_CHAR(DATE字段名,"YYYY-MM-DDHH24:MI:SS")NVL(EXPR1,EXPR2)函數(shù)解釋:
IFEXPR1=NULLRETURNEXPR2ELSE
RETURNEXPR1
DECODE(AAV1R1V2R2....)函數(shù)解釋:
IFAA=V1THENRETURNR1IFAA=V2THENRETURNR2..…ELSE
RETURNNULLLPAD(char1,n,char2)函數(shù)
解釋:
字符char1按制定的位數(shù)n顯示,不足的位數(shù)用char2字符串替換左邊的空位字段名之間可以進行算術運算例如:(字段名1*字段名1)/3查詢語句可以嵌套
例如:SELECT……FROM
(SELECT……FROM表名1,[表名2,……]WHERE條件)WHERE條件2;兩個查詢語句的結果可以做集合操作
例如:并集UNION(去掉重復記錄),并集UNIONALL(不去掉重復記錄),差集MINUS,交集INTERSECT分組查詢
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]GROUPBY字段名1[HAVING條件];
兩個以上表之間的連接查詢
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE表名1.字段名=表名2.字段名[AND……];
SELECT字段名1,字段名2,……FROM表名1,[表名2,……]WHERE表名1.字段名=表名2.字段名(+)[AND……];有(+)號的字段位置自動補空值
查詢結果集的排序操作,默認的排序是升序ASC,降序是DESCSELECT字段名1,字段名2,……FROM表名1,[表名2,……]ORDERBY字段名1,字段名2DESC;字符串模糊比較的方法
INSTR(字段名,字符串‘)>0
字段名LIKE字符串%‘[%字符串%‘]
每個表都有一個隱含的字段ROWID,它標記著記錄的唯一性.四.ORACLE里常用的數(shù)據(jù)對象(SCHEMA)1)索引(INDEX)
CREATEINDEX索引名ON表名(字段1,[字段2,……]);
ALTERINDEX索引名REBUILD;
一個表的索引最好不要超過三個(特殊的大表除外),最好用單字段索引,結合SQL語句的分析執(zhí)行情況,
也可以建立多字段的組合索引和基于函數(shù)的索引
ORACLE8.1.7字符串可以索引的最大長度為1578單字節(jié)ORACLE8.0.6字符串可以索引的最大長度為758單字節(jié)2)視圖(VIEW)
CREATEVIEW視圖名ASSELECT….FROM…..;ALTERVIEW視圖名COMPILE;
視圖僅是一個SQL查詢語句,它可以把表之間復雜的關系簡潔化.3)同義詞(SYNONMY)
CREATESYNONYM同義詞名FOR表名;
CREATESYNONYM同義詞名FOR表名@數(shù)據(jù)庫鏈接名;4)數(shù)據(jù)庫鏈接(DATABASELINK)CREATEDATABASELINK數(shù)據(jù)庫鏈接名CONNECTTO用戶名IDENTIFIEDBY密碼USING數(shù)據(jù)庫連接字符串‘;
數(shù)據(jù)庫連接字符串可以用NET8EASYCONFIG或者直接修改TNSNAMES.ORA里定義.數(shù)據(jù)庫參數(shù)global_name=true時要求數(shù)據(jù)庫鏈接名稱跟遠端數(shù)據(jù)庫名稱一樣數(shù)據(jù)庫全局名稱可以用以下命令查出SELECT*FROMGLOBAL_NAME;查詢遠端數(shù)據(jù)庫里的表
SELECT……FROM表名@數(shù)據(jù)庫鏈接名;五.權限管理(DCL)語句1)GRANT賦于權限常用的系統(tǒng)權限集合有以下三個:
CONNECT(基本的連接),RESOURCE(程序開發(fā)),DBA(數(shù)據(jù)庫管理)
常用的數(shù)據(jù)對象權限有以下五個:
ALLON數(shù)據(jù)對象名,SELECTON數(shù)據(jù)對象名,UPDATEON數(shù)據(jù)對象名,DELETEON數(shù)據(jù)對象名,INSERTON數(shù)據(jù)對象名,ALTERON數(shù)據(jù)對象名GRANTCONNECT,RESOURCETO用戶名;
GRANTSELECTON表名TO用戶名;
GRANTSELECT,INSERT,DELETEON表名TO用戶名1,用戶名2;2)REVOKE回收權限
REVOKECONNECT,RESOURCEFROM用戶名;REVOKESELECTON表名FROM用戶名;
REVOKESELECT,INSERT,DELETEON表名FROM用戶名1,用戶名2;
159、ORACLE鎖的管理
ORACLE里鎖有以下幾種模式:
0:none
1:null空2:Row-S行共享(RS):共享表鎖3:Row-X行專用(RX):用于行的修改4:Share共享鎖(S):阻止其他DML操作
5:S/Row-X共享行專用(SRX):阻止其他事務操作6:exclusive專用(X):獨立訪問使用
數(shù)字越大鎖級別越高,影響的操作越多。
一般的查詢語句如select...from...;是小于2的鎖,有時會在v$locked_object出現(xiàn)。select...from...forupdate;是2的鎖。
當對話使用forupdate子串打開一個游標時,所有返回集中的數(shù)據(jù)行都將處于行級(Row-X)獨占式鎖定,其他對象只能查詢這些數(shù)據(jù)行,不能進行update、delete或select...forupdate操作。insert/update/delete...;是3的鎖。
沒有commit之前插入同樣的一條記錄會沒有反應,因為后一個3的鎖會一直等待上一個3的鎖,我們必須釋放掉上一個才能繼續(xù)工作。創(chuàng)建索引的時候也會產(chǎn)生3,4級別的鎖。
locked_mode為2,3,4不影響DML(insert,delete,update,select)操作,但DDL(alter,drop等)操作會提示ora-00054錯誤。
有主外鍵約束時update/delete...;可能會產(chǎn)生4,5的鎖。DDL語句時是6的鎖。
以DBA角色,查看當前數(shù)據(jù)庫里鎖的情況可以用如下SQL語句:selectobject_id,session_id,locked_modefromv$locked_object;selectt2.username,t2.sid,t2.serial#,t2.logon_timefromv$locked_objectt1,v$sessiont2
wheret1.session_id=t2.sidorderbyt2.logon_time;如果有長期出現(xiàn)的一列,可能是沒有釋放的鎖。
我們可以用下面SQL語句殺掉長期沒有釋放非正常的鎖:altersystemkillsession"sid,serial#";
如果出現(xiàn)了鎖的問題,某個DML操作可能等待很久沒有反應。當你采用的是直接連接數(shù)據(jù)庫的方式,不要用OS系統(tǒng)命令$killprocess_num或者$kill-9process_num來終止用戶連接,因為一個用戶進程可能產(chǎn)生一個以上的鎖,殺OS進程并不能徹底清除鎖的問題。記得在數(shù)據(jù)庫級別用altersystemkillsession"sid,serial#";殺掉不正常的鎖。
160、使用特殊索引的注意事項
在ORACLE里除了我們常用的B樹索引外,還有一些特殊索引能被使用。如:倒序索引,位映射索引,函數(shù)索引等。我根據(jù)自己的體會,列一個注意事項:1)倒序索引:
ORACLEDOC上說倒序索引比較適合于序列號產(chǎn)生的字段,如唯一編號。但是這樣的索引對于范圍的比較,如> 所以一般的自動增長的PK字段還是用常規(guī)B樹索引好一些。2)位映射索引: 適合于唯一記錄數(shù)較少,DML操作較少的字段。如歷史數(shù)據(jù)表里的類別字段。它可以減少索引存儲空間的占用,并提高訪問速度。 最好在查詢時加提示/*+first_rows*/或者/*+index(表名索引名)*/確認使用位映射索引。 3)函數(shù)索引: 需要修改數(shù)據(jù)庫里面兩個動態(tài)參數(shù):QUERY_REWRITE_ENABLED=TRUE QUERY_REWRITE_INTEGRITY=TRUSTED 函數(shù)索引才會在有提示/*+first_rows*/或者/*+index(表名索引名)*/時被使用。 161、快速轉移數(shù)據(jù)的方法 如果你要把ORACLE里的大量數(shù)據(jù)(80M以上)轉移到另外的用戶,另外的表空間里?梢杂孟旅娼榻B的快速轉移數(shù)據(jù)的方法。一、建新表的方式 createtabletarget_tablenametablespacetarget_tablespace_namenologgingpctfree10pctused60 storage(initial5Mnext5Mminextents1maxextentsunlimitedpctincrease0)asselect*fromusername.source_tablenamewhere條件;注意事項:新建的表沒有原來表的索引和默認值,只有非空(notnull)的約束素條件可以繼承過來,其它的約束條件或索引需要重新建立.二、直接插入的方法 INSERT/*+APPEND*/INTOtarget_tablename SELECT*FROMusername.source_tablenamewhere條件;COMMIT;注意事項: 用INSERT/*+APPEND*/的方法會對target_tablename產(chǎn)生級別為6的獨占鎖,如果運行此命令時還有對target_tablename的DML操作會排隊在它后面, 對OLTP系統(tǒng)在用的表操作是不合適的。 說明:這兩種方法轉移數(shù)據(jù)時沒有用SGA里數(shù)據(jù)緩沖區(qū)和事物處理的回滾段,也不寫聯(lián)機事物日志,就象數(shù)據(jù)庫裝載工具SQLLOAD一樣直接把數(shù)據(jù)寫到物理文件,速度是很快的。 162、創(chuàng)建和使用分區(qū)的表 在ORACLE里如果遇到特別大的表,可以使用分區(qū)的表來改變其應用程序的性能。以system身份登陸數(shù)據(jù)庫,查看v$option視圖,如果其中Partition為TRUE,則支持分區(qū)功能;否則不支持。Partition有基于范圍、哈希、綜和三種類型。我們用的比較多的是按范圍分區(qū)的表。我們以一個201*年開始使用的留言版做例子講述分區(qū)表的創(chuàng)建和使用:1)以system身份創(chuàng)建獨立的表空間(大小可以根據(jù)數(shù)據(jù)量的多少而定) createtablespaceg_201*q4datafile"/home/oradata/oradata/test/g_201*q4.dbf"size50Mdefaultstorage(initial100knext100kminextents1maxextentsunlimitedpctincrease1); createtablespaceg_201*q1datafile"/home/oradata/oradata/test/g_201*q1.dbf"size50Mdefaultstorage(initial100knext100kminextents1maxextentsunlimitedpctincrease1); createtablespaceg_201*q2datafile"/home/oradata/oradata/test/g_201*q2.dbf"size50Mdefaultstorage(initial100knext100kminextents1maxextentsunlimitedpctincrease1); 2)用EXPORT工具把舊數(shù)據(jù)備份在guestbook.dmp中,把原來的guestbook表改名altertableguestbookrenametoguestbookold;以guestbook身份創(chuàng)建分區(qū)的表 createtableguestbook( idnumber(16)primarykey,usernamevarchar2(64),sexvarchar2(2),emailvarchar2(256),expressionvarchar2(128),contentvarchar2(4000),timedate, ipvarchar2(64)) partitionbyrange(time) (partitiong_201*q4valueslessthan(to_date("201*-01-01","yyyy-mm-dd"))tablespaceg_201*q4 storage(initial100knext100kminextents1maxextentsunlimitedpctincrease0), 友情提示:本文中關于《Oracle使用心得》給出的范例僅供您參考拓展思維使用,Oracle使用心得:該篇文章建議您自主創(chuàng)作。 來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。
《Oracle使用心得》由互聯(lián)網(wǎng)用戶整理提供,轉載分享請保留原作者信息,謝謝!
鏈接地址:http://m.seogis.com/gongwen/747146.html