天天看點

資料庫日常運維中的幾個操作建議

    如果你去看其他DBA的操作的時候,如果要判斷他們水準的高低,我想就是通過一些操作的差别來看了,而水準高低就展現于此。細節決定成敗,越是看起來簡單的操作越是要嚴謹,一絲不苟。

我們來簡單舉幾個例子,可以作為參考。有更多的見解歡迎大家提出來,我們來集思廣益,把大家認為需要的,重要的操作都整理成可行的,實用的。

1.停止資料庫

shutdown immediate應該是停止資料庫的首先方案,而如果你選擇shutdown abort的方式,先去面壁。

在删除資料庫之前,你需要考慮哪些方面呢。

    首先你需要判斷這是一個主庫還是備庫,

select database_role from v$database;

如果顯示為Primary,那就一定要小心了。你是否确實要停這個庫

    然後檢視資料庫的狀态

select open_mode from v$database;

有RAED ONLY,READ WRITE,MOUNTED幾種狀态

    然後檢視會話的使用情況

select username,count(*)from v$session group by username;

這個步驟是停止資料庫必看,如果已經有會話一定要确認是否需要停止應用端,是否連接配接了正确的資料庫。

明确了以上的基本條件,确認沒有相關的會話,那就可以shutdown immediate了。

2.啟動資料庫

資料庫啟動中的問題較多,我隻是簡單給出幾個概要步驟,如果你啟動資料庫是直接一條指令startup,也需要面壁

啟動最起碼是從nomount,mount,open這幾個階段一步一步來。尤其是哪些異常當機的資料庫,你的有些不經意的操作就會使得恢複從可能變為不可能。在此主要說計劃内的資料庫重新開機。

首先是startup nomount這個階段啟動之後,還是需要檢視是否啟用spfile,使用show parameter spfile來看,然後檢視資料庫日志,啟動的過程中是否有一些異常,大頁是否開啟,是否有NUMA的報警,是否有memlock的報警。

alter database mount,資料庫啟動到這個階段本身不難,但是這個階段是一個分水嶺,資料庫還原恢複相關的操作都需要在這個階段完成

是以我們需要檢視v$recover_file是否資料檔案狀态都正常.

如果需要更多的恢複,這個階段就要把握好了。

最後是alter database open階段,資料庫是否可用就在這個階段了。可用使用select open_mode,database_role from v$database來檢視.

計劃外的場景要複雜的多,就不再贅述了。

3.殺掉會話

殺掉會話,整個世界就清淨了。但是kill session這種操作還是有些建議。

首先我們得到的是一個基本的資訊,session的sid,serial#資訊,我們在kill  之前還是需要做一些簡單的準備工作。

select paddr,username,osuser,machine from v$session where sid=xxx and serial#='xxxx';

得到了會話的基本資訊之後,我們在資料庫中關聯程序得到系統的程序pid,主要适應輸出的paddr字段。

然後關聯v$process來得到對應的程序号。

select spid from v$process where addr='xxxxx'

如果确認需要kill  session,則有很大的餘地,如果清理資料庫層面的會話有一些較大的延遲,我們可以直接清理系統級程序,否則這個過程就會麻煩很多。

4.建立使用者

如果有一天,接到了一個需求是建立一個使用者,需要有查詢表test_tab的權限即可。對于這個需求我們還是需要考慮很多的方面。

--查詢表屬主

select SYNONYM_NAME, TABLE_OWNER, TABLE_NAME from dba_synonyms where SYNONYM_NAME=upper(‘test_tab’);

--建立profile,限制通路的會話數

create profile app_smartpt_db_profile limit SESSIONS_PER_USER 5;  

--建立使用者

create user app_smartpt_db identified by xxx;

alter user app_smartpt_db profile app_smartpt_db_profile;

--或

--create user app_smartpt_db identified by asdfwegweger profile app_smartpt_db_profile;

--授權,注意此處,多一點權限都不多給

grant create session to app_smartpt_db;

grant select on ACCSTAT.security_phone_apply to app_smartpt_db;

--建立同義詞

create synonym app_smartpt_db.test_tab for ACCSTAT.test_tab;

是以不要忽視這些看起來很簡單的操作。