1. 程式人生 > >Oracle 學習筆記(五)

Oracle 學習筆記(五)

采樣 flash 全表掃描 group space 表空間 manage 授權 個數

--表空間,auto: 自動管理, manual: 手動管理 create tablespace tsp1 datafile ‘D:\ORACLE\ORADATA\O10\tsp1.dbf‘ size 2M segment space management auto;

-- 查看表空間 select tablespace_name,segment_space_management from dba_tablespaces;

-- 回退段管理 --系統回退段,存放於 system 表空間,只有system 表空間內的對象才可以使用 -- 查看回退段 select * from v$rollname; show parameter undo ;

-- 數據回退

-- 當前系統的scn 號 select dbms_flashback.get_system_change_number() from dual; -- 閃回 execute dbms_flashback.enable_at_system_change_number(#####); -- 結束閃回 execute dbms_flashback.disable(); -- 閃回到指定的時間點,物理時間和數據庫時間的SCN 的對照表,每5分鐘采樣 select to_char(time_dp,‘yyyy/mm/dd:hh24:mi:ss‘),SCN from sys.smon_scn_time;

execute dbms_flashback.enable_at_time(to_date(‘2017/9/2/24:12:22‘, ‘yyyy/mm/dd:hh24:mi:ss‘)); --閃回---取值到遊標----停止閃回----將遊標中的值插入原表 declare cursor c1 is select * from scott.e2 where empno=7369; v_sal c1%rowtype; begin DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_number (13346413); open c1; fetch c1 into v_sal; dbms_flashback.disable(); update scott.e2 set sal=v_sal.sal where empno=v_sal.empno; close c1; end; / -- 查看表的更改痕跡

select versions_starttime,versions_endtime,versions_xid,versions_operation, sal from t1 versions between timestamp minvalue and maxvalue order by versions_starttime -- 查看 一個時間段內的更改痕跡 select versions_starttime,versions_endtime,versions_xid,versions_operation, sal from t1 versions between timestamp to_date(‘2017/9/2/24:12:22‘,‘yyyy/mm/dd:hh24:mi:ss‘) and maxvalue order by versions_starttime -- 查看原sql 語句 select undo_sql from flashback_transaction_query where xid=‘08001100C7010000‘ -- 多次drop 後,建立同名表 flashback table t1 to before drop rename to t2; -- 構造rowid select dbms_rowid.rowid_create(1,5413,4,32,7) from dual; --參數1: 新版本的rowid 格式,64進制,18位, 0:舊版本的rowid 格式,16進制,16位 -- 上面的rowid 代表 4號文件的,第32個塊,第7行,將8位16進制轉換成10進制,正好是4M, -- 所以一個數據塊的上限為 4M 個oracle 塊。 -- 查看每個塊中的行數,行的長度不同,塊內存放的行數也不同 select dbms_rowid,rowid_block_number(rowid), block#,count(*) from t1 group by dbms_rowid,rowid_block_number(rowid); -- 刪除指定的列 alter table t1 drop column 列名 checkpoint 1000; --drop 過程中表的狀態為 invalid,如果過程中停電,啟動數據庫後 alter table t1 drop columns 列名 continue -- 查看索引在哪個表哪個列上 select index_name,table_name,column_name from user_ind_columns order by 2,32 -- 查看索引的屬性 select index_name,index_type,table_name,uniqueness from user_indexes; -- 查看索引的內部信息 select height,blocks,br_blks,lf_blks,lf_rows,del_lf_rows from index_stats -- height: 高度, blocks:索引總塊數, br_blks: 枝幹塊數, lf_rows:葉子內行數 -- del_lf_rows: 葉子中被刪除的行數

-- 索引的合並 alter index 索引名 coalesce;

-- 重新索引 alter index 索引名 rebuild; -- 查看索引的引用狀態 select * from v$objcet_usage; -- 授權 grant create session to u1 -- 回收權限 revoke create session from u1; -- 查看字符編碼集 select * from v$nls_valid_values where PARAMETER=‘CHARACTERSET‘ order by 2; -- 提取元數據 select dbms_metadata.get_ddl(‘TABLE‘,‘EMP‘) FROM DUAL; -- 數據庫連接(連接到遠程的數據庫) CREATE PUBLIC DATABASE LINK dh connect to system identified by manager using ‘111‘; --一個共有的數據庫連接,名稱是 dh,連接到 111 所描述的數據庫中的 system 用戶, -- 密碼為manager

-- 查看數據庫連接 select * from dba_db_links -- 關閉數據庫連接 ALTER SESSION CLOSE DATABASE LINK dh; -- 強制使用 hash 連接 -- 適用於大量數據的連接,將兩個表中較小的表連接列建立一個hash表, --放入到內存中,必須有等值條件 select /*+ use_hash(t1 t2) */ t1.* from t1 ,t2 where t1.id=t2.id -- 強制使用 merge 連接 -- 排序融合連接,hash 連接大部分時候都比排序融合連接性能好 -- 如果不是等值條件,即 > < >= <= ,不能使用hash 連接,使用排序連接和嵌套循環連接 select /*+ use_merge(t1 t2) */ t1.* from t1 ,t2 where t1.id=t2.id

-- 強制使用 nest_loop 連接, 嵌套循環連接,外部表的每一個行都要和內部表的所有行連接 -- 當表的行數較少的時候,數據庫會選擇這種連接方式 select /*+ use_nl(t1 t2) */ t1.* from t1 ,t2 where t1.id=t2.id -- 強制使用 全表掃描而不使用主鍵 select /*+ full(t1) */ * from t1 -- 強制使用主鍵而不使用全表掃描 select /*+ index(index_name) */ * from t1 -- 強制使用並行查詢,提高全表掃描效率 select /*+ full(t1) parallel(t1,4) */ * from t1;

Oracle 學習筆記(五)