當前位置:首頁 » 數據倉庫 » oracle資料庫表統計
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle資料庫表統計

發布時間: 2022-12-06 02:48:19

Ⅰ 怎麼在oracle資料庫中想統計一個用戶下所有表的記錄的總條數

analyze table table_name COMPUTE STATISTICS
對表分析後在使用
select count(^) from table_name
如果你的table_name 有主鍵 ID
select count(ID) from table_name 在統計的時候會用到主鍵索引

Ⅱ 怎麼統計oracle資料庫下所有表的數量

select count(*) from user_tables;-----某個用戶下所有表
select count(*) from dba_tables;------資料庫下所有表

Ⅲ 如何在oracle中查詢每個表的記錄條數

如何在oracle中查詢每個表的記錄條數
可用兩種方法,一種是在oracle的系統表中統計,另一種需要寫存儲過程統計,方法分別如下。
1、系統表中統計:

1

SELECT sum(num_rows) FROM user_tables;

結果:

2、存儲過程統計,代碼如下:

declare
v_tName varchar(50);
v_sqlanalyze varchar(500);
v_num number;
v_sql varchar(500);
cursor c1
is
select table_name from user_tables;
begin
open c1;
loop
fetch c1 into v_tName;
if c1%found then

v_sqlanalyze :='analyze table '||v_tName||' estimate statistics';
execute immediate v_sqlanalyze;
v_sql := 'select NUM_ROWS from user_tables where table_name =upper('''||v_tName||''')';

execute immediate v_sql into v_num;
dbms_output.put_line('表名: '||v_tName||' 行數: '||v_num);
else
exit;
end if;
end loop;
end;

Ⅳ oracle資料庫 ,想統計一個用戶下,所有表的記錄的總條數,用什麼語句可以實現

1. 查看資料庫的版本
select @@version
2. 查看資料庫所在機器操作系統參數
exec master..xp_msver
3. 查看資料庫啟動的參數
sp_configure
4. 查看資料庫啟動時間
select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1
查看資料庫伺服器名和實例名
print 'Server Name...............:' + convert(varchar(30),@@SERVERNAME)
print 'Instance..................:' + convert(varchar(30),@@SERVICENAME)
5. 查看所有資料庫名稱及大小
sp_helpdb
重命名資料庫用的SQL
sp_renamedb 'old_dbname', 'new_dbname'
6. 查看所有資料庫用戶登錄信息
sp_helplogins
查看所有資料庫用戶所屬的角色信息
sp_helpsrvrolemember
修復遷移伺服器時孤立用戶時,可以用的fix_orphan_user腳本或者LoneUser過程
更改某個數據對象的用戶屬主
sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'
注意:更改對象名的任一部分都可能破壞腳本和存儲過程。
把一台伺服器上的資料庫用戶登錄信息備份出來可以用add_login_to_aserver腳本
查看某資料庫下,對象級用戶許可權
sp_helprotect
7. 查看鏈接伺服器
sp_helplinkedsrvlogin
查看遠端資料庫用戶登錄信息
sp_helpremotelogin
8.查看某資料庫下某個數據對象的大小
sp_spaceused @objname
還可以用sp_toptables過程看最大的N(默認為50)個表
查看某資料庫下某個數據對象的索引信息
sp_helpindex @objname
還可以用SP_NChelpindex過程查看更詳細的索引情況
SP_NChelpindex @objname
clustered索引是把記錄按物理順序排列的,索引占的空間比較少。
對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數都用默認值。
查看某資料庫下某個數據對象的的約束信息
sp_helpconstraint @objname
9.查看資料庫里所有的存儲過程和函數
use @database_name
sp_stored_proceres
查看存儲過程和函數的源代碼
sp_helptext '@procere_name'
查看包含某個字元串@str的數據對象名稱
select distinct object_name(id) from syscomments where text like '%@str%'
創建加密的存儲過程或函數在AS前面加WITH ENCRYPTION參數
解密加密過的存儲過程和函數可以用sp_decrypt過程
10.查看資料庫里用戶和進程的信息
sp_who
查看SQL Server資料庫里的活動用戶和進程的信息
sp_who 'active'
查看SQL Server資料庫里的鎖的情況
sp_lock
進程號1--50是SQL Server系統內部用的,進程號大於50的才是用戶的連接進程.
spid是進程編號,dbid是資料庫編號,objid是數據對象編號
查看進程正在執行的SQL語句
dbcc inputbuffer ()
推薦大家用經過改進後的sp_who3過程可以直接看到進程運行的SQL語句
sp_who3
檢查死鎖用sp_who_lock過程
sp_who_lock
11.查看和收縮資料庫日誌文件的方法
查看所有資料庫日誌文件大小
dbcc sqlperf(logspace)
如果某些日誌文件較大,收縮簡單恢復模式資料庫日誌,收縮後@database_name_log的大小單位為M
backup log @database_name with no_log
dbcc shrinkfile (@database_name_log, 5)
12.分析SQL Server SQL 語句的方法:
set statistics time
set statistics io
圖形方式顯示查詢執行計劃
在查詢分析器-查詢-顯示估計的評估計劃(D)-Ctrl-L 或者點擊工具欄里的圖形
文本方式顯示查詢執行計劃
set showplan_all
set showplan_text
set statistics profile
13.出現不一致錯誤時,NT事件查看器里出3624號錯誤,修復資料庫的方法
先注釋掉應用程序里引用的出現不一致性錯誤的表,然後在備份或其它機器上先恢復然後做修復操作
alter database [@error_database_name] set single_user
修復出現不一致錯誤的表
dbcc checktable('@error_table_name',repair_allow_data_loss)
或者可惜選擇修復出現不一致錯誤的小型資料庫名
dbcc checkdb('@error_database_name',repair_allow_data_loss)
alter database [@error_database_name] set multi_user
CHECKDB 有3個參數:
repair_allow_data_loss 包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤,以及刪除已損壞的文本對象,這些修復可能會導致一些數據丟失。
修復操作可以在用戶事務下完成以允許用戶回滾所做的更改。
如果回滾修復,則資料庫仍會含有錯誤,應該從備份進行恢復。
如果由於所提供修復等級的緣故遺漏某個錯誤的修復,則將遺漏任何取決於該修復的修復。
修復完成後,請備份資料庫。
repai*_**st 進行小的、不耗時的修復操作,如修復非聚集索引中的附加鍵。
這些修復可以很快完成,並且不會有丟失數據的危險。
repair_rebuild 執行由 repai*_**st 完成的所有修復,包括需要較長時間的修復(如重建索引)。
執行這些修復時不會有丟失數據的危險。
添加、刪除、修改使用db.Execute(Sql)命令執行操作
╔--------------------╗
☆ 數據記錄篩選 ☆
╚--------------------╝
注意:單雙引號的用法可能有誤(沒有測式)
Sql = Select Distinct 欄位名 From 數據表
Distinct函數,查詢資料庫存表內不重復的記錄
Sql = Select Count(*) From 數據表 where 欄位名1#18:0:0# and 欄位名1 #19:00#
count函數,查詢數庫表內有多少條記錄,「欄位名1」是指同一欄位
例:
set rs=conn.execute(select count(id) as idnum from news)
response.write rs(idnum)
sql=select * from 數據表 where 欄位名 between 值1 and 值2
Sql=select * from 數據表 where 欄位名 between #2003-8-10# and #2003-8-12#
在日期類數值為2003-8-10 19:55:08 的欄位里查找2003-8-10至2003-8-12的所有記錄,而不管是幾點幾分。
select * from tb_name where datetime between #2003-8-10# and #2003-8-12#
欄位裡面的數據格式為:2003-8-10 19:55:08,通過sql查出2003-8-10至2003-8-12的所有紀錄,而不管是幾點幾分。
Sql=select * from 數據表 where 欄位名=欄位值 order by 欄位名 [desc]
Sql=select * from 數據表 where 欄位名 like '%欄位值%' order by 欄位名 [desc]
模糊查詢
Sql=select top 10 * from 數據表 where 欄位名 order by 欄位名 [desc]
查找資料庫中前10記錄
Sql=select top n * form 數據表 order by newid()
隨機取出資料庫中的若干條記錄的方法
top n,n就是要取出的記錄數
Sql=select * from 數據表 where 欄位名 in ('值1','值2','值3')
╔--------------------╗
☆ 添加數據記錄 ☆
╚--------------------╝
sql=insert into 數據表 (欄位1,欄位2,欄位3 …) valuess (值1,值2,值3 …)
sql=insert into 數據表 valuess (值1,值2,值3 …)
不指定具體欄位名表示將按照數據表中欄位的順序,依次添加
sql=insert into 目標數據表 select * from 源數據表
把源數據表的記錄添加到目標數據表
╔--------------------╗
☆ 更新數據記錄 ☆
╚--------------------╝
Sql=update 數據表 set 欄位名=欄位值 where 條件表達式
Sql=update 數據表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件表達式
Sql=update 數據表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n
沒有條件則更新整個數據表中的指定欄位值
╔--------------------╗
☆ 刪除數據記錄 ☆
╚--------------------╝
Sql=delete from 數據表 where 條件表達式
Sql=delete from 數據表
沒有條件將刪除數據表中所有記錄)
╔--------------------------╗
☆ 數據記錄統計函數 ☆
╚--------------------------╝
AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把數據欄的值相加
引用以上函數的方法:
sql=select sum(欄位名) as 別名 from 數據表 where 條件表達式
set rs=conn.excute(sql)
用 rs(別名) 獲取統的計值,其它函數運用同上。
╔-----------------------------╗
☆ 數據表的建立和刪除 ☆
╚-----------------------------╝
CREATE TABLE 數據表名稱(欄位1 類型1(長度),欄位2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數據表名稱 (永久性刪除一個數據表)
╔--------------------------╗
☆ 記錄集對象的方法 ☆
╚--------------------------╝
rs.movenext 將記錄指針從當前的位置向下移一行
rs.moveprevious 將記錄指針從當前的位置向上移一行
rs.movefirst 將記錄指針移到數據表第一行
rs.movelast 將記錄指針移到數據表最後一行
rs.absoluteposition=N 將記錄指針移到數據表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設置每頁為N條記錄
rs.pagecount 根據 pagesize 的設置返回總頁數
rs.recordcount 返回記錄總數
rs.bof 返回記錄指針是否超出數據表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數據表末端,true表示是,false為否
rs.delete 刪除當前記錄,但記錄指針不會向下移動
rs.addnew 添加記錄到數據表末端
rs.update 更新數據表記錄
用Oracle資料庫!!!!!!!!!!!!!!

Ⅳ 怎麼在oracle資料庫中想統計一個用戶下所有表的記錄的總條數

如果是oracle9i版本,可以考慮如下兩步實現:
(10g直接執行第二步就可以了)
統計一個用戶下所有表的行數:
1.exec
dbms_stats.gather_schema_stats(owner=>'用戶名');
2.select
sum(num_rows)
from
user_tables;
統計全庫所有表的行數:
1.exec
dbms_stats.gather_database_stats(estimate_percent=>'30');
2.select
sum(num_rows)
from
dba_tables;
生產環境中需謹慎考慮收集新的統計信息後對應用產生的影響。

Ⅵ Oracle資料庫按時間進行分組統計數據的方法

Oracle按不同時間分組統計的sql
如下表table1:
日期(exportDate)
數量(amount)
--------------
-----------
14-2月
-08
20
10-3月
-08
2
14-4月
-08
6
14-6月
-08
75
24-10月-09
23
14-11月-09
45
04-8月
-10
5
04-9月
-10
44
04-10月-10
88
注意:為了顯示更直觀,如下查詢已皆按相應分組排序
1.按年份分組
select
to_char(exportDate,'yyyy'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy');
年份
數量
-----------------------------
2009
68
2010
137
2008
103
2.按月份分組
select
to_char(exportDate,'yyyy-mm'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy-mm')
order
by
to_char(exportDate,'yyyy-mm');
月份
數量
-----------------------------
2008-02
20
2008-03
2
2008-04
6
2008-06
75
2009-10
23
2009-11
45
2010-08
5
2010-09
44
2010-10
88
3.按季度分組
select
to_char(exportDate,'yyyy-Q'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy-Q')
order
by
to_char(exportDate,'yyyy-Q');
季度
數量
------------------------------
2008-1
22
2008-2
81
2009-4
68
2010-3
49
2010-4
88
4.按周分組
select
to_char(exportDate,'yyyy-IW'),sum(amount)
from
table1
group
by
to_char(exportDate,'yyyy-IW')
order
by
to_char(exportDate,'yyyy-IW');

數量
------------------------------
2008-07
20
2008-11
2
2008-16
6
2008-24
75
2009-43
23
2009-46
45
2010-31
5
2010-35
44
2010-40
88
PS:Oracle按時間段分組統計
想要按時間段分組查詢,首先要了解level,connect
by,oracle時間的加減.
關於level這里不多說,我只寫出一個查詢語句:
----level
是一個偽例
select
level
from
al
connect
by
level
<=10
---結果:
1
2
3
4
5
6
7
8
9
10
oracle時間的加減看看試一下以下sql語句就會知道:
select
sysdate
-1
from
al
----結果減一天,也就24小時
select
sysdate-(1/2)
from
al
-----結果減去半天,也就12小時
select
sysdate-(1/24)
from
al
-----結果減去1
小時
select
sysdate-((1/24)/12)
from
al
----結果減去5分鍾
select
sydate-(level-1)
from
al
connect
by
level<=10
---結果是10間隔1天的時間
下面是本次例子:
select
dt,
count(satisfy_degree)
as
num
from
T_DEMO
i
,
(select
sysdate
-
(level-1)
*
2
dt
from
al
connect
by
level
<=
10)
d
where
i.satisfy_degree='satisfy_1'
and
i.insert_time<dt
and
i.insert_time>
d.dt-2
group
by
d.dt

例子中的sysdate
-
(level-1)
*
2得到的是一個間隔是2天的時間
group
by
d.dt
也就是兩天的時間間隔分組查詢
自己實現例子:
create
table
A_HY_LOCATE1
(
MOBILE_NO
VARCHAR2(32),
LOCATE_TYPE
NUMBER(4),
AREA_NO
VARCHAR2(32),
CREATED_TIME
DATE,
AREA_NAME
VARCHAR2(512),
);
select
(sysdate-13)-(level-1)/4
from
al
connect
by
level<=34
--從第一條時間記錄開始(sysdate-13)為表中的最早的日期,「34」出現的分組數(一天按每六個小時分組
就應該為4)
一下是按照每6個小時分組
select
mobile_no,area_name,max(created_time
),dt,
count(*)
as
num
from
a_hy_locate1
i
,
(select
(sysdate-13)-(level-1)/4
dt
from
al
connect
by
level
<=
34)
d
where
i.locate_type
=
1
and
i.created_time<dt
and
i.created_time>
d.dt-1/4
group
by
mobile_no,area_name,d.dt

另外一個方法:
--按六小時分組
select
trunc(to_number(to_char(created_time,
'hh24'))
/
6),count(*)
from
t_test
where
created_time
>
trunc(sysdate
-
40)
group
by
trunc(to_number(to_char(created_time,
'hh24'))
/
6)
--按12小時分組
select
trunc(to_number(to_char(created_time,
'hh24'))
/
6),count(*)
from
t_test
where
created_time
>
trunc(sysdate
-
40)
group
by
trunc(to_number(to_char(created_time,
'hh24'))
/
6)

Ⅶ 怎麼統計oracle資料庫下某個用戶的表的數量

create or replace procere tj_data is
-- 當前存儲過程用到的變數
v_tableName VARCHAR2(100);
v_sql varchar2(200);
v_count integer;
-- 獲取當前資料庫中的所有表
CURSOR TABLE_LOOP IS SELECT Table_name FROM User_tables;
BEGIN
-- 打開游標
OPEN TABLE_LOOP;
LOOP
FETCH TABLE_LOOP INTO v_tableName;
EXIT WHEN TABLE_LOOP %NOTFOUND;
v_sql:= 'select count(1) from '||v_tableName;
execute immediate v_sql into v_count;
dbms_output.put_line(v_tableName||':'||v_count);
END LOOP;
CLOSE TABLE_LOOP;
end tj_data;
使用pl/Sql運行該存儲過程,在DBMS Output窗口下可看到統計結果。(把Buffer size值適當調大一點)

Ⅷ 如何在oracle資料庫中查詢記錄總條數

方法和詳細的操作步驟如下:

1、第一步,查詢該庫中的所有表,測試sql,代碼見下圖,轉到下面的步驟。

Ⅸ oracle表統計信息多久會被更改

31天。oracle表統計信息的持久時間是31天,在超出這個時間就是會被更改的,非常的標准。Oracle的統計信息是這樣的一組數據,存儲在數據字典,從多個維度描述了oracle資料庫對象的詳細信息。