Oracle知識集錦:對Oracle資料庫進行監控檢查

來源:互聯網
上載者:User

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.