1.查看sql
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; 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.***$TS_***AIL A,SYS.***$TS_USED B,SYS.***$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; 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 Created, Log_Mode, Log_Mode From V$Database; 10、捕捉運行好久的SQL column username format a12 column opname format a16 column progress format a8 select username,sid,opname, round(sofar*100 / totalwork,0) || ''%'' as progress, time_remaining,sql_text from v$session_longops , v$sql where time_remaining <> 0 and sql_address = address and sql_hash_value = hash_value 11。查看數據表的參數信息 SELECT partition_name, high_value, high_value_length, tablespace_name, pct_free, pct_used, ini_trans, max_trans, initial_extent, next_extent, min_extent, max_extent, pct_increase, FREELISTS, freelist_groups, LOGGING, BUFFER_POOL, num_rows, blocks, empty_blocks, ***g_space, chain_cnt, ***g_row_len, sample_size, last_analyzed FROM dba_tab_partitions --WHERE table_name = :tname AND table_owner = :towner ORDER BY partition_position 12.查看還沒提交的事務 select * from v$locked_object; select * from v$transaction;
13。查找object爲哪些進程所用 select p.spid, s.sid, s.serial# serial_num, s.username user_name, a.type object_type,s.osuser os_user_name, a.owner, a.object object_name,decode(sign(48 - command), 1, to_char(command),''Action Code #'' || to_char(command) ) action, p.program oracle_process, s.terminal terminal, s.program program, s.status session_status from v$session s, v$access a, v$process p where s.paddr = p.addr and s.type = ''USER'' and a.sid = s.sid and a.object=''SUBSCRIBER_ATTR'' order by s.username, s.osuser 14。回滾段查看 select rownum, sys.dba_rollback_segs.segment_name Name, v$rollstat.extents Extents, v$rollstat.rssize Size_in_Bytes, v$rollstat.xacts XActs, v$rollstat.gets Gets, v$rollstat.waits Waits, v$rollstat.writes Writes, sys.dba_rollback_segs.status status from v$rollstat, sys.dba_rollback_segs, v$rollname where v$rollname.name(+) = sys.dba_rollback_segs.segment_name and v$rollstat.usn(+) = v$rollname.usn order by rownum 15。耗資源的進程(top session) select s.schemaname schema_name, decode(sign(48 - command), 1, to_char(command), '' Action Code # '' || to_char(command)) action, status session_status, s.osuser os_user_name, s.sid, p.spid, s.serial# serial_num, nvl(s.username, '' [ Oracle process ] '') user_name, s.terminal terminal, s.program program, st.value criteria_value from v$sesstat st, v$session s, v$process p where st.sid = s.sid and st.statistic# = to_number('' 38 '') and ('' ALL '' = '' ALL '' or s.status = '' ALL '') and p.addr = s.paddr order by st.value desc, p.spid asc, s.username asc, s.osuser asc 16。查看鎖(lock)狀況 select /*+ RULE */ ls.osuser os_user_name, ls.username user_name, decode(ls.type, '' RW '', '' Row wait enqueue lock '', '' TM '', '' DML enqueue lock '', '' TX '', '' Transaction enqueue lock '', '' UL '', '' User supplied lock '') lock_type, o.object_name object, decode(ls.lmode, 1, null, 2, '' Row Share '', 3, '' Row Exclusive '', 4, '' Share '', 5, '' Share Row Exclusive '', 6, '' Exclusive '', null) lock_mode, o.owner, ls.sid, ls.serial# serial_num, ls.id1, ls.id2 from sys.dba_objects o, (select s.osuser, s.username, l.type,l.lmode, s.sid, s.serial#,l.id1,l.id2 from v$session s, v$lock l where s.sid = l.sid) ls where o.object_id = ls.id1 and o.owner <> '' SYS '' order by o.owner, o.object_name 17。查看等待(wait)狀況 SELECT v$waitstat.class, v$waitstat.count count, SUM(v$sysstat.value) sum_value FROM v$waitstat, v$sysstat WHERE v$sysstat.name IN ('' db block gets '', '' consistent gets '') group by v$waitstat.class, v$waitstat.count 18。查看sga狀況 SELECT NAME, BYTES FROM SYS.V_$SGASTAT ORDER BY NAME ASC 19。查看catched object SELECT owner, name, db_link, namespace, type,harable_mem, loads, executions, locks, pins, kept FROM v$db_object_cache 20。查看V$SQLAREA SELECT SQL_TEXT, SHARABLE_MEM, PERSISTENT_MEM, RUNTIME_MEM, SORTS, VERSION_COUNT, LOADED_VERSIONS, OPEN_VERSIONS, USERS_OPENING, EXECUTIONS, USERS_EXECUTING, LOADS, FIRST_LOAD_TIME, INVALIDATIONS, PARSE_CALLS, DISK_READS, BUFFER_GETS, ROWS_PROCESSED FROM V$SQLAREA 21。查看object分類數量 select decode (o.type#,1,''INDEX'' , 2,''TABLE'' , 3 , ''CLUSTER'' , 4, ''VIEW'' , 5 , ''SYNONYM'' , 6 , ''SEQUENCE'' , ''OTHER'' ) object_type , count(*) quantity from sys.obj$ o where o.type# > 1 group by decode (o.type#,1,''INDEX'' , 2,''TABLE'' , 3 , ''CLUSTER'' , 4, ''VIEW'' , 5 , ''SYNONYM'' , 6 , ''SEQUENCE'' , ''OTHER'' ) union select ''COLUMN'' , count(*) from sys.col$ union select ''DB LINK'' , count(*)
from 22。按用戶查看object種類 select u.name schema, sum(decode(o.type#, 1, 1, NULL)) indexes, sum(decode(o.type#, 2, 1, NULL)) tables, sum(decode(o.type#, 3, 1, NULL)) clusters, sum(decode(o.type#, 4, 1, NULL)) views, sum(decode(o.type#, 5, 1, NULL)) synonyms, sum(decode(o.type#, 6, 1, NULL)) sequences, sum(decode(o.type#, 1, NULL, 2, NULL, 3, NULL, 4, NULL, 5, NULL, 6, NULL, 1)) others from sys.obj$ o, sys.user$ u where o.type# >= 1 and u.user# = o.owner# and u.name <> ''PUBLIC'' group by u.name order by sys.link$ union select ''CONSTRAINT'' , count(*)
from sys.con$ 23。有關connection的相關信息
1)查看有哪些用戶鏈接 select s.osuser os_user_name, decode(sign(48 - command), 1, to_char(command), ''Action Code #'' || to_char(command) ) action, p.program oracle_process, status session_status, s.terminal terminal, s.program program, s.username user_name, s.fixed_table_sequence activity_meter, '''' query, 0 memory, 0 max_memory, 0 cpu_usage, s.sid, s.serial# serial_num from v$session s, v$process p where s.paddr=p.addr and s.type = ''USER'' order by s.username, s.osuser
2)根據v.sid查看對應鏈接的資源佔用等狀況 select n.name, v.value, n.class, n.statistic# from v$statname n, v$sesstat v where v.sid = 71 and v.statistic# = n.statistic# order by n.class, n.statistic#
3)根據sid查看對應鏈接正在運行的sql select /*+ PUSH_SUBQ */ command_type, sql_text,sharable_mem, persistent_mem, runtime_mem, sorts, version_count,loaded_versions, open_versions, users_opening, executions, users_executing, loads, first_load_time, invalidations, parse_calls, disk_reads, buffer_gets, rows_processed, sysdate start_time, sysdate finish_time, ''>'' || address sql_address, ''N'' status from v$sqlarea where address = (select sql_address from v$session where sid = 71) 24.查詢表空間使用狀況 select a.tablespace_name "表空間名稱", 100-round((nvl(b.bytes_free,0)/a.bytes_alloc)*100,2) "佔用率(%)", round(a.bytes_alloc/1024/1024,2) "容量(M)", round(nvl(b.bytes_free,0)/1024/1024,2) "空閒(M)", round((a.bytes_alloc-nvl(b.bytes_free,0))/1024/1024,2) "使用(M)", Largest "最大擴展段(M)", to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'') "採樣時間" from (select f.tablespace_name, sum(f.bytes) bytes_alloc, sum(decode(f.autoextensible,''YES'',f.maxbytes,''NO'',f.bytes)) maxbytes from dba_data_files f group by tablespace_name) a, (select f.tablespace_name, sum(f.bytes) bytes_free from dba_free_space f group by tablespace_name) b, (select round(max(ff.length)*16/1024,2) Largest, ts.name tablespace_name from sys.fet$ ff, sys.file$ tf,sys.ts$ ts where ts.ts#=ff.ts# and ff.file#=tf.relfile# and ts.ts#=tf.ts# group by ts.name, tf.blocks) c where a.tablespace_name = b.tablespace_name and a.tablespace_name = c.tablespace_name 25. 查詢表空間的碎片程度 select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name h***ing count(tablespace_name)>10; alter tablespace name coalesce; alter table name deallocate unused; create or replace view ts_blocks_v as select tablespace_name,block_id,bytes,blocks,''free space'' segment_name from dba_free_space union all select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents; select * from ts_blocks_v; select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space group by tablespace_name; 26。查詢有哪些數據庫實例在運行 select inst_name from v$active_instances;
######### 建立數據庫 $ORACLE_HOME/rdbms/admin/buildall.sql ############# create TABLE wottemp.temp_1234_test(TruckID varchar2(30), X number(30), Y number(30), Z number(30), TIME date, Type varchar2(30), remark varchar2(30));
############### 數據字典 ########## set wrap off select * from v$dba_users; grant select on table_name to user/rule; select * from user_tables; select * from all_tables; select * from dba_tables; revoke dba from user_name; shutdown immediate startup nomount select * from v$instance; select * from v$sga; select * from v$tablespace; alter session set nls_language=american; alter database mount; select * from v$database; alter database open; desc dictionary select * from dict; desc v$fixed_table; select * from v$fixed_table; set oracle_sid=foxconn select * from dba_objects; set serveroutput on execute dbms_output.put_line(''sfasd''); ############# 控制文件 ########### select * from v$database; select * from v$tablespace; select * from v$logfile; select * from v$log; select * from v$backup; /*備份用戶表空間*/ alter tablespace users begin backup; select * from v$archived_log; select * from v$controlfile; alter system set control_files=''$ORACLE_HOME/oradata/u01/ctrl01.ctl'', ''$ORACLE_HOME/oradata/u01/ctrl02.ctl'' scope=spfile; cp $ORACLE_HOME/oradata/u01/ctrl01.ctl $ORACLE_HOME/oradata/u01/ctrl02.ctl startup pfile=''../initSID.ora'' select * from v$parameter where name like ''control%'' ; show parameter control; select * from v$controlfile_record_section; select * from v$tempfile; /*備份控制文件*/ alter database backup controlfile to ''../filepath/control.bak''; /*備份控制文件,並將二進制控制文件變爲了asc 的文本文件*/ alter database backup controlfile to trace; ############### redo log ############## archive log list; alter system archive log start;--啓動自動存檔 alter system switch logfile;--強行進行一第二天志switch alter system checkpoint;--強制進行一次checkpoint alter tablspace users begin backup; alter tablespace offline; /*checkpoint 同步頻率參數FAST_START_MTTR_TARGET,同步頻率越高,系統恢復所需時間越短*/ show parameter fast; show parameter log_checkpoint; /*加入一個日誌組*/ alter database add logfile group 3 (''/$ORACLE_HOME/oracle/ora_log_file6.rdo'' size 10M); /*加入日誌組的一個成員*/ alter database add logfile member ''/$ORACLE_HOME/oracle/ora_log_file6.rdo'' to group 3; /*刪除日誌組:當前日誌組不能刪;活動的日誌組不能刪;非歸檔的日誌組不能刪*/ alter database drop logfile group 3; /*刪除日誌組中的某個成員,但每一個組的最後一個成員不能被刪除*/ alter databse drop logfile member ''$ORACLE_HOME/oracle/ora_log_file6.rdo''; /*清除在線日誌*/ alter database clear logfile ''$ORACLE_HOME/oracle/ora_log_file6.rdo''; alter database clear logfile group 3; /*清除非歸檔日誌*/ alter database clear unarchived logfile group 3; /*重命名日誌文件*/ alter database rename file ''$ORACLE_HOME/oracle/ora_log_file6.rdo'' to ''$ORACLE_HOME/oracle/ora_log_file6a.rdo''; show parameter db_create; alter system set db_create_online_log_dest_1=''path_name''; select * from v$log; select * from v$logfile; /*數據庫歸檔模式到非歸檔模式的互換,要啓動到mount狀態下才能改變;startup mount;而後再打開數據庫.*/ alter database noarchivelog/archivelog; achive log start;---啓動自動歸檔 alter system archive all;--手工歸檔全部日誌文件 select * from v$archived_log; show parameter log_archive; ###### 分析日誌文件logmnr ############## 1) 在init.ora中set utl_file_dir 參數 2) 從新啓動oracle 3) create 目錄文件 desc dbms_logmnr_d; dbms_logmnr_d.build; 4) 加入日誌文件 add/remove log file dhms_logmnr.add_logfile dbms_logmnr.removefile 5) start logmnr dbms_logmnr.start_logmnr 6) 分析出來的內容查詢 v$logmnr_content --sqlredo/sqlundo 實踐: desc dbms_logmnr_d; /*對數據表作一些操做,爲恢復操做作準備*/ update 表 set qty=10 where stor_id=6380; delete 表 where stor_id=7066; /***********************************/ utl_file_dir的路徑 execute dbms_logmnr_d.build(''foxdict.ora'',''$ORACLE_HOME/oracle/admin/fox/cdump''); execute dbms_logmnr.add_logfile(''$ORACLE_HOME/oracle/ora_log_file6.log'',dbms_logmnr.newfile); execute dbms_logmnr.start_logmnr(dictfilename=>''$ORACLE_HOME/oracle/admin/fox/cdump/foxdict.ora''); ######### tablespace ############## select * form v$tablespace; select * from v$datafile; /*表空間和數據文件的對應關係*/ select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts#=t2.ts#; alter tablespace users add datafile ''path'' size 10M; select * from dba_rollback_segs; /*限制用戶在某表空間的使用限額*/ alter user user_name quota 10m on tablespace_name; create tablespace xxx [datafile ''path_name/datafile_name''] [size xxx] [extent management local/dictionary] [default storage(xxx)]; exmple: create tablespace userdata datafile ''$ORACLE_HOME/oradata/userdata01.dbf'' size 100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M; create tablespace userdata datafile ''$ORACLE_HOME/oradata/userdata01.dbf'' size 100M extent management dictionary default storage(initial 100k next 100k pctincrease 10) offline; /*9i之後,oracle建議使用local管理,而不使用dictionary管理,由於local採用bitmap管理表空間 ,不會產生系統表空間的自願爭用;*/ create tablespace userdata datafile ''$ORACLE_HOME/oradata/userdata01.dbf'' size 100M extent management local uniform size 1m; create tablespace userdata datafile ''$ORACLE_HOME/oradata/userdata01.dbf'' size 100M extent management local autoallocate; /*在建立表空間時,設置表空間內的段空間管理模式,這裏用的是自動管理*/ create tablespace userdata datafile ''$ORACLE_HOME/oradata/userdata01.dbf'' size 100M extent management local uniform size 1m segment space management auto; alter tablespace userdata mininum extent 10; alter tablespace userdata default storage(initial 1m next 1m pctincrease 20); /*undo tablespace(不能被用在字典管理模下) */ create undo tablespace undo1 datafile ''$ORACLE_HOME/oradata/undo101.dbf'' size 40M extent management local; show parameter undo; /*temporary tablespace*/ create temporary tablespace userdata tempfile ''$ORACLE_HOME/oradata/undo101.dbf'' size 10m extent management local; /*設置數據庫缺省的臨時表空間*/ alter database default temporary tablespace tablespace_name; /*系統/臨時/在線的undo表空間不能被offline*/ alter tablespace tablespace_name offline/online; alter tablespace tablespace_name read only; /*重命名用戶表空間*/ alter tablespace tablespace_name rename datafile ''$ORACLE_HOME/oradata/undo101.dbf'' to ''$ORACLE_HOME/oradata/undo102.dbf''; /*重命名系統表空間 ,但在重命名前必須將數據庫shutdown,並重啓到mount狀態*/ alter database rename file ''$ORACLE_HOME/oradata/system01.dbf'' to ''$ORACLE_HOME/oradata/system02.dbf''; drop tablespace userdata including contents and datafiles;---drop tablespce /*resize tablespace,autoextend datafile space*/ alter database datafile ''$ORACLE_HOME/oradata/undo102.dbf'' autoextend on next 10m maxsize 500M; /*resize datafile*/ alter database datafile ''$ORACLE_HOME/oradata/undo102.dbf'' resize 50m; /*給表空間擴展空間*/ alter tablespace userdata add datafile ''$ORACLE_HOME/oradata/undo102.dbf'' size 10m; /*將表空間設置成OMF狀態*/ alter system set db_create_file_dest=''$ORACLE_HOME/oradata''; create tablespace userdata;---use OMF status to create tablespace; drop tablespace userdata;---user OMF status to drop tablespace; select * from dba_tablespace/v$tablespace/dba_data_files; /*將表的某分區移動到另外一個表空間*/ alter table table_name move partition partition_name tablespace tablespace_name; ###### ORACLE storage structure and relationships ######### /*手工分配表空間段的分區(extend)大小*/ alter table kong.test12 allocate extent(size 1m datafile ''$ORACLE_HOME/oradata/undo102.dbf''); alter table kong.test12 deallocate unused; ---釋放表中沒有用到的分區 show parameter db; alter system set db_8k_cache_size=10m; ---配置8k塊的內存空間塊參數 select * from dba_extents/dba_segments/data_tablespace; select * from dba_free_space/dba_data_file/data_tablespace; /*數據對象所佔用的字節數*/ select sum(bytes) from dba_extents where onwer=''kong'' and segment_name =''table_name''; ############ UNDO Data ################ show parameter undo; alter tablespace users offline normal; alter tablespace users offline immediate; recover datafile ''$ORACLE_HOME/oradata/undo102.dbf''; alter tablespace users online ; select * from dba_rollback_segs; alter system set undo_tablespace=undotbs1; /*忽略回滾段的錯誤提示*/ alter system set undo_suppress_errors=true; /*在自動管理模式下,不會真正創建rbs1;在手工管理模式則能夠創建,且是私有回滾段*/ create rollback segment rbs1 tablespace undotbs; desc dbms_flashback; /*在提交了修改的數據後,9i提供了舊數據的回閃操做,將修改前的數據只讀給用戶看,但這部分數據不會又恢復在表中,而是舊數據的一個映射*/ execute dbms_flashback.enable_at_time(''26-JAN-04:12:17:00 pm''); execute dbms_flashback.disable; /*回滾段的統計信息*/ select end_time,begin_time,undoblks from v$undostat; /*undo表空間的大小計算公式: UndoSpace=[UR * (UPS * DBS)] + (DBS * 24) UR :UNDO_RETENTION 保留的時間(秒) UPS :每秒的回滾數據塊 DBS:系統EXTENT和FILE SIZE(也就是db_block_size)*/ select * from dba_rollback_segs/v$rollname/v$rollstat/v$undostat/v$session/v$transaction; show parameter transactions; show parameter rollback; /*在手工管理模式下,創建公共的回滾段*/ create public rollback segment prbs1 tablespace undotbs; alter rollback segment rbs1 online;----在手工管理模式 /*在手工管理模式中,initSID.ora中指定 undo_management=manual 、rollback_segment=(''rbs1'',''rbs2'',...)、 transactions=100 、transactions_per_rollback_segment=10 而後 shutdown immediate ,startup pfile=....\???.ora */ ########## Managing Tables ########### /*char type maxlen=2000;varchar2 type maxlen=4000 bytes rowid 是18位的64進制字符串 (10個bytes 80 bits) rowid組成: object#(對象號)--32bits,6位 rfile#(相對文件號)--10bits,3位 block#(塊號)--22bits,6位 row#(行號)--16bits,3位 64進制: A-Z,a-z,0-9,/,+ 共64個符號 dbms_rowid 包中的函數能夠提供對rowid的解釋*/ select rowid,dbms_rowid.rowid_block_number(rowid),dbms_rowid.rowid_row_number(rowid) from table_name; create table test2 ( id int, lname varchar2(20) not null, fname varchar2(20) constraint ck_1 check(fname like ''k%''), empdate date default sysdate) ) tablespace tablespace_name; create global temporary table test2 on commit delete/preserve rows as select * from kong.authors; create table user.table(...) tablespace tablespace_name storage(...) pctfree10 pctused 40; alter table user.tablename pctfree 20 pctused 50 storage(...);---changing table storage /*手工分配分區,分配的數據文件必須是表所在表空間內的數據文件*/ alter table user.table_name allocate extent(size 500k datafile ''...''); /*釋放表中沒有用到的空間*/ alter table table_name deallocate unused; alter table table_name deallocate unused keep 8k; /*將非分區表的表空間搬到新的表空間,在移動表空間後,原表中的索引對象將會不可用,必須重建*/ alter table user.table_name move tablespace new_tablespace_name; create index index_name on user.table_name(column_name) tablespace users; alter index index_name rebuild; drop table table_name [CASCADE CONSTRAINTS]; alter table user.table_name drop column col_name [CASCADE CONSTRAINTS CHECKPOINT 1000];---drop column /*給表中不用的列作標記*/ alter table user.table_name set unused column comments CASCADE CONSTRAINTS; /*drop表中不用的作了標記列*/ alter table user.table_name drop unused columns checkpoint 1000; /*當在drop col是出現異常,使用CONTINUE,防止重刪前面的column*/ ALTER TABLE USER.TABLE_NAME DROP COLUMNS CONTINUE CHECKPOINT 1000; select * from dba_tables/dba_objects; ######## managing indexes ########## /*create index*/ example: /*建立通常索引*/ create index index_name on table_name(column_name) tablespace tablespace_name; /*建立位圖索引*/ create bitmap index index_name on table_name(column_name1,column_name2) tablespace tablespace_name; /*索引中不能用pctused*/ create [bitmap] index index_name on table_name(column_name) tablespace tablespace_name pctfree 20 storage(inital 100k next 100k) ; /*大數據量的索引最好不要作日誌*/ create [bitmap] index index_name table_name(column_name1,column_name2) tablespace_name pctfree 20 storage(inital 100k next 100k) nologging; /*建立反轉索引*/ create index index_name on table_name(column_name) reverse; /*建立函數索引*/ create index index_name on table_name(function_name(column_name)) tablespace tablespace_name; /*建表時建立約束條件*/ create table user.table_name(column_name number(7) constraint constraint_name primary key deferrable using index storage(initial 100k next 100k) tablespace tablespace_name,column_name2 varchar2(25) constraint constraint_name not null,column_name3 number(7)) tablespace tablespace_name; /*給建立bitmap index分配的內存空間參數,以加速建索引*/ show parameter create_bit; /*改變索引的存儲參數*/ alter index index_name pctfree 30 storage(initial 200k next 200k); /*給索引手工分配一個分區*/ alter index index_name allocate extent (size 200k datafile ''$ORACLE/oradata/..''); /*釋放索引中沒用的空間*/ alter index index_name deallocate unused; /*索引重建*/ alter index index_name rebuild tablespace tablespace_name; /*普通索引和反轉索引的互換*/ alter index index_name rebuild tablespace tablespace_name reverse; /*重建索引時,不鎖表*/ alter index index_name rebuild online; /*給索引整理碎片*/ alter index index_name COALESCE; /*分析索引,事實上是更新統計的過程*/ analyze index index_name validate structure; desc index_state; drop index index_name; alter index index_name monitoring usage;-----監視索引是否被用到 alter index index_name nomonitoring usage;----取消監視 /*有關索引信息的視圖*/ select * from dba_indexes/dba_ind_columns/dbs_ind_expressions/v$object_usage; ########## 數據完整性的管理(Maintaining data integrity) ########## alter table table_name drop constraint constraint_name;----drop 約束 alter table table_name add constraint constraint_name primary key(column_name1,column_name2);-----建立主鍵 alter table table_name add constraint constraint_name unique(column_name1,column_name2);---建立惟一約束 /*建立外鍵約束*/ alter table table_name add constraint constraint_name foreign key(column_name1) references table_name(column_name1); /*不效驗老數據,只約束新的數據[enable/disable:約束/不約束新數據;novalidate/validate:不對/對老數據進行驗證]*/ alter table table_name add constraint constraint_name check(column_name like ''B%'') enable/disable novalidate/validate; /*修改約束條件,延時驗證,commit時驗證*/ alter table table_name modify constraint constraint_name initially deferred; /*修改約束條件,當即驗證*/ alter table table_name modify constraint constraint_name initially immediate; alter session set constraints=deferred/immediate; /*drop一個有外鍵的主鍵表,帶cascade constraints參數級聯刪除*/ drop table table_name cascade constraints; /*當truncate外鍵表時,先將外鍵設爲無效,再truncate;*/ truncate table table_name; /*設約束條件無效*/ alter table table_name disable constraint constraint_name; alter table table_name enable novalidate constraint constraint_name; /*將無效約束的數據行放入exception的表中,此表記錄了違反數據約束的行的行號;在此以前,要先建exceptions表*/ alter table table_name add constraint constraint_name check(column_name >15) enable validate exceptions into exceptions; /*運行建立exceptions表的腳本*/ start $ORACLE_HOME/rdbms/admin/utlexcpt.sql; /*獲取約束條件信息的表或視圖*/ select * from user_constraints/dba_constraints/dba_cons_columns; ################## managing password security and resources #################### alter user user_name account unlock/open;----鎖定/打開用戶; alter user user_name password expire;---設定口令到期 /*創建口令配置文件,failed_login_attempts口令輸多少次後鎖,password_lock_times指多少天后口令被自動解鎖*/ create profile profile_name limit failed_login_attempts 3 password_lock_times 1/1440; /*建立口令配置文件*/ create profile profile_name limit failed_login_attempts 3 password_lock_time unlimited password_life_time 30 password_reuse_time 30 password_verify_function verify_function password_grace_time 5; /*創建資源配置文件*/ create profile prfile_name limit session_per_user 2 cpu_per_session 10000 idle_time 60 connect_time 480; alter user user_name profile profile_name; /*設置口令解鎖時間*/ alter profile profile_name limit password_lock_time 1/24; /*password_life_time指口令文件多少時間到期,password_grace_time指在第一次成功登陸後到口令到期有多少天時間可改變口令*/ alter profile profile_name limit password_lift_time 2 password_grace_time 3; /*password_reuse_time指口令在多少天內可被重用,password_reuse_max口令可被重用的最大次數*/ alter profile profile_name limit password_reuse_time 10[password_reuse_max 3]; alter user user_name identified by input_password;-----修改用戶口令 drop profile profile_name; /*創建了profile後,且指定給某個用戶,則必須用CASCADE才能刪除*/ drop profile profile_name CASCADE; alter system set resource_limit=true;---啓用自願限制,缺省是false /*配置資源參數*/ alter profile profile_name limit cpu_per_session 10000 connect_time 60 idle_time 5; /*資源參數(session級) cpu_per_session 每一個session佔用cpu的時間 單位1/100秒 sessions_per_user 容許每一個用戶的並行session數 connect_time 容許鏈接的時間 單位分鐘 idle_time 鏈接被空閒多少時間後,被自動斷開 單位分鐘 logical_reads_per_session 讀塊數 ***_sga 用戶可以在SGA中使用的私有的空間數 單位bytes (call級) cpu_per_call 每次(1/100秒)調用cpu的時間 logical_reads_per_call 每次調用可以讀的塊數 */ alter profile profile_name limit cpu_per_call 1000 logical_reads_per_call 10; desc dbms_resouce_manager;---資源管理器包 /*獲取資源信息的表或視圖*/ select * from dba_users/dba_profiles; ###### Managing users ############ show parameter os; create user testuser1 identified by kxf_001; grant connect,createtable to testuser1; alter user testuser1 quota 10m on tablespace_name; /*建立用戶*/ create user user_name identified by password default tablespace tablespace_name temporary tablespace tablespace_name quota 15m on tablespace_name password expire; /*數據庫級設定缺省臨時表空間*/ alter database default temporary tablespace tablespace_name; /*制定數據庫級的缺省表空間*/ alter database default tablespace tablespace_name; /*建立os級審覈的用戶,需知道os_authent_prefix,表示oracle和os口令對應的前綴,''OPS$''爲此參數的值,此值能夠任意設置*/ create user user_name identified by externally default OPS$tablespace_name tablespace_name temporary tablespace tablespace_name quota 15m on tablespace_name password expire; /*修改用戶使用表空間的限額,回滾表空間和臨時表空間不容許授予限額*/ alter user user_name quota 5m on tablespace_name; /*刪除用戶或刪除級聯用戶(用戶對象下有對象的要用CASCADE,將其下一些對象一塊兒刪除)*/ drop user user_name [CASCADE]; /*每一個用戶在哪些表空間下有些什麼限額*/ desc dba_ts_quotas;select * from dba_ts_quotas where username=''...''; /*改變用戶的缺省表空間*/ alter user user_name default tablespace tablespace_name; ######### Managing Privileges ############# grant create table,create session to user_name; grant create any table to user_name; revoke create any table from user_name; /*授予權限語法,public 標識全部用戶,with admin option容許能將權限授予第三者的權限*/ grant system_privs,[......] to [user/role/public],[....] [with admin option]; select * from v$pwfile_users; /*當 O7_dictionary_accessiblity參數爲True時,標識select any table時,包括系統表也能select ,不然,不包含系統表;缺省爲false*/ show parameter O7; /*因爲 O7_dictionary_accessiblity爲靜態參數,不能動態改變,故加scope=spfile,下次啓動時才生效*/ alter system set O7_dictionary_accessiblity=true scope=spfile; /*授予對象中的某些字段的權限,如select 某表中的某些字段的權限*/ grant [object_privs(column,....)],[...] on object_name to user/role/public,... with grant option; /*oracle不容許授予select某列的權限,但能夠授insert ,update某列的權限*/ grant insert(column_name1,column_name2,...) on table_name to user_name with grant option; select * from dba_sys_privs/session_privs/dba_tab_privs/user_tab_privs/dba_col_privs/user_col_privs; /*db/os/none 審計被記錄在 數據庫/操做系統/不審計 缺省是none*/ show parameter audit_trail; /*啓動對錶的select動做*/ audit select on user.table_name by session; /*by session在每一個session中發出command只記錄一次,by access則每一個command都記錄*/ audit [create table][select/update/insert on object by session/access][whenever successful/not successful]; desc dbms_fga;---進一步設計,則可以使用dbms_fgs包 /*取消審計*/ noaudit select on user.table_name; /*查被審計信息*/ select * from all_def_audit_opts/dba_stmt_audit_opts/dba_priv_audit_opts/dba_obj_audit_opts; /*獲取審計記錄*/ select * from dba_audit_trail/dba_audit_exists/dba_audit_object/dba_audit_session/dba_audit_statement; ########### Managing Role ################# create role role_name; grant select on table_name to role_name; grant role_name to user_name; set role role_name; create role role_name; create role role_name identified by password; create role role_name identified externally; set role role_name ; ----激活role set role role_name identified by password; alter role role_name not identified; alter role role_name identified by password; alter role role_name identified externally; grant priv_name to role_name [WITH ADMIN OPTION]; grant update(column_name1,col_name2,...) on table_name to role_name; grant role_name1 to role_name2; /*創建default role,用戶登陸時,缺省激活default role*/ alter user user_name default role role_name1,role_name2,...; alter user user_name default role all; alter user user_name default role all except role_name1,...; alter user user_name default role none; set role role1 [identified by password],role2,....; set role all; set role except role1,role2,...; set role none; revoke role_name from user_name; revoke role_name from public; drop role role_name; select * from dba_roles/dba_role_privs/role_role_privs/dba_sys_privs/role_sys_privs/role_tab_privs/session_roles; ########### Basic SQL SELECT ################ select col_name as col_alias from table_name ; select col_name from table_name where col1 like ''_o%''; ----''_''匹配單個字符 /*使用字符函數(右邊截取,字段中包含某個字符,左邊填充某字符到固定位數,右邊填充某字符到固定位數)*/ select substr(col1,-3,5),instr(col2,''g''),LPAD(col3,10,''$''),RPAD(col4,10,''%'') from table_name; /*使用數字函數(往右/左幾位四捨五入,取整,取餘)*/ select round(col1,-2),trunc(col2),mod(col3) from table_name ; /*使用日期函數(計算兩個日期間相差幾個星期,兩個日期間相隔幾個月,在某個月份上加幾個月,某個日期的下一個日期, 某日期所在月的最後的日期,對某個日期的月分四捨五入,對某個日期的月份進行取整)*/ select (sysdate-col1)/7 week,months_between(sysdate,col1),add_months(col1,2),next_day(sysdate,''FRIDAY''),last_day(sysdate), round(sysdate,''MONTH''),trunc(sysdate,''MONTH'') from table_name; /*使用NULL函數(當expr1爲空取expr2/當expr1爲空取expr2,不然取expr3/當expr1=expr2返回空)*/ select nvl(expr1,expr2),nvl2(expr1,expr2,expr3),nullif(expr1,expr2) from table_name; select column1,column2,column3, case column2 when ''50'' then column2*1.1 when ''30'' then column2*2.1 when ''10'' then column3/20 else column3 end as ttt from table_name ; ------使用case函數 select table1.col1,table2.col2 from table1 [CROSS JOIN table2] | -----笛卡兒鏈接 [NATURAL JOIN table2] | -----用兩個表中的同名列鏈接 [JOIN table2 USING (column_name)] | -----用兩個表中的同名列中的某一列或幾列鏈接 [JOIN table2 ON (table1.col1=table2.col2)] | [LEFT|RIGHT|FULL OUTER JOIN table2 ------至關於(+)=,=(+)鏈接,全外鏈接 ON (table1.col1=table2.col2)]; ------SQL 1999中的JOIN語法;
查看oracle版本數據庫
select * from v$version express