1. 程式人生 > >Oracle 11g R2 常見問題處理

Oracle 11g R2 常見問題處理

最好 sed 時報 ces ogr 警告日誌 data parameter rdbms

--======================查詢Oracle錯誤日誌和警告日誌

通過命令查看錯誤日誌目錄
SQL> show parameter background_dump_dest;
根據錯誤提示的PID:3159 模糊查詢對應的錯誤日誌
find -name "*ora*3159*.trc"
more orcl_ora_3159.trc

查詢歸檔日誌
SQL> select * from v$recovery_file_dest;

刪除歸檔日誌
$ rman
RMAN> connect target sys/xxxxx
RMAN> crosscheck archivelog all;

RMAN> delete ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

查詢警告日誌
$ find -name "alert*.log"
$ more alert_orcl.log;


--======================強制中止正在執行的SQL語句

-- 1 查詢正在執行的sql語句
select b.sid, b.username, b.serial#, a.spid, b.paddr, c.sql_text, b.machine
from v$process a, v$session b, v$sqlarea c

where a.addr = b.paddr
and b.sql_hash_value = c.hash_value;

-- 2 根據sid與serial# kill 需要中止的sql語句
select sql_text, b.sid,b.serial#, 'alter system kill session'''||b.SID||','||b.serial#||''';',b.username
from v$process a, v$session b, v$sqlarea c
where a.addr = b.paddr

and b.sql_hash_value = c.hash_value

-- 3 查詢oracle當前被鎖對象
select a.session_id, c.serial#, a.locked_mode, a.oracle_username, a.os_user_name, c.machine,
c.terminal, b.object_name, c.logon_time
from v$locked_object a, all_objects b, v$session c
where a.object_id = b.object_id and a.session_id = c.sid
order by c.sid, c.serial#;


--======================表空間不足引起的問題及解決方法

-- 1 向數據庫導入數據時報了ORA-01653: unable to extend table錯誤,網上查了下原因是由於表空間不足引起的;

查詢表空間使用情況語句

select a.tablespace_name,a.bytes/1024/1024 total, (a.bytes-b.bytes)/1024/1024 used, b.bytes/1024/1024 free, round((a.bytes-b.bytes)/a.bytes*100,2) used_rate
from
(
select tablespace_name,sum(bytes) bytes
from dba_data_files
group by tablespace_name
) a,
(
select tablespace_name,sum(bytes) bytes,max(bytes) largest
from dba_free_space
group by tablespace_name
) b
where a.tablespace_name = b.tablespace_name;


-- 2 以上語句可以查詢出表空間使用情況,如果發現表空間容量不足,查看數據文件文件所在位置及文件編號

查看數據文件位置
select file#, name from v$datafile;

-- 3 修改表空間大小有兩種方法

修改數據文件大小
alter database datafile '/usr/oracle/app/oradata/orcl/Test.dbf' resize 20480M; 修改後的大小要比實際大小大至少50%,最好大一倍以上

增加數據文件
alter tablespace XXX add datafile '/home/oracle/data/XXX_1.dbf' size 1024M;


1.生成單實例 AWR 報告:


@$ORACLE_HOME/rdbms/admin/awrrpt.sql


2.生成 Oracle RAC AWR 報告:


@$ORACLE_HOME/rdbms/admin/awrgrpt.sql


3.生成 RAC 環境中特定數據庫實例的 AWR 報告:


@$ORACLE_HOME/rdbms/admin/awrrpti.sql


4.生成 Oracle RAC 環境中多個數據庫實例的 AWR 報告的方法:


@$ORACLE_HOME/rdbms/admin/awrgrpti.sql


5.生成 SQL 語句的 AWR 報告:


@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql


6.生成特定數據庫實例上某個 SQL 語句的 AWR 報告:


@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql


--生成 AWR 時段對比報告


7.生成單實例 AWR 時段對比報告


@$ORACLE_HOME/rdbms/admin/awrddrpt.sql


9.生成 Oracle RAC AWR 時段對比報告


@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql


10.生成特定數據庫實例的 AWR 時段對比報告


@$ORACLE_HOME/rdbms/admin/awrddrpi.sql



--查詢redo log文件狀態

select * from v$log;
select * from v$logfile;


--查詢archive log目錄
select open_mode from v$database;
archive log list;
show parameter log_archive_dest;


--查詢alert日誌
show parameter background_dump_dest;



--查詢Oracle正在執行的sql語句及執行該語句的用戶

SELECT b.sid oracleID,
b.username 登錄Oracle用戶名,
b.serial#,
spid 操作系統ID,
paddr,
sql_text 正在執行的SQL,
b.machine 計算機名
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value

--查看正在執行sql的發起者的發放程序

SELECT OSUSER 電腦登錄身份,
PROGRAM 發起請求的程序,
USERNAME 登錄系統的用戶名,
SCHEMANAME,
B.Cpu_Time 花費cpu的時間,
STATUS,
B.SQL_TEXT 執行的sql
FROM V$SESSION A
LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS
AND A.SQL_HASH_VALUE = B.HASH_VALUE
ORDER BY b.cpu_time DESC

--查出oracle當前的被鎖對象

SELECT l.session_id sid,
s.serial#,
l.locked_mode 鎖模式,
l.oracle_username 登錄用戶,
l.os_user_name 登錄機器用戶名,
s.machine 機器名,
s.terminal 終端用戶名,
o.object_name 被鎖對象名,
s.logon_time 登錄數據庫時間
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;

--kill掉當前的鎖對象可以為

alter system kill session 'sid, s.serial#‘;





11.生成 Oracle RAC 環境下特定(多個)數據庫實例的 AWR 時段對比報告


@$ORACLE_HOME/rdbms/admin/awrgdrpi.sql

Oracle 11g R2 常見問題處理