環境設定
set serveroutput on : 設定列印顯示
set pagesize n : 設定顯示寬度
set transaction read only : 設定唯讀事物,必須放在事物開始的第一條語句
alter session set
關鍵字
describe tablename : 檢視表結構
distinct : 去掉重複行
|| : 表示字元鏈結
truncate tablename : 刪除表的所有記錄,並釋放表空間,不能回滾
高水位問題(high water mark)
降低水位,執行下面命令:
alter table table_name enable row movement;
alter table table_name shrink space cascade;
--檢查表fnpops使用者空間是否正確
select * from user_all_tables where tablespace_name <> 'tablespace_name';
--改變當前使用者下表的表空間
select 'alter table '|| table_name ||' move tablespace tablespace_name;' from user_all_tables;
--建立表空間
create tablespace tablespace_name datafile 'd:\tsn1.dbf' size 100m autoextend on;
--查詢當前使用者下的所有索引
select 'alter index '|| index_name ||' rebuild tablespace tablespace_name;' from user_indexes;
--統計當前使用者下所有表的記錄數
select 'select '||chr(39)||table_name||chr(39)||' as table_name, count(1) from '||table_name||' union all '
from user_all_tables;
--表分析
select 'analyze table '|| table_name ||' compute statistics;' from user_all_tables;
鎖的問題
/* 使用者鎖,資料庫的鎖有的時候是比較耗費資源的,特別是發生鎖等待的時候,我們必須找到發生等待的鎖,有可能的話,殺掉該程序。
這個語句將查詢到資料庫中所有的dml語句產生的鎖,還可以發現,任何dml語句其實產生了兩個鎖,乙個是表鎖,乙個是行鎖。
可以通過alter system kill session 'sid,serial#' 來殺掉會話
*/ select /*+ rule */
s.username,
decode(l.type, 'tm', 'table lock', 'tx', 'row lock', null) lock_level,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
from v$session s, v$lock l, dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null
--alter system kill session '3214,4110' immediate;
/* 鎖與等待,如果發生了鎖等待,我們可能更想知道是誰鎖了表而引起誰的等待
以下的語句可以查詢到誰鎖了表,而誰在等待。
以上查詢結果是乙個樹狀結構,如果有子節點,則表示有等待發生。如果想知道鎖用了哪個回滾段,還可以關聯到v$rollname,其中xidusn就是回滾段的usn
*/ select /*+ rule */
lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username user_name,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#
from v$locked_object l, dba_objects o, v$session s
where l.object_id = o.object_id
and l.session_id = s.sid
order by o.object_id, xidusn desc
/* 如果發生了事務或鎖,想知道哪些回滾段正在被使用嗎?其實通過事務表,我們可以詳細的查詢到事務與回滾段之間的關係。
同時,如果關聯會話表,我們則可以知道是哪個會話發動了這個事務。
*/ select s.username,
s.sid,
s.serial#,
t.ubafil "uba filenum",
t.ubablk "uba block number",
t.used_ublk "number os undo blocks used",
t.start_time,
t.status,
t.start_scnb,
t.xidusn rollid,
r.name rollname
from v$session s, v$transaction t, v$rollname r
where s.saddr = t.ses_addr
and t.xidusn = r.usn
oracle原理 Oracle高水位線
oracle高水位線的概念 oracle裡面的物件放到儲存級別都稱為segment 段 比如表段,索引段,回滾段等,這些知識segment的邏輯描述。下面就拿錶段為例解釋下。在create table的時候可以指定分配給table的初始空間的大小,一般是都少個extent 區間 extent就是多個...
ORACLE的高水位線
這幾天一直在看乙個問題,乙個統計程式突然統計的資料量不正常了,從頭查到尾,覺得程式和配置都沒有問題,但就是統計出的結果不對,但發現有乙個程式的入庫檔案還存留很多,推斷可能是資料還沒入庫完全,但是什麼導致的呢,以為是那部分檔案太大,入庫太慢,但後來發現還是資料庫的問題,乙個temp表查詢空表都花費很長...
oracle 高水位線詳解
一 什麼是水線 high water mark 所有的oracle段 segments,在此,為了理解方便,建議把segment作為表的乙個同義詞 都有乙個在段內容納資料的上限,我們把這個上限稱為 high water mark 或hwm。這個hwm是乙個標記,用來說明已經有多少沒有使用的資料塊分配...