十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如果没记错的话,insert和delete操作应该会直接变更该视图的信息。
创新互联公司业务包括:成品网站、企业产品展示型网站建设、高端网站设计、电子商务型网站建设、外贸营销网站建设(多语言)、商城建设、按需定制制作、网络营销推广等。效率优先,品质保证,用心服务是我们的核心价值观,我们将继续以良好的信誉为基础,秉承稳固与发展、求实与创新的精神,为客户提供更全面、更优质的互联网服务!
distinct_keys来自于IND$的DISTKEY字段,唯一键值的数量。
num_rows则是来自于IND$的ROWCNT字段,记录的数量(行数)
比较一下唯一键的数量和表中的行数,就可以判断索引的选择性。选择性越高,索引返回的数据就越少。索引的选择性可以帮助基于代价的优化器来判断执行途径。
字典怎么使用,那得建立在你对字典的了解上。
比如你可以在 select*from user_source中查看所有的数据库代码,方便你查看某一张表是在哪里被插入数据,被哪里被应用。
dba_tab_cols中可以看出一个表有哪些字段,每个字段的类型,以及其他信息。
通过一些字典表查看表占用的空间,表空间大小,剩余空间,。。等等。
第一步,获得当前scn
select dbms_flashback.get_system_change_number from dual;
第二步,根据第三步返回的scn不停地尝试查询直到所有记录都存在为止。
select count(*) from t1 as of scn 10670000;--10670000为返回的scn
第三步,当第二步返回的值为所删除的记录数时执行
insert into t1 select * from t1 as of scn 10670000;
commite;
到此数据恢复完毕!
----------------------------------------------------------------------------------------------------
总结:
闪回查询可恢复较近的数据。
SCN(系统改变号),它的英文全拼为:System Change Number ,它是数据库中非常重要的一个数据结构。SCN 是 Oracle 内部的时钟机制, Oracle 通过 SCN 来维护数据库的一致性,并通过SCN 实施 Oracle 至关重要的恢复机制。
闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
1、在oracle9i中闪回数据先要看是否设置了闪回功能,具体如何判断可根据步骤一来查看。
2、在数据成功闪回后一定要先检验数据质量这个是很重要的一步。
3、Flaslhback是9i推出的新特性,但9i只提供闪回查询;而10g提供了闪回查询(Flashback Query)、闪回表(Flashback Table)以及闪回数据库(Flashback Database)等更强大的功能。
可以直接查询该表半天左右前的数据情况
select * from t1 as of timestamp sysdate-1/2;
比较两集合不同找出不同数据
select * from t1 as of timestamp sysdate-1/2
minus select * from t1;
但是在某些情况下,建议使用as of scn的方式执行flashback query,比如需要对多个相互有主外键约束的表进行恢复时,如果使用as of timestamp的方式,可能会由于时间点不统一的缘故造成数据选择或插入失败,通过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;
/
这是测试结果
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
--------------------------------------------------------------------------------
壹〇叁柒贰肆〇肆叁壹
-- 查询某表的数据字典
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权限用户导出数据字典
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 默认值,
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 默认值,
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',