第一篇:oracle-sql語句-創(chuàng)建表空間、數據庫
1、查看表空間的名稱及大小
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、查看表空間物理文件的名稱及大小
select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0)total_space from dba_data_files order by tablespace_name;
3、查看回滾段名稱及大小
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é)數,(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、查看數據庫庫對象
select owner, object_type, status, count(*)count# from all_objects group by owner, object_type, status;
8、查看數據庫的版本
Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';
9.查看某個表空間內所占空間大于某個值的段(表或索引):
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.查看自上次數據庫啟動以來所有數據文件的讀寫次數
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)建臨時表空間: //創(chuàng)建臨時表空間
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)建數據表空間
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)建用戶并指定表空間
create user testaccount identified by testpwd default tablespace mytest_data temporary tablespace mytest;//給用戶授予權限
grant connect,resource to testaccount;(db2:指定所有權限)12,創(chuàng)建一個用戶:
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];
//查看數據庫中的所有用戶: select * from all_users;//or select * from dba_users 13查看oracle最大連接數: Select session_max,session_current,sessions_highwater,users_max from v$license;Select username,count(username)from v$session group by username;加密存儲過程 WRAP
INAME=D:ORACLESOURCEDATE.SQL ONAME=D:ORACLESOURCEDATA.PLD
第二篇:Oracle建表空間各種語句
在創(chuàng)建用戶之前,先要創(chuàng)建表空間:
其格式為:格式: create tablespace 表間名 datafile '數據文件名' size 表空間大小;如:
SQL> create tablespace news_tablespace datafile 'F:oracleproduct10.1.0oradatanewsnews_data.dbf' size 500M;其中'news_tablespace'是你自定義的表空間名稱,可以任意取名;'F:oracleproduct10.1.0oradatanewsnews_data.dbf'是數據文件的存放位置,'news_data.dbf'文件名也是任意取;'size 500M'是指定該數據文件的大小,也就是表空間的大小。
現在建好了名為'news_tablespace'的表空間,下面就可以創(chuàng)建用戶了:
其格式為:格式: create user 用戶名 identified by 密碼 default tablespace 表空間表;如:
SQL> create user news identified by news default tablespace news_tablespace;默認表空間'default tablespace'使用上面創(chuàng)建的表空間。
接著授權給新建的用戶:
SQL> grant connect,resource to news;--表示把 connect,resource權限授予news用戶
SQL> grant dba to news;--表示把 dba權限授予給news用戶
授權成功。
ok!數據庫用戶創(chuàng)建完成,現在你就可以使用該用戶創(chuàng)建數據表了!1.建表空間
create tablespace hoteldata datafile 'D:javaOracleproduct10.1.0oradatazznorclhoteldata.dbf'size 200m autoextend on next 10m maxsize unlimited;2.建用戶 create user hotel identified by hotel default tablespace hoteldata account unlock;//identified by 后面的是密碼,前面的是用戶名 3.用戶授權
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.刪除用戶
DROP USER hotel CASCADE 6.刪除表的注意事項
在刪除一個表中的全部數據時,須使用TRUNCATE TABLE 表名;因為用DROP TABLE,DELETE * FROM 表名時,TABLESPACE表空間該表的占用空間并未釋放,反復幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。oracle sqlplus腳本建庫總結(原創(chuàng))******************************************************************/--查詢表空間參數
select tablespace_name,min_extents,max_extents,pct_increase,status from dba_tablespaces;--查詢數據文件信息
--autoextensible數據庫已滿后是否自動擴展
select tablespace_name,bytes,autoextensible,file_name from dba_data_files;/******************************************************************/--創(chuàng)建表空間
--一般信息
--DATAFILE:數據文件目錄--存儲
--AUTOEXTEND:數據文件滿后自動擴展--ON NEXT:增量
--MAXSIZE UNLIMITED:最大容量無限制--SIZE:文件大小--存儲
--啟用事件記錄:LOGGING為生成從做日志并可恢復,NOLOGGING為快速更新不生成日志且不可恢復
--MANAGEMENT LOCAL:本地管理--缺?。鹤詣臃峙?/p>
--UNIFORM SIZE:統一分配
--MANAGEMENT DICTIONARY:在字典中管理--DEFAULT STORAGE:覆蓋默認區(qū)值--INITIAL:初始大小--NEXT :下一個大小--MINEXTENTS:最小數量
--MAXEXTENTS UNLIMITED :最大數量不限制--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;--最好寫成相對路徑,免得出錯 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不能與原表空間文件名稱相同--添加一個新的大小為5M數據庫文件test.ora1 alter tablespace mytesttablespace add datafile 'c:testtest.ora1' size 5M;/******************************************************************/--修改表空間數據庫文件屬性,myoracle為sid--將test.ora1數據庫文件改為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;/******************************************************************/ /*刪除表空間
語法:drop tablespace tablespace_name including contents and datafiles;刪除表空間時要系統不會刪除表空間數據庫文件,要徹底刪除要手動刪除 */ drop tablespace mytesttablespace including contents and datafiles;/******************************************************************/--創(chuàng)建用戶--命令:
--CREATE USER 名稱 IDENTIFIED BY 口令 DEFAULT TABLESPACE “默認表空間名” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK--一般屬性
--DEFAULT TABLESPACE :默認表空間名
--TEMPORARY TABLESPACE :臨時表空間名,默認TEMP--ACCOUNT :用戶狀態(tài),默認UNLOCK 未鎖定;LOCK 鎖定 CREATE USER “TEST” PROFILE “DEFAULT” IDENTIFIED BY “test” DEFAULT TABLESPACE “TEST” TEMPORARY TABLESPACE “TEMP” ACCOUNT UNLOCK;--可以寫成
CREATE USER “TEST” PROFILE “DEFAULT” IDENTIFIED BY “test” DEFAULT TABLESPACE “TEST”;/******************************************************************/--用戶授權
--grant “connect,resource,dba” to “someuser” with admin option;--WITH ADMIN OPTION :管理選項--授予usertest DBA權限
grant dba to “usertest” with admin option;--取消授權
--REVOKE “RESOURCE” FROM “SCOTT”;/******************************************************************/--建表
--在usertest方案下建表,注意表名不能用關鍵字,否則報錯ORA-00903: 表名無效
--語法:
--create table [schema.]
--data type:表示字段的數據類型
--default
CREATE TABLE “TEST”.“TEST”(“ID” NUMBER(10)DEFAULT 0 PRIMARY KEY, “NAME” VARCHAR2(20)NOT NULL, “INFO” VARCHAR2(1000))TABLESPACE “TEST”;/******************************************************************/--插入數據--語法:
--INSERT INTO tablename(column1,column2,…)VALUES(expression1,expression2,…);
INSERT INTO “TEST”.“TEST”(“ID” ,“NAME” ,“INFO”)VALUES(1 ,'testname' ,'');--也可以寫成
INSERT INTO “TEST”.“TEST” VALUES(1 ,'testname' ,'');/******************************************************************/
第三篇:OracleSQL語句的執(zhí)行計劃優(yōu)化的總結
通過分析SQL語句的執(zhí)行計劃優(yōu)化SQL(總結)
第一章、第2章 并不是很重要,是自己的一些想法,關于如何做一個穩(wěn)定、高效的應用系統的一些想法。
第三章以后都是比較重要的。
附錄的內容也是比較重要的。我常用該部分的內容。
前言
本文檔主要介紹與SQL調整有關的內容,內容涉及多個方面:SQL語句執(zhí)行的過程、ORACLE優(yōu)化器,表之間的關聯,如何得到SQL執(zhí)行計劃,如何分析執(zhí)行計劃等內容,從而由淺到深的方式了解SQL優(yōu)化的過程,使大家逐步步入SQL調整之門,然后你將發(fā)現??。
該文檔的不當之處,敬請指出,以便進一步改正。請將其發(fā)往我的信箱:xu_yu_jin2000@sina.com。
如果引用本文的內容,請著名出處!
作者:徐玉金
MSN:sunny_xyj@hotmail.com
Email: xu_yu_jin2000@sina.com
日期:2005.12.12
活躍于:004km.cn;
這樣在分析時導致查詢出的數據過多,不方便,所以用count(a.CHANNEL||B.user_class)來代替,而且count(a.CHANNEL||B.user_class)操作本身并不占用過多的時間,所以可以接受此種替代。
利用索引查詢出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表中取出全部數據的方法。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=)
這個查詢耗費的時間很長,需要1個多小時。運行后的信息如下:
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
將語句中加入hints,讓oracle的優(yōu)化器使用嵌套循環(huán),并且大表作為驅動表,生成新的執(zhí)行計劃:
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=)
這個查詢耗費的時間較短,才20分鐘,性能比較好。運行后的信息如下:
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
總結:
因為上兩個查詢都是采用nested loop循環(huán),這時采用哪個表作為driving table就很重要。在第一個sql中,小表(SUPER_USER)作為driving table,符合oracle優(yōu)化的建議,但是由于SWD_BILLDETAIL表中cn列的值有很多重復的,這樣對于SUPER_USER中的每一行,都會在SWD_BILLDETAIL中有很多行,利用索引查詢出這些行的rowid很快,但是再利用這些rowid去查詢SWD_BILLDETAIL表中的user_class列的值,就比較慢了。原因是這些rowid是隨機的,而且該表比較大,不可能緩存到內存,所以幾乎每次按照rowid查詢都需要讀物理磁盤,這就是該執(zhí)行計劃比較慢的真正原因。從結果可以得到驗證:查詢出1186387行,需要利用rowid從SWD_BILLDETAIL表中讀取1186387次,而且大部分為從硬盤上讀取。
反其道而行之,利用大表(SWD_BILLDETAIL)作為driving表,這樣大表只需要做一次全表掃描(而且會使用多塊讀功能,每次物理I/O都會讀取幾個oracle數據塊,從而一次讀取很多行,加快了執(zhí)行效率),對于讀出的每一行,都與SUPER_USER中的行進行匹配,因為SUPER_USER表很小,所以可以全部放到內存中,這樣匹配操作就極快,所以該sql執(zhí)行的時間與SWD_BILLDETAIL表全表掃描的時間差不多(SWD_BILLDETAIL全表用11分鐘,而此查詢用20分鐘)。
另外:如果SWD_BILLDETAIL表中cn列的值唯一,則第一個sql執(zhí)行計劃執(zhí)行的結果或許也會不錯。如果SUPER_USER表也很大,如500萬行,則第2個sql執(zhí)行計劃執(zhí)行的結果反而又可能會差。其實,如果SUPER_USER表很小,則第2個sql語句的執(zhí)行計劃如果不利用SUPER_USER表的索引,查詢或許會更快一些,我沒有對此進行測試。
所以在進行性能調整時,具體問題要具體分析,沒有一個統一的標準。
[center]第6章 其它注意事項[/center]
1.不要認為將optimizer_mode參數設為rule,就認為所有的語句都使用基于規(guī)則的優(yōu)化器
不管optimizer_mode參數如何設置,只要滿足下面3個條件,就一定使用CBO。
1)如果使用Index Only Tables(IOTs), 自動使用CBO.2)Oracle 7.3以后,如果表上的Paralle degree option設為>1,則自動使用CBO, 而不管是否用rule hints.3)除rlue以外的任何hints都將導致自動使用CBO來執(zhí)行語句
總結一下,一個語句在運行時到底使用何種優(yōu)化器可以從下面的表格中識別出來,從上到下看你的語句到底是否滿足description列中描述的條件:
Description
對象是否被分析
優(yōu)化器的類型
~~~~~~~~~~~
~~~~~~~~~~~~
~~~~~~~~~
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 被設置為FIRST_ROWS,否則將使用ALL_ROWS。在PL/SQL中,則一直是使用ALL_ROWS
*Other Hint 表示是指除RULE、ALL_ROWS 和FIRST_ROWS以外的其它提示
2)當CBO選擇了一個次優(yōu)化的執(zhí)行計劃時, 不要同CBO過意不去, 先采取如下措施: a)檢查是否在表與索引上又最新的統計數據
b)對所有的數據進行分析,而不是只分析一部分數據
c)檢查是否引用的數據字典表,在oracle 10G之前,缺省情況下是不對數據字典表進行分析的。
d)試試RBO優(yōu)化器,看語句執(zhí)行的效率如何,有時RBO能比CBO產生的更好的執(zhí)行計劃
e)如果還不行,跟蹤該語句的執(zhí)行,生成trace信息,然后用tkprof格式化trace信息,這樣可以得到全面的供優(yōu)化的信息。
3)假如利用附錄的方法對另一個會話進行trace,則該會話應該為專用連接
4)不要認為綁定變量(bind variables)的缺點只有書寫麻煩,而優(yōu)點多多,實際上使用綁定變量雖然避免了重復parse,但是它導致優(yōu)化器不能使用數據庫中的列統計,從而選擇了較差的執(zhí)行計劃。而使用硬編碼的SQL則可以使用列統計。當然隨著CBO功能的越來越強,這種情況會得到改善。目前就已經實現了在第一次運行綁定變量的sql語句時,考慮列統計。
5)如果一個row source 超過10000行數據,則可以被認為大row source
6)有(+)的表不是driving table,注意:如果有外聯接,而且order hint指定的順序與外聯結決定的順序沖突,則忽略order hint
7)影響CBO選擇execution plan的初始化參數:
這些參數會影響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)建數據庫和表)
第二部分
數據庫的創(chuàng)建與單命令
創(chuàng)建數據庫和表
一、Visual FoxPro 6.0的配置
P28
二、項目及其管理器
P31
1.項目的概念
項目:是文件、數據、文檔和Visual FoxPro對象的集合,被保存為擴展名為PJX的文件。
建立項目可以對相關的內容(項目的各組成部分)進行統一組織、統一管理。
項目管理器:是Visual FoxPro中處理數據和對象的主要組織工具,是Visual FoxPro的“控制中心”。
項目管理器為其各個組成部分提供了一個組織良好的分層結構視圖。利用項目管理器,用戶可以創(chuàng)建、修改、移出或刪除文件。只要簡單地單擊鼠標,就可以跟蹤表和查詢,組織表單、報表、標簽、代碼、位圖和其它文件。
2.項目的創(chuàng)建
3.一個項目產生兩個文件.PJX和.PJT。4.打開/關閉項目 5.選項卡
三、Visual FoxPro 數據庫的基本操作
P93 1.建立數據庫
(1)在項目管理器中建立 *(2)從“新建”對話框中建立 *(3)用命令建立
P94(4)新建立的數據庫有三個文件
三個文件的擴展名分別是:dbc
dct
dcx ? dbc數據庫文件的擴展名 ? dct數據庫備注文件的擴展名 ? dcx數據庫索引文件的擴展名 2.打開和關閉數據庫(1)打開數據庫 有三種打開方法: ? 在項目管理器中打開 ? *從“打開”對話框中打開 ? *用命令打開
OPEN DATABASE命令
P95(2)關閉數據庫 CLOSE DATABASE 3.數據庫設計器
有三種打開方法: ? 在項目管理器中打開 ? *從“打開”對話框中打開 ? *用命令打開
MODIFY DATABASE命令
P98 4刪除數據庫
有兩種刪除方法: ? 在項目管理器中刪除 ? *用命令刪除
DELETE DATABASE命令
P99
四、數據庫表
1.建立數據庫表
P99(1)表設計器
(2)字段名:命名規(guī)則與內存變量的命名規(guī)則相同。可與內存變量同名。(3)字段類型和寬度(4)建立數據庫表產生的文件(5)字段有效性組框(6)用命令建立表
使用命令CREATE <表名> 有打開的數據庫時,建立的是數據庫表,否則建立的是自由表。2.修改表結構
P102(1)插入字段(2)刪除字段(3)修改字段
(4)用命令MODIFY STRUCTURE打開表設計器進行修改
五、自由表
如果當前沒有打開數據庫,創(chuàng)建的表是自由表。1.創(chuàng)建自由表。
2.自由表和數據庫表的異同。
自由表和數據庫表的設計器不同。*數據庫表有很多附加信息。3.將自由表添加到數據庫。4.從數據庫中移出表。
第五篇:Oracle數據庫創(chuàng)建表空間、建立用戶、授權、還原備份
創(chuàng)建用戶一般分四步: 第一步:創(chuàng)建臨時表空間 第二步:創(chuàng)建數據表空間 第三步:創(chuàng)建用戶并制定表空間 第四步:給用戶授予權限
--Oracle創(chuàng)建臨時表空間 如果沒有指定的臨時表空間,則可以不建 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)建表空間 如果沒有指定的表空間,則可以不建 CREATE TABLESPACE DB_DATA LOGGING
DATAFILE 'E:Oa DataOA_DATA.DBF'
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
--創(chuàng)建用戶“oa”,密碼“oa”
CREATE USER OA IDENTIFIED BY OA ACCOUNT UNLOCK
DEFAULT TABLESPACE DB_DATA TEMPORARY TABLESPACE DB_TEMP;
--授權
GRANT CONNECT,RESOURCE,DBA TO OA;
--導入dmp文件到數據庫 這個必須用命令窗口來執(zhí)行,不是SQL語句--用戶名就是要導入的用戶,要導入給A,那用戶名就是A imp 用戶名/密碼@數據庫實例名 file=文件地址 full=y ignore=y;
exp system/123456@orcl file=oa.dmp owner=oa full=y;
使用expdp和impdp時應該注重的事項:
1、exp和imp是客戶端工具程序,它們既可以在客戶端使用,也可以在服務端使用。
2、expdp和impdp是服務端的工具程序,他們只能在oracle服務端使用,不能在客戶端使用。
3、imp只適用于exp導出的文件,不適用于expdp導出文件;impdp只適用于expdp導出的文件,而不適用于exp導出文件。
4、對于10g以上的服務器,使用exp通常不能導出0行數據的空表,而此時必須使用expdp導出。
一、準備工作 1)、在備份目的路徑建立備份文件夾 Oracle不會自動創(chuàng)建,務必手動創(chuàng)建 例如:d:bak 2)、用sys用戶在oracle中創(chuàng)建邏輯目錄
--oracleBak_dir這個就是這個邏輯目錄的名字 SQL>create directory oracleBak_dir as ‘d:bak’;
3)、查看數據庫中的邏輯目錄 用來檢查上面兩步驟是否對應OK SQL>select * from dba_directories;4)、授權用戶有對邏輯目錄的讀寫權限
SQL>grant read,write on directory oracleBak_dir to 用戶名;
二、導出
1)導出用戶 登錄的用戶需要有導出權限
expdp 用戶名/密碼@orcl dumpfile=expdp.dmp directory=oracleBak_dir schemas=要導出的用戶名;2)導出表
expdp用戶名/密碼@orcl tables=要導出的表名 dumpfile=expdp.dmp(備份文件的帶后綴全名)directory=oracleBak_dir;3)按查詢條件導
expdp 用戶名/密碼@orcl directory=oracleBak_dir dumpfile=expdp.dmp(備份文件的帶后綴全名)tables=表名 query=’where deptno=20’(引號內為查詢條件);4)按表空間導
expdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp(備份文件的帶后綴全名)tablespaces=temp,example(表空間名稱);5)導整個數據庫
expdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
expdp system/orcl@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
三、導入數據 導入與導出雷同,不做解析 1)導入用戶(從用戶scott導入到用戶scott)
impdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp schemas=scott;2)導入表(從scott用戶中把表dept和emp導入到system用戶中)
impdp system/manager@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp(原用戶下.某表)remap_schema=scott:system(從用戶scott導入到用戶system);3)導入表空間 impdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=example;4)導入數據庫
impdb system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;5)追加數據
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查出來的job_name)3終止對應的JOB Import> KILL_JOB 選Y
Oracle刪除用戶及表空間
以system用戶登錄,查找需要刪除的用戶:--查找用戶
select * from dba_users;--查找工作空間的路徑
select * from dba_data_files;
--刪除用戶
drop user 用戶名稱 cascade;--刪除表空間
drop tablespace 表空間名稱 including contents and datafiles cascade constraint;例如:刪除用戶名成為LYK,表空間名稱為LYK--刪除用戶,及級聯關系也刪除掉 drop user LYK cascade;--刪除表空間,及對應的表空間文件也刪除掉
drop tablespace LYK including contents and datafiles cascade constraint;