Oracle 統(tǒng)計(jì)用戶下表的數(shù)據(jù)量實(shí)現(xiàn)腳本
要想統(tǒng)計(jì)用戶下所有表的數(shù)據(jù)量,可以查看user_tables,此表里面是統(tǒng)計(jì)信息,當(dāng)然這個(gè)可能不太準(zhǔn),要想非常精確,需要直接count表。下面的腳本有異常不中斷,可以重復(fù)執(zhí)行的特點(diǎn)。
create table bk_count_tables
(
owner VARCHAR2(30),
table_name VARCHAR2(30),
part_col varchar2(100),--分區(qū)字段
row_s number,
gather_time date
);
create index ind_bct_own_table on bk_count_tables(owner,table_name);
set serveroutput on
declare
cursor c_cursor is select s.OWNER, s.TABLE_NAME, col.column_name part_col
from dba_tables s,
(select owner,
name,
listagg(column_name, ',') within group(order by null) column_name
from (select owner, name, column_name
from dba_part_key_columns
where owner in ('TEST')
and object_type = 'TABLE'
and name not like 'BIN$%'
union all
select owner, name, column_name
from dba_subpart_key_columns
where owner in ('TEST')
and object_type = 'TABLE'
and name not like 'BIN$%')
group by owner, name) col
where s.OWNER in ('TEST')
and not regexp_like(table_name, '[0-9]{3,8}')
and s.table_name not like '%BAK%'
and s.table_name not like '%A2K%'
and s.table_name not like 'BK%'
and s.table_name not like 'BIN%'
and s.OWNER = col.owner(+)
and s.TABLE_NAME = col.name(+)
order by s.TABLE_NAME ;
c_row c_cursor%rowtype;
t_rows number;
begin
for c_row in c_cursor loop
begin
execute immediate 'select count(*) from bk_count_tables where owner=:1 and TABLE_NAME=:2 and rownum=1'
into t_rows using c_row.OWNER,c_row.TABLE_NAME ;
if(t_rows = 0) then
execute immediate 'select count(*) from "'||c_row.TABLE_NAME||'"' into t_rows;
insert into bk_count_tables values(c_row.OWNER,c_row.TABLE_NAME,c_row.part_col,t_rows,sysdate);
commit;
end if;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(c_row.OWNER||'---'||c_row.TABLE_NAME);
rollback;
end;
end loop;
end;
/
總結(jié)
以上所述是小編給大家介紹的Oracle 統(tǒng)計(jì)用戶下表的數(shù)據(jù)量實(shí)現(xiàn)腳本,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- PDO取Oracle lob大字段,當(dāng)數(shù)據(jù)量太大無(wú)法取出的問(wèn)題的解決辦法
- Oracle 12c新特性之如何檢測(cè)有用的多列統(tǒng)計(jì)信息詳解
- Oracle 11g收集多列統(tǒng)計(jì)信息詳解
- Oracle Translate 統(tǒng)計(jì)字符出現(xiàn)的次數(shù)示例代碼
- Oracle數(shù)據(jù)庫(kù)按時(shí)間進(jìn)行分組統(tǒng)計(jì)數(shù)據(jù)的方法
- oracle表空間中空表統(tǒng)計(jì)方法示例介紹
- oracle數(shù)據(jù)庫(kù)下統(tǒng)計(jì)專營(yíng)店的男女?dāng)?shù)量的語(yǔ)句
相關(guān)文章
Oracle DECODE 丟失時(shí)間精度的原因與解決方案
在Oracle數(shù)據(jù)庫(kù)中使用DECODE函數(shù)處理DATE類型數(shù)據(jù)時(shí),可能會(huì)丟失時(shí)分秒信息,這主要是因?yàn)镈ECODE在處理時(shí)進(jìn)行了自動(dòng)類型轉(zhuǎn)換,通常只比較日期部分,忽略時(shí)間部分,解決這一問(wèn)題的方法是使用CASE WHEN語(yǔ)句,它可以更精確地處理DATE類型數(shù)據(jù),避免時(shí)間信息的丟失2024-10-10
深入Oracle的left join中on和where的區(qū)別詳解
本篇文章是對(duì)Oracle的left join中on和where的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Oracle回滾段的概念,用法和規(guī)劃及問(wèn)題的解決
Oracle回滾段的概念,用法和規(guī)劃及問(wèn)題的解決...2007-03-03
在Oracle關(guān)閉情況下如何修改spfile的參數(shù)
大家都知道在Oracle中pfile參數(shù)是可以手動(dòng)更改的,但是spfile是二進(jìn)制文件所以不可以手動(dòng)更改,但我最近遇到了一個(gè)問(wèn)題,修改參數(shù)錯(cuò)誤,導(dǎo)致Oracle啟動(dòng)不了,一定要修改spfile該怎么辦呢?下面通過(guò)這篇文章來(lái)一起看看吧。2016-12-12
Oracle數(shù)據(jù)庫(kù)復(fù)雜度設(shè)置圖文教程
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)復(fù)雜度設(shè)置的相關(guān)資料,Oracle可以通過(guò)設(shè)置密碼復(fù)雜度來(lái)提高數(shù)據(jù)庫(kù)的安全性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
Oracle數(shù)據(jù)庫(kù)中的觸發(fā)器詳解
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)中觸發(fā)器的相關(guān)資料,觸發(fā)器也是保護(hù)數(shù)據(jù)完整性的一種重要方法,于存儲(chǔ)過(guò)程不同的是,觸發(fā)器是通過(guò)事件進(jìn)行觸發(fā)被執(zhí)行,存儲(chǔ)過(guò)程需要被調(diào)用執(zhí)行,需要的朋友可以參考下2024-02-02
Oracle遞歸查詢樹形數(shù)據(jù)實(shí)例代碼
Oracle數(shù)據(jù)庫(kù)中常要處理一些父子關(guān)系的記錄,在OLTP中要用得多一些,oracle提供了遞歸查詢可以很容易的滿足這個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于Oracle遞歸查詢樹形數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-11-11

