Oracle知識集錦:對Oracle資料庫進行監控檢查
整理了一些Oracle基礎知識,與大家分享。
1、如何對Oracle資料庫進行監控檢查
sqlplus '/as sysdba'
手動產生一個oracle資料庫的快照
execute dbbms_workload_repository.create_snapshot();
執行自動工作負載庫的sql指令碼
@?/rdbms/admin/awrrpt.sql; @表示在資料庫中執行sql指令碼,?指$ORACLE_HOME目錄
接著輸入想要分析的時間數字即可
預設匯出的是html格式
產生自動診斷報告
sqlplus / as sysdba
@?/rdbms/admin/addmrpt.sql
然後輸入相應的數字
2、Oracle完全之dbf檔案出現問題, ORA-01219
alter database datafile '/data/app/oradata/ora237/users01.dbf' offline drop;
強制移除該故障檔案
3、檢查Oracle資料庫和日常維護資料庫
檢查資料庫日誌
資料庫最重要的日誌為警告日誌,alert_sid.log 一般位於$ORACLE_BASE/admin/ORACLE_SID/bdump 目錄下
也可以在資料庫中執行
show parameter background_dump_dest;
根據上面返回結果使用cat查看,重點關注ORA-或者Errors關鍵字
檢查資料庫的資料檔案是否為自動擴充
select file_id,file_name,tablespace_name,autoextensible from dba_data_files;
4、Oracle之logminer日誌分析
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select sysdate from dual;
執行增刪操作
alter system switch logfile; 切換當前的重做日誌已以產生歸檔日誌(相當於將之後的操作重新放到另一個日誌中)
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 修改格式方便查看
select sequence#,first_time from v$log_history order by first-time desc;
歸檔日誌預設放在/u01/app/oracle/flash_recovery_area/ORCL/archivelog
查看分析日誌
select t.FIRST_TIME,t.NAME from v$archived_log t order by t.FIRST_TIME desc;
使用logminer分析資料
conn /as sysdba
execute dbma_logmnr.add_logfile(logfilename=>'/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011-05_04/01_mf_1_12_6w0mmgmd_.arc',options=>dbms_logmnr.new);
啟動logminer
execute dbms_logmnr.start_logmnr (options=>dbms_logmnr.dict_from_online_catalog);
把分析資料放入表中,並把表的許可權授權給普通使用者
create table logminer_20110504 tablespace BANK_TBS as select * from v$logmnr_contents;
grant select on logminer_20110504 to bankuser;
結束logminer分析
execute dbms_logmnr.end_logmnr;
查看分析日誌結果
select t.timestamp,t.sql_redo,t.sql_undo from sys.logminer_20110504 t where t.seg_owner='BANKUSER' and t.sql_undo is not null;
5、Oracle審計的啟用與取消
審計audit使用者見識使用者所執行的操作,並且oracle會將審計跟蹤結果存放到os檔案或資料庫中
啟用審計
conn /as sysdba
show parameter audit_sys_operations; 查看審計參數
alter system set audit_sys_operations=TRUE scope=spfile; 設定審計參數為true
alter system set audit_trail=db scope=spfile;
startup force; 重啟生效
show parameter audit_sys_operations; 查看審計參數
定義需要審計的表
execute dbms_fga.add_policy(object_schema=>'bankuser',object_name=>'emp',policy_name=>'chk_emp',statement_types=>'insert,update,delete');
給普通使用者授權查看 審計表
grant select on dba_fga_audit_trail to bankuser;
執行增刪操作,查看對錶的審計
select t.timestamp,t.sql_text from sys.dba_fga_audit_trail t;
取消審計
execute dbms_fga.drop_policy(object_schema=>'bankuser',object_name=>'emp',policy_name=>'chk_emp');
6、把Oracle資料庫恢複到某個時間點或者某個scn
alter session set nls_date_format='yyyymmdd hh24:mi:ss';
select sysdate from dual;
conn dbauser/123456; 隨便一個使用者,然後刪除其中的一張表用來做測試
drop table test;
rman target/
startup mount;
restore database; 還原資料檔案
sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"'; 因為在rman中執行,所以需要sql ‘’;
recover database until time '20110414 11:33:56'; 恢複到這個時間的資料,執行之後需要重建重做記錄檔
sql 'alter database open resetlogs';
scn是指系統改變號,oracle資料庫使用它來記錄資料庫的過去時間內的狀態和軌跡
conn /as sysdba
select dbms_flashback.get_system_chage_number from dual;
select to_char(scn_to_timestamp(963959),'YYYY-MM-DD HH24:MI:SS') from dual; 將scn轉換為時間
select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where rownum<10; 根據使用者刪除資料時間找出相應的scn號
rman target/
startup mount;
restore database; 還原資料檔案
recover database until scn 963915;
sql 'alter database open resetlogs'; 重建重做記錄檔
7、Oracle重做記錄檔硬碟壞掉解決方案
rman target/
list backup;
list backup summary;
刪除資料庫資料檔案夾下的log日誌,例如/u01/app/oracle/oradata/ORCL下的所有尾碼為log的檔案
sqlplus / as sysdba
alter system switch logfile; 因為沒有重做記錄檔,會一直處於等待裝填,如果需要切換日誌,資料庫將會報錯
shutdown immediate;
startup 也會報錯
recover database until cancel; 重新設定oracle資料庫的重做記錄檔(這種恢複屬於不完全恢複資料庫)
alter database open resetlogs; 重建重做檔案
archive log list; 查看日誌
8、Oracle使用flashback時,沒有顯示undosql
這是因為oracle11g沒有開啟這個功能
用管理使用者sys(也就是sysdba)執行以下語句即可
alter databases add supplemental log data;
如果我們想恢複某些資料,執行(查看誤操作的sql語句,例如我們不小心刪除了test表的某條資料,再從下面的結果中複製insert語句並執行即可)
select undo_sql from flashback_transaction_query where table_name='TEST'; #注意oracle中where後面的表名需為大寫,否則會提示找不到表
顯示在前面的結果為最新的操作
將scott使用者的test表恢複到10分鐘前的資料
flashback select * from scott.test to timestamp sysdate-10/1440;
不小心誤刪某個資料庫表,使用flashback恢複
create table test(a int) tablespace USERS; 後面tablespace部分不能缺少,否則刪除後無法進入資源回收筒
drop table test;
flashback table test to before drop; 原資料庫表裡面的資料也恢複了
9、Oracle資料庫經常提示27102 out of memory解決方案
網上有很多解決方案,但是我一個也看不懂,不知道寫的什麼鬼的東西,為什麼一句話就能解決的事,非得長篇大論說原理是什麼,看得一臉懵逼
我的解決方案入戲
vi /etc/sysctl.conf
修改kernel.shmall(共用記憶體總量)的值,該值原來為2097152,我把它給為4097152(暫時不知道應該改什麼值,但是把這個值變大就對了,我就是隨便吧第一位的2改為4,然後問題就自動解決)了,然後sqlplus / as sysdba
執行select status from v$instance;沒有再提示out of memory錯誤,而是正常顯示open
https://www.bkjia.com/topicnews.aspx?tid=12
本文永久更新連結地址:https://www.bkjia.com/Linux/2018-02/151089.htm