oracle瞎記 鎖和高水位

2021-08-30 16:54:15 字數 2987 閱讀 1885

環境設定

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是乙個標記,用來說明已經有多少沒有使用的資料塊分配...