如果沒記錯的話,insert和delete操作應(yīng)該會直接變更該視圖的信息。
創(chuàng)新互聯(lián)公司業(yè)務(wù)包括:成品網(wǎng)站、企業(yè)產(chǎn)品展示型網(wǎng)站建設(shè)、高端網(wǎng)站設(shè)計、電子商務(wù)型網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)(多語言)、商城建設(shè)、按需定制制作、網(wǎng)絡(luò)營銷推廣等。效率優(yōu)先,品質(zhì)保證,用心服務(wù)是我們的核心價值觀,我們將繼續(xù)以良好的信譽(yù)為基礎(chǔ),秉承穩(wěn)固與發(fā)展、求實(shí)與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質(zhì)的互聯(lián)網(wǎng)服務(wù)!
distinct_keys來自于IND$的DISTKEY字段,唯一鍵值的數(shù)量。
num_rows則是來自于IND$的ROWCNT字段,記錄的數(shù)量(行數(shù))
比較一下唯一鍵的數(shù)量和表中的行數(shù),就可以判斷索引的選擇性。選擇性越高,索引返回的數(shù)據(jù)就越少。索引的選擇性可以幫助基于代價的優(yōu)化器來判斷執(zhí)行途徑。
字典怎么使用,那得建立在你對字典的了解上。
比如你可以在 select*from user_source中查看所有的數(shù)據(jù)庫代碼,方便你查看某一張表是在哪里被插入數(shù)據(jù),被哪里被應(yīng)用。
dba_tab_cols中可以看出一個表有哪些字段,每個字段的類型,以及其他信息。
通過一些字典表查看表占用的空間,表空間大小,剩余空間,。。等等。
第一步,獲得當(dāng)前scn
select dbms_flashback.get_system_change_number from dual;
第二步,根據(jù)第三步返回的scn不停地嘗試查詢直到所有記錄都存在為止。
select count(*) from t1 as of scn 10670000;--10670000為返回的scn
第三步,當(dāng)?shù)诙椒祷氐闹禐樗鶆h除的記錄數(shù)時執(zhí)行
insert into t1 select * from t1 as of scn 10670000;
commite;
到此數(shù)據(jù)恢復(fù)完畢!
----------------------------------------------------------------------------------------------------
總結(jié):
閃回查詢可恢復(fù)較近的數(shù)據(jù)。
SCN(系統(tǒng)改變號),它的英文全拼為:System Change Number ,它是數(shù)據(jù)庫中非常重要的一個數(shù)據(jù)結(jié)構(gòu)。SCN 是 Oracle 內(nèi)部的時鐘機(jī)制, Oracle 通過 SCN 來維護(hù)數(shù)據(jù)庫的一致性,并通過SCN 實(shí)施 Oracle 至關(guān)重要的恢復(fù)機(jī)制。
閃回查詢無法恢復(fù)到表結(jié)構(gòu)改變之前,因?yàn)殚W回查詢使用的當(dāng)前的數(shù)據(jù)字典。
1、在oracle9i中閃回數(shù)據(jù)先要看是否設(shè)置了閃回功能,具體如何判斷可根據(jù)步驟一來查看。
2、在數(shù)據(jù)成功閃回后一定要先檢驗(yàn)數(shù)據(jù)質(zhì)量這個是很重要的一步。
3、Flaslhback是9i推出的新特性,但9i只提供閃回查詢;而10g提供了閃回查詢(Flashback Query)、閃回表(Flashback Table)以及閃回數(shù)據(jù)庫(Flashback Database)等更強(qiáng)大的功能。
可以直接查詢該表半天左右前的數(shù)據(jù)情況
select * from t1 as of timestamp sysdate-1/2;
比較兩集合不同找出不同數(shù)據(jù)
select * from t1 as of timestamp sysdate-1/2
minus select * from t1;
但是在某些情況下,建議使用as of scn的方式執(zhí)行flashback query,比如需要對多個相互有主外鍵約束的表進(jìn)行恢復(fù)時,如果使用as of timestamp的方式,可能會由于時間點(diǎn)不統(tǒng)一的緣故造成數(shù)據(jù)選擇或插入失敗,通過scn方式則能夠確保記錄的約束一致性
CREATE OR REPLACE FUNCTION f_search_dic_a(p_str VARCHAR2)
RETURN VARCHAR2
IS
l_result VARCHAR2(4000);
l_dic_a_str VARCHAR2(100);
l_code VARCHAR2(10);
l_length NUMBER;
l_start_position NUMBER := 1;
l_seperator_position NUMBER;
BEGIN
l_length := length(p_str);
LOOP
l_dic_a_str := NULL;
l_code := NULL;
l_seperator_position := INSTR(p_str, ',', l_start_position);
EXIT WHEN l_seperator_position = 0;
l_code := SUBSTR(p_str, l_start_position, l_seperator_position-l_start_position);
SELECT value
INTO l_dic_a_str
FROM dic_a
WHERE code = l_code;
l_result := l_result || l_dic_a_str;
l_start_position := l_seperator_position + 1; END LOOP;
l_code := SUBSTR(p_str, l_start_position, l_length-l_start_position+1);
SELECT value
INTO l_dic_a_str
FROM dic_a
WHERE code = l_code;
l_result := l_result || l_dic_a_str;
RETURN l_result;
END;
/
這是測試結(jié)果
SQL select f_search_dic_a('02,05,06,08,10,00') from dual;
F_SEARCH_DIC_A('02,05,06,08,10
--------------------------------------------------------------------------------
貳伍陸捌拾零
再給兩個測試
SQL select f_search_dic_a('02,05,零,零,06,08,10,00') from dual;
F_SEARCH_DIC_A('02,05,零,零,06
--------------------------------------------------------------------------------
貳伍〇〇陸捌拾零
SQL select f_search_dic_a('01,零,03,07,02,04,零,04,03,01') from dual;
F_SEARCH_DIC_A('01,零,03,07,02
--------------------------------------------------------------------------------
壹〇叁柒貳肆〇肆叁壹
-- 查詢某表的數(shù)據(jù)字典
SELECT A.TABLE_NAME AS 表名,A.COLUMN_NAME AS 字段名,
DECODE(A.CHAR_LENGTH,0,DECODE(A.DATA_SCALE,NULL,A.DATA_TYPE,A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')'),
A.DATA_TYPE||'('||A.CHAR_LENGTH||')') as 字段類型1,A.DATA_TYPE AS 字段類型,A.DATA_PRECISION AS 有效位,A.DATA_SCALE AS 精度值,
A.CHAR_LENGTH AS 字段長度,A.NULLABLE AS 能否為空
FROM sys.user_tab_columns A where A.table_name = 'TAM_ADDRESS'
-- 具有dba權(quán)限用戶導(dǎo)出數(shù)據(jù)字典
SELECT A.TABLE_NAME AS 表名,A.COLUMN_NAME AS 字段名,
DECODE(A.CHAR_LENGTH,0,DECODE(A.DATA_SCALE,NULL,A.DATA_TYPE,A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')'),
A.DATA_TYPE||'('||A.CHAR_LENGTH||')') as 字段類型,A.DATA_DEFAULT AS 默認(rèn)值,
A.NULLABLE AS 能否為空,B.comments AS 備注
FROM sys.all_tab_columns A,sys.DBA_COL_COMMENTS B
WHERE A.owner=B.owner AND A.table_name=B.table_name AND A.COLUMN_NAME=B.COLUMN_NAME AND A.owner='guoqiang' AND
A.TABLE_NAME IN (
'TB_SUBJECT', 'TB_SUBJECT_BALANCE', 'TB_VOUCHER', 'TB_VOUCHER_DETAILS',
'TB_CUSTOMER', 'TB_VOUCHER_CLASSIFY_MODE', 'TB_VOUCHER_TYPE', 'TB_ASSET',
'TB_ASSET_CATALOG', 'TB_M_DM_ASSETS_LIABI_RPT', 'TB_M_DM_PROFIT_RPT',
'TB_M_DM_REVENUE_RPT', 'TB_M_DM_COST_RPT')ORDER BY A.TABLE_NAME
SELECT A.TABLE_NAME AS 表名,A.COLUMN_NAME AS 字段名,
DECODE(A.CHAR_LENGTH,0,DECODE(A.DATA_SCALE,NULL,A.DATA_TYPE,A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')'),
A.DATA_TYPE||'('||A.CHAR_LENGTH||')') as 字段類型,A.DATA_DEFAULT AS 默認(rèn)值,
A.NULLABLE AS 能否為空,B.comments AS 備注
FROM sys.user_tab_columns A,sys.user_col_comments B
WHERE A.table_name=B.table_name AND A.COLUMN_NAME=B.COLUMN_NAME AND
A.TABLE_NAME IN (
'TB_SUBJECT', 'TB_SUBJECT_BALANCE', 'TB_VOUCHER', 'TB_VOUCHER_DETAILS',
'TB_CUSTOMER', 'TB_VOUCHER_CLASSIFY_MODE', 'TB_VOUCHER_TYPE', 'TB_ASSET',