如果你去看其他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;
所以不要忽视这些看起来很简单的操作。