第一篇:oracle-sql語(yǔ)句-創(chuàng)建表空間、數(shù)據(jù)庫(kù)
1、查看表空間的名稱(chēng)及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0)ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;
2、查看表空間物理文件的名稱(chēng)及大小
select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0)total_space from dba_data_files order by tablespace_name;
3、查看回滾段名稱(chēng)及大小
select segment_name, tablespace_name, r.status,(initial_extent/1024)InitialExtent,(next_extent/1024)NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+)order by segment_name;
4、查看控制文件
select name from v$controlfile;獲取創(chuàng)建表空間的sql select
dbms_lob.substr(dbms_metadata.get_ddl('TABLESPACE',a.tablespace_name))from dba_tablespaces a;
SQL> select sid,serial# from v$session where username='TEST';alter system kill session '150,9019';查看被鎖的表 select object_name,machine,s.sid,s.serial#,s.event from gv$locked_object l,dba_objects o,gv$session s where l.object_id=o.object_id and l.session_id=s.sid;alter system kill session ‘sid,serial#’;
5、查看日志文件
select member from v$logfile;
6、查看表空間的使用情況
select sum(bytes)/(1024*1024)as free_space,tablespace_name from dba_free_space group by tablespace_name;
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,(B.BYTES*100)/A.BYTES “% USED”,(C.BYTES*100)/A.BYTES “% FREE” FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
Select b.tablespace_name as表空間名,b.bytes as字節(jié)數(shù),(b.bytes-sum(nvl(a.bytes,0)))as已使用,sum(nvl(a.bytes,0))as剩余空間,sum(nvl(a.bytes,0))/(b.bytes)*100 as 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_id,b.bytes order by b.file_id;
7、查看數(shù)據(jù)庫(kù)庫(kù)對(duì)象
select owner, object_type, status, count(*)count# from all_objects group by owner, object_type, status;
8、查看數(shù)據(jù)庫(kù)的版本
Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';
9.查看某個(gè)表空間內(nèi)所占空間大于某個(gè)值的段(表或索引):
Select segment_name,bytes FROM dba_segments Where bytes>10000000 AND tablespace_name='tablespace_name';10.查看所有表空間的碎片程度(值在30以下表示碎片很多)
select tablespace_name,sum(bytes),sum(free),sum(free)*100/sum(bytes)from(select
b.file_id file_ID,b.tablespace_name tablespace_name,b.bytes Bytes,(b.bytes-sum(nvl(a.bytes,0)))used,sum(nvl(a.bytes,0))free,sum(nvl(a.bytes,0))/(b.bytes)*100
Percent
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id)group by tablespace_name order by sum(free)*100/sum(bytes);11.查看自上次數(shù)據(jù)庫(kù)啟動(dòng)以來(lái)所有數(shù)據(jù)文件的讀寫(xiě)次數(shù)
select
substr(DF.NAME,1,5)Drive,DF.NAME file_name,(fs.phyblkrd+fs.phyblkwrt)
from v$filestat fs,v$datafile df
where df.file#=fs.file#;
創(chuàng)建臨時(shí)表空間: //創(chuàng)建臨時(shí)表空間
create temporary tablespace mytest tempfile 'E:/Program/oracle/product/10.1.0/oradata/orcl/mytest.dbf' size 32m autoextend on next 32m maxsize 1024m extent management local;
//創(chuàng)建數(shù)據(jù)表空間
create tablespace mytest_data logging datafile 'E:/Program/oracle/product/10.1.0/oradata/orcl/mytest_data.dbf' size 32m autoextend on next 32m maxsize 1024m extent management local;//創(chuàng)建用戶(hù)并指定表空間
create user testaccount identified by testpwd default tablespace mytest_data temporary tablespace mytest;//給用戶(hù)授予權(quán)限
grant connect,resource to testaccount;(db2:指定所有權(quán)限)12,創(chuàng)建一個(gè)用戶(hù):
CREATE USER username IDENTIFIED BY password OR IDENTIFIED EXETERNALLYOR IDENTIFIED GLOBALLY AS ‘CN=user’[DEFAULT TABLESPACE tablespace][TEMPORARY TABLESPACE temptablespace][QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace[,QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace[PROFILES profile_name][PASSWORD EXPIRE][ACCOUNT LOCK or ACCOUNT UNLOCK];
//查看數(shù)據(jù)庫(kù)中的所有用戶(hù): select * from all_users;//or select * from dba_users 13查看oracle最大連接數(shù): Select session_max,session_current,sessions_highwater,users_max from v$license;Select username,count(username)from v$session group by username;加密存儲(chǔ)過(guò)程 WRAP
INAME=D:ORACLESOURCEDATE.SQL ONAME=D:ORACLESOURCEDATA.PLD
第二篇:Oracle建表空間各種語(yǔ)句
在創(chuàng)建用戶(hù)之前,先要?jiǎng)?chuàng)建表空間:
其格式為:格式: create tablespace 表間名 datafile '數(shù)據(jù)文件名' size 表空間大小;如:
SQL> create tablespace news_tablespace datafile 'F:oracleproduct10.1.0oradatanewsnews_data.dbf' size 500M;其中'news_tablespace'是你自定義的表空間名稱(chēng),可以任意取名;'F:oracleproduct10.1.0oradatanewsnews_data.dbf'是數(shù)據(jù)文件的存放位置,'news_data.dbf'文件名也是任意取;'size 500M'是指定該數(shù)據(jù)文件的大小,也就是表空間的大小。
現(xiàn)在建好了名為'news_tablespace'的表空間,下面就可以創(chuàng)建用戶(hù)了:
其格式為:格式: create user 用戶(hù)名 identified by 密碼 default tablespace 表空間表;如:
SQL> create user news identified by news default tablespace news_tablespace;默認(rèn)表空間'default tablespace'使用上面創(chuàng)建的表空間。
接著授權(quán)給新建的用戶(hù):
SQL> grant connect,resource to news;--表示把 connect,resource權(quán)限授予news用戶(hù)
SQL> grant dba to news;--表示把 dba權(quán)限授予給news用戶(hù)
授權(quán)成功。
ok!數(shù)據(jù)庫(kù)用戶(hù)創(chuàng)建完成,現(xiàn)在你就可以使用該用戶(hù)創(chuàng)建數(shù)據(jù)表了!1.建表空間
create tablespace hoteldata datafile 'D:javaOracleproduct10.1.0oradatazznorclhoteldata.dbf'size 200m autoextend on next 10m maxsize unlimited;2.建用戶(hù) create user hotel identified by hotel default tablespace hoteldata account unlock;//identified by 后面的是密碼,前面的是用戶(hù)名 3.用戶(hù)授權(quán)
grant resource,connect,RECOVERY_CATALOG_OWNER to hotel;grant create table to hotel;alter user hotel quota unlimited ON OSDB;alter user hotel default tablespace hoteldata;4.刪除表空間
DROP TABLESPACE hoteldata INCLUDING CONTENTS AND DATAFILES;5.刪除用戶(hù)
DROP USER hotel CASCADE 6.刪除表的注意事項(xiàng)
在刪除一個(gè)表中的全部數(shù)據(jù)時(shí),須使用TRUNCATE TABLE 表名;因?yàn)橛肈ROP TABLE,DELETE * FROM 表名時(shí),TABLESPACE表空間該表的占用空間并未釋放,反復(fù)幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。oracle sqlplus腳本建庫(kù)總結(jié)(原創(chuàng))******************************************************************/--查詢(xún)表空間參數(shù)
select tablespace_name,min_extents,max_extents,pct_increase,status from dba_tablespaces;--查詢(xún)數(shù)據(jù)文件信息
--autoextensible數(shù)據(jù)庫(kù)已滿后是否自動(dòng)擴(kuò)展
select tablespace_name,bytes,autoextensible,file_name from dba_data_files;/******************************************************************/--創(chuàng)建表空間
--一般信息
--DATAFILE:數(shù)據(jù)文件目錄--存儲(chǔ)
--AUTOEXTEND:數(shù)據(jù)文件滿后自動(dòng)擴(kuò)展--ON NEXT:增量
--MAXSIZE UNLIMITED:最大容量無(wú)限制--SIZE:文件大小--存儲(chǔ)
--啟用事件記錄:LOGGING為生成從做日志并可恢復(fù),NOLOGGING為快速更新不生成日志且不可恢復(fù)
--MANAGEMENT LOCAL:本地管理--缺省:自動(dòng)分配
--UNIFORM SIZE:統(tǒng)一分配
--MANAGEMENT DICTIONARY:在字典中管理--DEFAULT STORAGE:覆蓋默認(rèn)區(qū)值--INITIAL:初始大小--NEXT :下一個(gè)大小--MINEXTENTS:最小數(shù)量
--MAXEXTENTS UNLIMITED :最大數(shù)量不限制--PCTINCREASE:增量,單位“%”--MINIMUM EXTENT:最小區(qū)大小 CREATE TABLESPACE “TEST” NOLOGGING DATAFILE 'G:ORACLEORADATAMYORACLETEST.ora' SIZE 5M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL UNIFORM SIZE 12K;--最好寫(xiě)成相對(duì)路徑,免得出錯(cuò) CREATE TABLESPACE “TEST” NOLOGGING DATAFILE '../DATABASE/TEST.ora' SIZE 5M REUSE--建議用'../oradata/TEST.ora' AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL UNIFORM SIZE 12K;CREATE TABLESPACE “TEST” LOGGING DATAFILE 'G:ORACLEORADATAMYORACLETEST.ora' SIZE 5M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE(INITIAL 1K NEXT 2K MINEXTENTS 5 MAXEXTENTS 67 PCTINCREASE 4)MINIMUM EXTENT 3K;/******************************************************************/--增加表空間, 注意這里test.ora1不能與原表空間文件名稱(chēng)相同--添加一個(gè)新的大小為5M數(shù)據(jù)庫(kù)文件test.ora1 alter tablespace mytesttablespace add datafile 'c:testtest.ora1' size 5M;/******************************************************************/--修改表空間數(shù)據(jù)庫(kù)文件屬性,myoracle為sid--將test.ora1數(shù)據(jù)庫(kù)文件改為3M,其中resize可以是ONLINE, OFFLINE, RESIZE, AUTOEXTEND 或 END/DROP alter database myoracle datafile 'c:testtest.ora1' resize 3M;alter database myoracle datafile '$ORACLE_HOME/oradata/undo102.dbf' autoextend on next 10m maxsize 500M;/******************************************************************/ /*刪除表空間
語(yǔ)法:drop tablespace tablespace_name including contents and datafiles;刪除表空間時(shí)要系統(tǒng)不會(huì)刪除表空間數(shù)據(jù)庫(kù)文件,要徹底刪除要手動(dòng)刪除 */ drop tablespace mytesttablespace including contents and datafiles;/******************************************************************/--創(chuàng)建用戶(hù)--命令:
--CREATE USER 名稱(chēng) IDENTIFIED BY 口令 DEFAULT TABLESPACE “默認(rèn)表空間名” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK--一般屬性
--DEFAULT TABLESPACE :默認(rèn)表空間名
--TEMPORARY TABLESPACE :臨時(shí)表空間名,默認(rèn)TEMP--ACCOUNT :用戶(hù)狀態(tài),默認(rèn)UNLOCK 未鎖定;LOCK 鎖定 CREATE USER “TEST” PROFILE “DEFAULT” IDENTIFIED BY “test” DEFAULT TABLESPACE “TEST” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK;--可以寫(xiě)成
CREATE USER “TEST” PROFILE “DEFAULT” IDENTIFIED BY “test” DEFAULT TABLESPACE “TEST”;/******************************************************************/--用戶(hù)授權(quán)
--grant “connect,resource,dba” to “someuser” with admin option;--WITH ADMIN OPTION :管理選項(xiàng)--授予usertest DBA權(quán)限
grant dba to “usertest” with admin option;--取消授權(quán)
--REVOKE “RESOURCE” FROM “SCOTT”;/******************************************************************/--建表
--在usertest方案下建表,注意表名不能用關(guān)鍵字,否則報(bào)錯(cuò)ORA-00903: 表名無(wú)效
--語(yǔ)法:
--create table [schema.]
--data type:表示字段的數(shù)據(jù)類(lèi)型
--default
CREATE TABLE “TEST”.“TEST”(“ID” NUMBER(10)DEFAULT 0 PRIMARY KEY, “NAME” VARCHAR2(20)NOT NULL, “INFO” VARCHAR2(1000))TABLESPACE “TEST”;/******************************************************************/--插入數(shù)據(jù)--語(yǔ)法:
--INSERT INTO tablename(column1,column2,…)VALUES(expression1,expression2,…);
INSERT INTO “TEST”.“TEST”(“ID” ,“NAME” ,“INFO”)VALUES(1 ,'testname' ,'');--也可以寫(xiě)成
INSERT INTO “TEST”.“TEST” VALUES(1 ,'testname' ,'');/******************************************************************/
第三篇:OracleSQL語(yǔ)句的執(zhí)行計(jì)劃優(yōu)化的總結(jié)
通過(guò)分析SQL語(yǔ)句的執(zhí)行計(jì)劃優(yōu)化SQL(總結(jié))
第一章、第2章 并不是很重要,是自己的一些想法,關(guān)于如何做一個(gè)穩(wěn)定、高效的應(yīng)用系統(tǒng)的一些想法。
第三章以后都是比較重要的。
附錄的內(nèi)容也是比較重要的。我常用該部分的內(nèi)容。
前言
本文檔主要介紹與SQL調(diào)整有關(guān)的內(nèi)容,內(nèi)容涉及多個(gè)方面:SQL語(yǔ)句執(zhí)行的過(guò)程、ORACLE優(yōu)化器,表之間的關(guān)聯(lián),如何得到SQL執(zhí)行計(jì)劃,如何分析執(zhí)行計(jì)劃等內(nèi)容,從而由淺到深的方式了解SQL優(yōu)化的過(guò)程,使大家逐步步入SQL調(diào)整之門(mén),然后你將發(fā)現(xiàn)??。
該文檔的不當(dāng)之處,敬請(qǐng)指出,以便進(jìn)一步改正。請(qǐng)將其發(fā)往我的信箱:xu_yu_jin2000@sina.com。
如果引用本文的內(nèi)容,請(qǐng)著名出處!
作者:徐玉金
MSN:sunny_xyj@hotmail.com
Email: xu_yu_jin2000@sina.com
日期:2005.12.12
活躍于:www.tmdps.cn;
這樣在分析時(shí)導(dǎo)致查詢(xún)出的數(shù)據(jù)過(guò)多,不方便,所以用count(a.CHANNEL||B.user_class)來(lái)代替,而且count(a.CHANNEL||B.user_class)操作本身并不占用過(guò)多的時(shí)間,所以可以接受此種替代。
利用索引查詢(xún)出SWD_BILLDETAIL表中所有記錄的方法 SQL> select count(id)from SWD_BILLDETAIL;COUNT(ID)----------
53923574 Elapsed: 00:02:166.00 Execution Plan---------------------------0
SELECT STATEMENT Optimizer=CHOOSE(Cost=18051 Card=1)1
0
SORT(AGGREGATE)2
INDEX(FAST FULL SCAN)OF 'SYS_C001851'(UNIQUE)(Cost=18051 Card=54863946)
Statistics---------------------------
0 recursive calls
1952 db block gets
158776 consistent gets
158779 physical reads
1004 redo size
295 bytes sent via SQL*Net to client
421 bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts(memory)
0 sorts(disk)rows processed
利用全表掃描從SWD_BILLDETAIL表中取出全部數(shù)據(jù)的方法。SQL> select count(user_class)from swd_billdetail;COUNT(USER_CLASS)-----------------
53923574 Elapsed: 00:11:703.07 Execution Plan---------------------------0
SELECT STATEMENT Optimizer=CHOOSE(Cost=165412 Card=1 Bytes=2)1
0
SORT(AGGREGATE)2
TABLE ACCESS(FULL)OF 'SWD_BILLDETAIL'(Cost=165412 Card=54863946 Bytes=109727892)
Statistics---------------------------
0 recursive calls
8823 db block gets
1431070 consistent gets
1419520 physical reads
0 redo size
303 bytes sent via SQL*Net to client
421 bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts(memory)
0 sorts(disk)rows processed
select count(a.CHANNEL||B.user_class)from swd_billdetail B, SUPER_USER A where A.cn = B.cn;EXEC_ORDER PLANLINE------------------------
SELECT STATEMENT OPT_MODE:CHOOSE(COST=108968,CARD=1,BYTES=21)
SORT(AGGREGATE)(COST=,CARD=1,BYTES=21)
NESTED LOOPS
(COST=108968,CARD=1213745,BYTES=25488645)
TABLE ACCESS(FULL)OF 'SWORD.SUPER_USER'(COST=2,CARD=2794,BYTES=27940)
TABLE ACCESS(BY INDEX ROWID)OF 'SWORD.SWD_BILLDETAIL'(COST=39,CARD=54863946,BYTES=603503406)
INDEX(RANGE SCAN)OF 'SWORD.IDX_DETAIL_CN'(NON-UNIQUE)(COST=3,CARD=54863946,BYTES=)
這個(gè)查詢(xún)耗費(fèi)的時(shí)間很長(zhǎng),需要1個(gè)多小時(shí)。運(yùn)行后的信息如下:
COUNT(A.CHANNEL||B.USER_CLASS)------------------------------
1186387
Elapsed: 01:107:6429.87
Execution Plan---------------------------
0
SELECT STATEMENT Optimizer=CHOOSE(Cost=108968 Card=1 Bytes=21)
0
SORT(AGGREGATE)
NESTED LOOPS(Cost=108968 Card=1213745 Bytes=25488645)
TABLE ACCESS(FULL)OF 'SUPER_USER'(Cost=2 Card=2794Bytes=27940)
TABLE ACCESS(BY INDEX ROWID)OF 'SWD_BILLDETAIL'(Cost=39 Card=54863946 Bytes=603503406)
INDEX(RANGE SCAN)OF 'IDX_DETAIL_CN'(NON-UNIQUE)(Cost=3 Card=54863946)Statistics---------------------------
0 recursive calls db block gets
1196954 consistent gets
1165726 physical reads
0 redo size
316 bytes sent via SQL*Net to client
421 bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts(memory)
0 sorts(disk)rows processed
將語(yǔ)句中加入hints,讓oracle的優(yōu)化器使用嵌套循環(huán),并且大表作為驅(qū)動(dòng)表,生成新的執(zhí)行計(jì)劃:
select /*+ ORDERED USE_NL(A)*/ count(a.CHANNEL||B.user_class)from swd_billdetail B, SUPER_USER A where A.cn = B.cn;
EXEC_ORDER PLANLINE------------------
SELECT STATEMENT OPT_MODE:CHOOSE(COST=109893304,CARD=1,BYTES=21)
SORT(AGGREGATE)(COST=,CARD=1,BYTES=21)
NESTED LOOPS
(COST=109893304,CARD=1213745,BYTES=25488645)
TABLE ACCESS(FULL)OF 'SWORD.SWD_BILLDETAIL'(COST=165412,CARD=54863946,BYTES=603503406)
TABLE ACCESS(BY INDEX ROWID)OF 'SWORD.SUPER_USER'(COST=2,CARD=2794,BYTES=27940)
INDEX(RANGE SCAN)OF 'SWORD.IDX_SUPER_USER_CN'(NON-UNIQUE)(COST=1,CARD=2794,BYTES=)
這個(gè)查詢(xún)耗費(fèi)的時(shí)間較短,才20分鐘,性能比較好。運(yùn)行后的信息如下:
COUNT(A.CHANNEL||B.USER_CLASS)------------------------------
1186387
Elapsed: 00:20:1208.87
Execution Plan---------------------------
0
SELECT STATEMENT Optimizer=CHOOSE(Cost=109893304 Card=1 Bytes=21)
0
SORT(AGGREGATE)
NESTED LOOPS(Cost=109893304 Card=1213745 Bytes=25488645)
TABLE ACCESS(FULL)OF 'SWD_BILLDETAIL'(Cost=165412 Card=54863946 Bytes=603503406)
TABLE ACCESS(BY INDEX ROWID)OF 'SUPER_USER'(Cost=2Card=2794 Bytes=27940)
INDEX(RANGE SCAN)OF 'IDX_SUPER_USER_CN'(NON-UNIQUE)(Cost=1 Card=2794)
Statistics---------------------------
0 recursive calls
8823 db block gets
56650250 consistent gets
1413250 physical reads
0 redo size
316 bytes sent via SQL*Net to client
421 bytes received via SQL*Net from client SQL*Net roundtrips to/from client sorts(memory)
0 sorts(disk)rows processed
總結(jié):
因?yàn)樯蟽蓚€(gè)查詢(xún)都是采用nested loop循環(huán),這時(shí)采用哪個(gè)表作為driving table就很重要。在第一個(gè)sql中,小表(SUPER_USER)作為driving table,符合oracle優(yōu)化的建議,但是由于SWD_BILLDETAIL表中cn列的值有很多重復(fù)的,這樣對(duì)于SUPER_USER中的每一行,都會(huì)在SWD_BILLDETAIL中有很多行,利用索引查詢(xún)出這些行的rowid很快,但是再利用這些rowid去查詢(xún)SWD_BILLDETAIL表中的user_class列的值,就比較慢了。原因是這些rowid是隨機(jī)的,而且該表比較大,不可能緩存到內(nèi)存,所以幾乎每次按照rowid查詢(xún)都需要讀物理磁盤(pán),這就是該執(zhí)行計(jì)劃比較慢的真正原因。從結(jié)果可以得到驗(yàn)證:查詢(xún)出1186387行,需要利用rowid從SWD_BILLDETAIL表中讀取1186387次,而且大部分為從硬盤(pán)上讀取。
反其道而行之,利用大表(SWD_BILLDETAIL)作為driving表,這樣大表只需要做一次全表掃描(而且會(huì)使用多塊讀功能,每次物理I/O都會(huì)讀取幾個(gè)oracle數(shù)據(jù)塊,從而一次讀取很多行,加快了執(zhí)行效率),對(duì)于讀出的每一行,都與SUPER_USER中的行進(jìn)行匹配,因?yàn)镾UPER_USER表很小,所以可以全部放到內(nèi)存中,這樣匹配操作就極快,所以該sql執(zhí)行的時(shí)間與SWD_BILLDETAIL表全表掃描的時(shí)間差不多(SWD_BILLDETAIL全表用11分鐘,而此查詢(xún)用20分鐘)。
另外:如果SWD_BILLDETAIL表中cn列的值唯一,則第一個(gè)sql執(zhí)行計(jì)劃執(zhí)行的結(jié)果或許也會(huì)不錯(cuò)。如果SUPER_USER表也很大,如500萬(wàn)行,則第2個(gè)sql執(zhí)行計(jì)劃執(zhí)行的結(jié)果反而又可能會(huì)差。其實(shí),如果SUPER_USER表很小,則第2個(gè)sql語(yǔ)句的執(zhí)行計(jì)劃如果不利用SUPER_USER表的索引,查詢(xún)或許會(huì)更快一些,我沒(méi)有對(duì)此進(jìn)行測(cè)試。
所以在進(jìn)行性能調(diào)整時(shí),具體問(wèn)題要具體分析,沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。
[center]第6章 其它注意事項(xiàng)[/center]
1.不要認(rèn)為將optimizer_mode參數(shù)設(shè)為rule,就認(rèn)為所有的語(yǔ)句都使用基于規(guī)則的優(yōu)化器
不管optimizer_mode參數(shù)如何設(shè)置,只要滿足下面3個(gè)條件,就一定使用CBO。
1)如果使用Index Only Tables(IOTs), 自動(dòng)使用CBO.2)Oracle 7.3以后,如果表上的Paralle degree option設(shè)為>1,則自動(dòng)使用CBO, 而不管是否用rule hints.3)除rlue以外的任何hints都將導(dǎo)致自動(dòng)使用CBO來(lái)執(zhí)行語(yǔ)句
總結(jié)一下,一個(gè)語(yǔ)句在運(yùn)行時(shí)到底使用何種優(yōu)化器可以從下面的表格中識(shí)別出來(lái),從上到下看你的語(yǔ)句到底是否滿足description列中描述的條件:
Description
對(duì)象是否被分析
優(yōu)化器的類(lèi)型
~~~~~~~~~~~
~~~~~~~~~~~~
~~~~~~~~~
Non-RBO Object(Eg:IOT)
n/a
#1
Parallelism > 1
n/a
#1
RULE hint
n/a
RULE
ALL_ROWS hint
n/a
ALL_ROWS
FIRST_ROWS hint
n/a
FIRST_ROWS
*Other Hint
n/a
#1
OPTIMIZER_GOAL=RULE
n/a
RULE
OPTIMIZER_GOAL=ALL_ROWS
n/a
ALL_ROWS
OPTIMIZER_GOAL=FIRST_ROWS
n/a
FIRST_ROWS
OPTIMIZER_GOAL=CHOOSE
NO
RULE
OPTIMIZER_GOAL=CHOOSE
YES
ALL_ROWS
#1 表示除非OPTIMIZER_GOAL 被設(shè)置為FIRST_ROWS,否則將使用ALL_ROWS。在PL/SQL中,則一直是使用ALL_ROWS
*Other Hint 表示是指除RULE、ALL_ROWS 和FIRST_ROWS以外的其它提示
2)當(dāng)CBO選擇了一個(gè)次優(yōu)化的執(zhí)行計(jì)劃時(shí), 不要同CBO過(guò)意不去, 先采取如下措施: a)檢查是否在表與索引上又最新的統(tǒng)計(jì)數(shù)據(jù)
b)對(duì)所有的數(shù)據(jù)進(jìn)行分析,而不是只分析一部分?jǐn)?shù)據(jù)
c)檢查是否引用的數(shù)據(jù)字典表,在oracle 10G之前,缺省情況下是不對(duì)數(shù)據(jù)字典表進(jìn)行分析的。
d)試試RBO優(yōu)化器,看語(yǔ)句執(zhí)行的效率如何,有時(shí)RBO能比CBO產(chǎn)生的更好的執(zhí)行計(jì)劃
e)如果還不行,跟蹤該語(yǔ)句的執(zhí)行,生成trace信息,然后用tkprof格式化trace信息,這樣可以得到全面的供優(yōu)化的信息。
3)假如利用附錄的方法對(duì)另一個(gè)會(huì)話進(jìn)行trace,則該會(huì)話應(yīng)該為專(zhuān)用連接
4)不要認(rèn)為綁定變量(bind variables)的缺點(diǎn)只有書(shū)寫(xiě)麻煩,而優(yōu)點(diǎn)多多,實(shí)際上使用綁定變量雖然避免了重復(fù)parse,但是它導(dǎo)致優(yōu)化器不能使用數(shù)據(jù)庫(kù)中的列統(tǒng)計(jì),從而選擇了較差的執(zhí)行計(jì)劃。而使用硬編碼的SQL則可以使用列統(tǒng)計(jì)。當(dāng)然隨著CBO功能的越來(lái)越強(qiáng),這種情況會(huì)得到改善。目前就已經(jīng)實(shí)現(xiàn)了在第一次運(yùn)行綁定變量的sql語(yǔ)句時(shí),考慮列統(tǒng)計(jì)。
5)如果一個(gè)row source 超過(guò)10000行數(shù)據(jù),則可以被認(rèn)為大row source
6)有(+)的表不是driving table,注意:如果有外聯(lián)接,而且order hint指定的順序與外聯(lián)結(jié)決定的順序沖突,則忽略order hint
7)影響CBO選擇execution plan的初始化參數(shù):
這些參數(shù)會(huì)影響cost值 ALWAYS_ANTI_JOIN B_TREE_BITMAP_PLANS COMPLEX_VIEW_MERGING DB_FILE_MULTIBLOCK_READ_COUNT FAST_FULL_SCAN_ENABLED HASH_AREA_SIZE HASH_JOIN_ENABLED HASH_MULTIBLOCK_IO_COUNT OPTIMIZER_FEATURES_ENABLE OPTIMIZER_INDEX_CACHING OPTIMIZER_INDEX_COST_ADJ OPTIMIZER_MODE> / GOAL OPTIMIZER_PERCENT_PARALLEL OPTIMIZER_SEARCH_LIMIT PARTITION_VIEW_ENABLED PUSH_JOIN_PREDICATE SORT_AREA_SIZE SORT_DIRECT_WRITES SORT_WRITE_BUFFER_SIZE STAR_TRANSFORMATION_ENABLED V733_PLANS_ENABLED CURSOR_SHARING
第四篇:VFP講稿(創(chuàng)建數(shù)據(jù)庫(kù)和表)
第二部分
數(shù)據(jù)庫(kù)的創(chuàng)建與單命令
創(chuàng)建數(shù)據(jù)庫(kù)和表
一、Visual FoxPro 6.0的配置
P28
二、項(xiàng)目及其管理器
P31
1.項(xiàng)目的概念
項(xiàng)目:是文件、數(shù)據(jù)、文檔和Visual FoxPro對(duì)象的集合,被保存為擴(kuò)展名為PJX的文件。
建立項(xiàng)目可以對(duì)相關(guān)的內(nèi)容(項(xiàng)目的各組成部分)進(jìn)行統(tǒng)一組織、統(tǒng)一管理。
項(xiàng)目管理器:是Visual FoxPro中處理數(shù)據(jù)和對(duì)象的主要組織工具,是Visual FoxPro的“控制中心”。
項(xiàng)目管理器為其各個(gè)組成部分提供了一個(gè)組織良好的分層結(jié)構(gòu)視圖。利用項(xiàng)目管理器,用戶(hù)可以創(chuàng)建、修改、移出或刪除文件。只要簡(jiǎn)單地單擊鼠標(biāo),就可以跟蹤表和查詢(xún),組織表單、報(bào)表、標(biāo)簽、代碼、位圖和其它文件。
2.項(xiàng)目的創(chuàng)建
3.一個(gè)項(xiàng)目產(chǎn)生兩個(gè)文件.PJX和.PJT。4.打開(kāi)/關(guān)閉項(xiàng)目 5.選項(xiàng)卡
三、Visual FoxPro 數(shù)據(jù)庫(kù)的基本操作
P93 1.建立數(shù)據(jù)庫(kù)
(1)在項(xiàng)目管理器中建立 *(2)從“新建”對(duì)話框中建立 *(3)用命令建立
P94(4)新建立的數(shù)據(jù)庫(kù)有三個(gè)文件
三個(gè)文件的擴(kuò)展名分別是:dbc
dct
dcx ? dbc數(shù)據(jù)庫(kù)文件的擴(kuò)展名 ? dct數(shù)據(jù)庫(kù)備注文件的擴(kuò)展名 ? dcx數(shù)據(jù)庫(kù)索引文件的擴(kuò)展名 2.打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)(1)打開(kāi)數(shù)據(jù)庫(kù) 有三種打開(kāi)方法: ? 在項(xiàng)目管理器中打開(kāi) ? *從“打開(kāi)”對(duì)話框中打開(kāi) ? *用命令打開(kāi)
OPEN DATABASE命令
P95(2)關(guān)閉數(shù)據(jù)庫(kù) CLOSE DATABASE 3.數(shù)據(jù)庫(kù)設(shè)計(jì)器
有三種打開(kāi)方法: ? 在項(xiàng)目管理器中打開(kāi) ? *從“打開(kāi)”對(duì)話框中打開(kāi) ? *用命令打開(kāi)
MODIFY DATABASE命令
P98 4刪除數(shù)據(jù)庫(kù)
有兩種刪除方法: ? 在項(xiàng)目管理器中刪除 ? *用命令刪除
DELETE DATABASE命令
P99
四、數(shù)據(jù)庫(kù)表
1.建立數(shù)據(jù)庫(kù)表
P99(1)表設(shè)計(jì)器
(2)字段名:命名規(guī)則與內(nèi)存變量的命名規(guī)則相同。可與內(nèi)存變量同名。(3)字段類(lèi)型和寬度(4)建立數(shù)據(jù)庫(kù)表產(chǎn)生的文件(5)字段有效性組框(6)用命令建立表
使用命令CREATE <表名> 有打開(kāi)的數(shù)據(jù)庫(kù)時(shí),建立的是數(shù)據(jù)庫(kù)表,否則建立的是自由表。2.修改表結(jié)構(gòu)
P102(1)插入字段(2)刪除字段(3)修改字段
(4)用命令MODIFY STRUCTURE打開(kāi)表設(shè)計(jì)器進(jìn)行修改
五、自由表
如果當(dāng)前沒(méi)有打開(kāi)數(shù)據(jù)庫(kù),創(chuàng)建的表是自由表。1.創(chuàng)建自由表。
2.自由表和數(shù)據(jù)庫(kù)表的異同。
自由表和數(shù)據(jù)庫(kù)表的設(shè)計(jì)器不同。*數(shù)據(jù)庫(kù)表有很多附加信息。3.將自由表添加到數(shù)據(jù)庫(kù)。4.從數(shù)據(jù)庫(kù)中移出表。
第五篇:Oracle數(shù)據(jù)庫(kù)創(chuàng)建表空間、建立用戶(hù)、授權(quán)、還原備份
創(chuàng)建用戶(hù)一般分四步: 第一步:創(chuàng)建臨時(shí)表空間 第二步:創(chuàng)建數(shù)據(jù)表空間 第三步:創(chuàng)建用戶(hù)并制定表空間 第四步:給用戶(hù)授予權(quán)限
--Oracle創(chuàng)建臨時(shí)表空間 如果沒(méi)有指定的臨時(shí)表空間,則可以不建 CREATE TEMPORARY TABLESPACE DB_TEMP TEMPFILE 'E:Oa DataOA_TEMP.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
--Oracle創(chuàng)建表空間 如果沒(méi)有指定的表空間,則可以不建 CREATE TABLESPACE DB_DATA LOGGING
DATAFILE 'E:Oa DataOA_DATA.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
--創(chuàng)建用戶(hù)“oa”,密碼“oa”
CREATE USER OA IDENTIFIED BY OA ACCOUNT UNLOCK
DEFAULT TABLESPACE DB_DATA TEMPORARY TABLESPACE DB_TEMP;
--授權(quán)
GRANT CONNECT,RESOURCE,DBA TO OA;
--導(dǎo)入dmp文件到數(shù)據(jù)庫(kù) 這個(gè)必須用命令窗口來(lái)執(zhí)行,不是SQL語(yǔ)句--用戶(hù)名就是要導(dǎo)入的用戶(hù),要導(dǎo)入給A,那用戶(hù)名就是A imp 用戶(hù)名/密碼@數(shù)據(jù)庫(kù)實(shí)例名 file=文件地址 full=y ignore=y;
exp system/123456@orcl file=oa.dmp owner=oa full=y;
使用expdp和impdp時(shí)應(yīng)該注重的事項(xiàng):
1、exp和imp是客戶(hù)端工具程序,它們既可以在客戶(hù)端使用,也可以在服務(wù)端使用。
2、expdp和impdp是服務(wù)端的工具程序,他們只能在oracle服務(wù)端使用,不能在客戶(hù)端使用。
3、imp只適用于exp導(dǎo)出的文件,不適用于expdp導(dǎo)出文件;impdp只適用于expdp導(dǎo)出的文件,而不適用于exp導(dǎo)出文件。
4、對(duì)于10g以上的服務(wù)器,使用exp通常不能導(dǎo)出0行數(shù)據(jù)的空表,而此時(shí)必須使用expdp導(dǎo)出。
一、準(zhǔn)備工作 1)、在備份目的路徑建立備份文件夾 Oracle不會(huì)自動(dòng)創(chuàng)建,務(wù)必手動(dòng)創(chuàng)建 例如:d:bak 2)、用sys用戶(hù)在oracle中創(chuàng)建邏輯目錄
--oracleBak_dir這個(gè)就是這個(gè)邏輯目錄的名字 SQL>create directory oracleBak_dir as ‘d:bak’;
3)、查看數(shù)據(jù)庫(kù)中的邏輯目錄 用來(lái)檢查上面兩步驟是否對(duì)應(yīng)OK SQL>select * from dba_directories;4)、授權(quán)用戶(hù)有對(duì)邏輯目錄的讀寫(xiě)權(quán)限
SQL>grant read,write on directory oracleBak_dir to 用戶(hù)名;
二、導(dǎo)出
1)導(dǎo)出用戶(hù) 登錄的用戶(hù)需要有導(dǎo)出權(quán)限
expdp 用戶(hù)名/密碼@orcl dumpfile=expdp.dmp directory=oracleBak_dir schemas=要導(dǎo)出的用戶(hù)名;2)導(dǎo)出表
expdp用戶(hù)名/密碼@orcl tables=要導(dǎo)出的表名 dumpfile=expdp.dmp(備份文件的帶后綴全名)directory=oracleBak_dir;3)按查詢(xún)條件導(dǎo)
expdp 用戶(hù)名/密碼@orcl directory=oracleBak_dir dumpfile=expdp.dmp(備份文件的帶后綴全名)tables=表名 query=’where deptno=20’(引號(hào)內(nèi)為查詢(xún)條件);4)按表空間導(dǎo)
expdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp(備份文件的帶后綴全名)tablespaces=temp,example(表空間名稱(chēng));5)導(dǎo)整個(gè)數(shù)據(jù)庫(kù)
expdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
expdp system/orcl@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
三、導(dǎo)入數(shù)據(jù) 導(dǎo)入與導(dǎo)出雷同,不做解析 1)導(dǎo)入用戶(hù)(從用戶(hù)scott導(dǎo)入到用戶(hù)scott)
impdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp schemas=scott;2)導(dǎo)入表(從scott用戶(hù)中把表dept和emp導(dǎo)入到system用戶(hù)中)
impdp system/manager@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp(原用戶(hù)下.某表)remap_schema=scott:system(從用戶(hù)scott導(dǎo)入到用戶(hù)system);3)導(dǎo)入表空間 impdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=example;4)導(dǎo)入數(shù)據(jù)庫(kù)
impdb system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;5)追加數(shù)據(jù)
impdp system/manager@orcl schemas=systemtable_exists_action
directory=dump_dir
dumpfile=expdp.dmp 終止expdp/impdp的方法:
1從dba_datapump_jobs中查job_name select * from dba_datapump_jobs;2連接到需要終止的JOB impdp U/PWD@instance_name attach=SYS_IMPORT_TABLE_01(這里attach后面的就是1查出來(lái)的job_name)3終止對(duì)應(yīng)的JOB Import> KILL_JOB 選Y
Oracle刪除用戶(hù)及表空間
以system用戶(hù)登錄,查找需要?jiǎng)h除的用戶(hù):--查找用戶(hù)
select * from dba_users;--查找工作空間的路徑
select * from dba_data_files;
--刪除用戶(hù)
drop user 用戶(hù)名稱(chēng) cascade;--刪除表空間
drop tablespace 表空間名稱(chēng) including contents and datafiles cascade constraint;例如:刪除用戶(hù)名成為L(zhǎng)YK,表空間名稱(chēng)為L(zhǎng)YK--刪除用戶(hù),及級(jí)聯(lián)關(guān)系也刪除掉 drop user LYK cascade;--刪除表空間,及對(duì)應(yīng)的表空間文件也刪除掉
drop tablespace LYK including contents and datafiles cascade constraint;