Oracle11G日常维护手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle Database 日常维护手册
目录
1. 登陆到数据库.............................. 错误!未定义书签。
. 服务器端配置Listener ................. 错误!未定义书签。
. 客户端tnsnames ....................... 错误!未定义书签。
. 检查Oracle Listener .................. 错误!未定义书签。
. 登陆数据库的方式...................... 错误!未定义书签。
. 数据库的启动.......................... 错误!未定义书签。
. 关闭数据库 ........................... 错误!未定义书签。
2. 用户管理.................................. 错误!未定义书签。
. 检察用户profile ...................... 错误!未定义书签。
. 查看用户profile参数.................. 错误!未定义书签。
3. 检查数据库基本状况........................ 错误!未定义书签。
. 检查数据库创建日期.................... 错误!未定义书签。
. 检查数据库版本信息.................... 错误!未定义书签。
. 检查实例状态.......................... 错误!未定义书签。
. 查看前台进程.......................... 错误!未定义书签。
. 查看数据库连接的session .............. 错误!未定义书签。
. 查看连接到数据库的模式................ 错误!未定义书签。
. 查看并发连接数........................ 错误!未定义书签。
. 查看最大的连接'processes' ............. 错误!未定义书签。
. 监控系统后台进程...................... 错误!未定义书签。
. 查看数据库初始化参数................ 错误!未定义书签。
. 检查PGA使用情况.................... 错误!未定义书签。
. 检查SGA状态........................ 错误!未定义书签。
. 检查Oracle服务进程................. 错误!未定义书签。
. 检查Oracle监听状态................. 错误!未定义书签。
. 检查监听进程是否存在................ 错误!未定义书签。
. 检查操作系统日志文件................ 错误!未定义书签。
. 检查oracle日志文件................. 错误!未定义书签。
. 检查Oracle核心转储目录............. 错误!未定义书签。
. 检查Root用户和Oracle用户的email ... 错误!未定义书签。
4. 检查Oracle对象状态....................... 错误!未定义书签。
. 检查Oracle控制文件状态............... 错误!未定义书签。
. 检查Oracle在线日志状态............... 错误!未定义书签。
. 检查Oracle表空间的状态............... 错误!未定义书签。
. 检查Oracle所有数据文件状态........... 错误!未定义书签。
. 检查无效对象.......................... 错误!未定义书签。
. 检查所有回滚段状态.................... 错误!未定义书签。
. 检查用户下的表........................ 错误!未定义书签。
. 检查用户默认表空间.................... 错误!未定义书签。
. 检查当前用户角色及权限................ 错误!未定义书签。
. 检查用户下的各个表的大小............ 错误!未定义书签。
. 检查一个表的创建时间................ 错误!未定义书签。
. 检查某个表的大小.................... 错误!未定义书签。
. 检查每个表占用磁盘空间情况.......... 错误!未定义书签。
5. 检查Oracle相关资源的使用情况............. 错误!未定义书签。
. 检查Oracle初始化文件中相关参数值..... 错误!未定义书签。
. 检查数据库连接情况.................... 错误!未定义书签。
. 检查系统磁盘空间...................... 错误!未定义书签。
. 检查表空间使用情况.................... 错误!未定义书签。
. 检查一些扩展异常的对象................ 错误!未定义书签。
. 检查表空间碎片情况.................... 错误!未定义书签。
. 检查system表空间内的内容............. 错误!未定义书签。
. 检查对象的下一扩展与表空间的最大扩展值错误!未定义书签。
. 检查flash recovery area空间.......... 错误!未定义书签。
6. 检查Oracle数据库性能..................... 错误!未定义书签。
. 查询表空间读写情况.................... 错误!未定义书签。
. 查询redo log buffer的繁忙程度........ 错误!未定义书签。
. 判断undo表空间的使用情况............. 错误!未定义书签。
. 分析日志组切换频率.................... 错误!未定义书签。
. 查看等待事件.......................... 错误!未定义书签。
. 检查数据库cpu、I/O、内存性能......... 错误!未定义书签。
. 内存使用情况.......................... 错误!未定义书签。
. 系统I/O情况.......................... 错误!未定义书签。
. 系统负载情况.......................... 错误!未定义书签。
. 查看是否有僵死进程.................. 错误!未定义书签。
. 检查缓冲区命中率.................... 错误!未定义书签。
. 检查共享池命中率.................... 错误!未定义书签。
. 检查排序区.......................... 错误!未定义书签。
. 检查日志缓冲区...................... 错误!未定义书签。
. 检查失效的索引...................... 错误!未定义书签。
. 检查不起作用的约束.................. 错误!未定义书签。
. 检查无效的trigger ................... 错误!未定义书签。
. 检查尚未建立索引的表................ 错误!未定义书签。
. 检查运行时间长的SQL ................. 错误!未定义书签。
. 检查性能差的前10条SQL .............. 错误!未定义书签。
. 查看占 io 较大的正在运行的 session .. 错误!未定义书签。
. 检查消耗CPU最高的PID对应的SQL ..... 错误!未定义书签。
. 检查占用CPU多的session ............. 错误!未定义书签。
. 检查表空间的IO ...................... 错误!未定义书签。
. 检查临时表空间IO .................... 错误!未定义书签。
. 检查锁和等待........................ 错误!未定义书签。
7. 检查数据库安全性.......................... 错误!未定义书签。
. 检查系统安全日志信息.................. 错误!未定义书签。
. 检查登录失败的日志:.................. 错误!未定义书签。
. 检查用户修改密码...................... 错误!未定义书签。
8. 数据表空间日常维护........................ 错误!未定义书签。
. 查看表空间的一些信息.................. 错误!未定义书签。
. 创建表空间 ........................... 错误!未定义书签。
. 表空间扩容 ........................... 错误!未定义书签。
. 创建大数据文件........................ 错误!未定义书签。
. 数据表空间文件迁移.................... 错误!未定义书签。
. 不停机移动表空间文件.................. 错误!未定义书签。
9. 存储过程管理.............................. 错误!未定义书签。
. 找出特定用户的存储过程................ 错误!未定义书签。
. 通过表名找出存储过程.................. 错误!未定义书签。
. 查看存储过程内容...................... 错误!未定义书签。
10. 触发器管理 .............................. 错误!未定义书签。
. 找出数据库中所有触发器.............. 错误!未定义书签。
. 找出特定用户的触发器................ 错误!未定义书签。
. 找出当前用户定义的触发器............ 错误!未定义书签。
. 查看某个用户自定义的触发器内容...... 错误!未定义书签。
. 查看某个表关联的触发器.............. 错误!未定义书签。
. 查看当前用户所有触发器及存储过程 .... 错误!未定义书签。
11. Redo Log 管理 ........................... 错误!未定义书签。
. 离线迁移日志文件.................... 错误!未定义书签。
. 在线更改Redo Log文件容量........... 错误!未定义书签。
1.登陆到数据库
1.1.服务器端配置Listener
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY =racdb1))
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
#BEQUEATH CONFIG
(GLOBAL_DBNAME=racdb1)
(SID_NAME=racdb1)
(ORACLE_HOME=/u01/app/oracle/product/ #PRESPAWN CONFIG
(PRESPAWN_MAX=20)
(PRESPAWN_LIST=
(PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
)
)
)
说明
GLOBAL_DBNAME=racdb1
Service 名称,在客户端一定配置和他相同
SID_NAME=racdb1
实例名称,这个要和SID相同
GLOBAL_DBNAME可以不等于SID_NAME
客户端根据中的SERVICE_NAME和地址(ADDRESS = (PROTOCOL = TCP)(HOST =racdb1)(PORT = 1521)),到这个地址去访问监听器。
然后监听器根据文件文件中的GLOBAL_NAME来判断是否有一个GLOBAL_DBNAME 和 SERVICE_NAME 相等。
如果相等,则建立客户端到SID标识的服务端实例的连接,在客户端上我们可以使用tnsping 命令来测试
1.2.客户端tnsnames
racdb1 =
(description =
(address_list =
(address = (protocol = tcp)(host = )(port = 1521)) )
(connect_data =
(service_name =racdb1)(ur=a)
)
)
说明
这里的service_name =racdb1 就是在服务器端的GLOBAL_DBNAME=r acdb1
[oracle@racdb1 ~]$ tnsping racdb1
TNS Ping Utility for Linux: Version .0 - Production on 21-JAN-2015 14:51:49
Copyright (c) 1997, 2009, Oracle. All rights reserved.
TNS-03502: Insufficient arguments. Usage: tnsping <address> [<count>]
[oracle@racdb1 ~]$ tnsping racdb1
TNS Ping Utility for Linux: Version .0 - Production on 21-JAN-2015 14:51:55
Copyright (c) 1997, 2009, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (description = (address_list = (address = (protocol = tcp)(host = racdb1)(port = 1521))) (connect_data = (service_name = racdb1)(ur=a)))
OK (0 msec)
1.3.检查Oracle Listener
lsnrctl stop
lsnrctl start
lsnrctl status
lsnrctl service
1.4.登陆数据库的方式
说明
修改登陆oracle 认证模式
默认情况下我们oracle 安装好后是使用操作系统用户的验证,所以这里如果我们使用sys用户不用密码就可以登录,如果我们想使用oracle 密码文件验证的话我们就要进入下列文件夹
cd /u01/app/oracle/product/修改
增加下列命令
= NONE
说明
配置了tnsnames登录数据库方式
[oracle@racdb1 ~]$ sqlplus scott/111111@racdb1 sqlplus /nolog
使用scott登陆到指定数据库racdb1
conn sys/111111@racdb1 AS SYSDBA;
察看登陆到了哪个数据库实例
select instance_name from v$instance
使用sys用户登陆
conn sys/change_on_installer as sysdba
用sysdba 登陆
conn /as sysdba
使用sys用户登录
conn sys/change_on_install as sysdba; conn / as sysdba 连接数据库
conn scott/111111 使用scott进行连接1.5.数据库的启动
数据库启动方式
startup
启动实例、装载数据库、打开数据库
startup open racdb1
startup nomount
启动数据库实例, 该步骤只是启动了一个数据库实例.
在此状态下我们可以访问下列结构文件
Select * from v$instance;
Select * from v$bgprocess;
Select * from v$sga;
利用以前读取的参数文件查找控制文件,这些控制文件包含数据文件名和重做日志名,然后将数据库装载.
alter database mount
一旦这一步完成我们就可以看到下列状态
select * from v$database;
select * from v$tablespace;
select * from v$log;
实例验证数据文件及日志文件并启动数据库
alter database open;
打开数据库
startup restrict
启动过程中限制访问数据库
alter system enable restricted session
grant restrict session to scott
上述命令是只有用户拥有restrict 权限才可以连接
启动数据库后起的进程
select name, DESCRIPTION from v$bgprocess where paddr<>'00';
1.6.关闭数据库
shutdown normal
等待用户完成工作然后关闭
Shutdown transactional
等待用户完成工作但是强制关闭连接
shutdown immediate
立即关闭 ,当前所有做工作回滚到一致状态,断开其连接shutdown abort
强制关闭,非干净关闭,下次重起后要回滚日志
2.用户管理
2.1.检察用户profile
2.2.查看用户profile参数
3.检查数据库基本状况3.1.检查数据库创建日期
3.2.检查数据库版本信息
3.3.检查实例状态
其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DA
TABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
其中“LOG_MODE”表示Oracle当前的归档方式。
“ARCHIVELOG”表示数据库运行在归档模式下,“NOARCHIVELOG”表示数据库运行在非归档模式下。
在我们的系统中数据库必须运行在归档方式下。
3.4.查看前台进程
说明
Oracle 的前台进程是操作系统进程,它和oracle session 一一对应,官方建议,oracle sesson
=*process +20
3.5.查看数据库连接的session
3.6.查看连接到数据库的模式
说明
(S012)以s001等就是共享模式连接3.7.查看并发连接数
3.8.查看最大的连接'processes'
3.9.监控系统后台进程
3.10.查看数据库初始化参数
说明
这些参数是当前数据库已经应用的参数3.11.检查PGA使用情况
3.12.检查SGA状态
说明
期望结果:request_misses和request_failures应该接近于0。
巡检说明:request_misses是保留列表没有满足请求的可用内存片从而开始利用LRU列表刷新对象的次数;request_failures是未找到满足请求的内存次数。
3.13.检查Oracle服务进程
oracle 4461 1 0 15:53 00:00:17 ora_vktm_racdb1
oracle 4465 1 0 15:53 00:00:00 ora_gen0_racdb1
oracle 4467 1 0 15:53 00:00:00 ora_diag_racdb1
oracle 4469 1 0 15:53 00:00:00 ora_dbrm_racdb1
oracle 4471 1 0 15:53 00:00:00 ora_psp0_racdb1
oracle 4473 1 0 15:53 00:00:02 ora_dia0_racdb1
oracle 4475 1 0 15:53 00:00:00 ora_mman_racdb1
oracle 4477 1 0 15:53 00:00:00 ora_dbw0_racdb1
oracle 4479 1 0 15:53 00:00:01
在检查Oracle的进程命令输出后,输出显示至少应包括以下一些进程:
. Oracle写数据文件的进程,输出显示为:“ora_dbw0_racdb1” . Oracle写日志文件的进程,输出显示为:“ora_lgwr_racdb1” . Oracle监听实例状态的进程,输出显示为:“ora_smon_racdb1” . Oracle监听客户端连接进程状态的进程,输出显示为:
“ora_pmon_racdb1”
. Oracle进行归档的进程,输出显示为:“ora_arc0_racdb1” . Oracle进行检查点的进程,输出显示为:“ora_ckpt_racdb1”. Oracle进行恢复的进程,输出显示为:“ora_reco_racdb1”3.14.检查Oracle监听状态
Uptime 0 days 4 hr. 22 min. 53 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/ Log File /u01/app/oracle/diag/tnslsnr/racdb1/listener/alert/
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=racdb1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)))
Services Summary...
Service "racdb1" has 1 instance(s).
Instance "racdb1", status UNKNOWN, has 3 handler(s) for this service...
Service "" has 1 instance(s).
Instance "racdb1", status READY, has 1 handler(s) for this service...
说明
“Services Summary”项表示Oracle的监听进程正在监听哪些数据库实例,输出显示中至少应该有“racdb1XDB”这一项。
3.15.检查监听进程是否存在
3.16.检查操作系统日志文件
说明
查看是否有与Oracle用户相关的出错信息。
3.17.检查oracle日志文件
说明
Oracle在运行过程中,会在警告日志文件中记录数据库的一些运行情况:数据库的启动、关闭,启动时的非缺省参数;数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;对数据库进行的某些操作,如创建或删除表空间、增加数据文件;数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA-600)等。
定期检查日志文件,根据日志中发现的问题及时进行处理:
3.18.检查Oracle核心转储目录
说明
如果上面命令的结果每天都在增长,则说明Oracle进程经常发生核心转储。
这说明某些用户进程或者数据库后台进程由于无法处理的原因而异常退出。
频繁的核心转储特别是数据库后台进程的核心转储会导致数据库异常终止。
Oracle 常用日志文件位置查询
select * from v$parameter where name='background_dump_dest'; select * from v$parameter where name='user_dump_dest';
select * from v$parameter where name='core_dump_dest';
select * from v$parameter where name='audit_file_dest'; select * from v$parameter where name='audit_syslog_level'; 3.19.检查Root用户和Oracle用户的email
说明
查看有无与Oracle用户相关的出错信息。
4.检查Oracle对象状态
在本节主要检查相关Oracle对象的状态,包含:检查Oracle控制文件状态,检查Oracle在线日志状态,检查Oracle表空间的状态,检查Oracle所有数据文件状态,检查Oracle所有表、索引、存储过程、触发器、包等对象的状态,检查Oracle所有回滚段的状态,总共六个部分。
4.1.检查Oracle控制文件状态
说明
输出结果应该有2条以上(包含2条)的记录,“STATUS”应该为空。
状态为空表示控制文件状态正常
4.2.检查Oracle在线日志状态
输出结果应该有3条以上(包含3条)记录,“STATUS”应该为非“INVALID”,非“DELETED”。
注:“STATUS”显示为空表示正常。
4.3.检查Oracle表空间的状态
说明
输出结果中STATUS应该都为ONLINE。
4.4.检查Oracle所有数据文件状态
说明
输出结果中“STATUS”应该都为“ONLINE”。
或者:
输出结果中“STATUS”应该都为“AVAILABLE”。
4.5.检查无效对象
说明
如果有记录返回,则说明存在无效对象。
若这些对象与应用相关,那么需要重新编译生成这个对象,或者
4.6.检查所有回滚段状态
说明
输出结果中所有回滚段的“STATUS”应该为“ONLINE”。
4.7.检查用户下的表
4.8.检查用户默认表空间
4.9.检查当前用户角色及权限
4.10.检查用户下的各个表的大小
4.11.检查一个表的创建时间
4.12.检查某个表的大小
4.13.检查每个表占用磁盘空间情况
5.检查Oracle相关资源的使用情况
在本节主要检查Oracle相关资源的使用情况,包含:检查Oracle初始化文件中相关的参数值,检查数据库连接情况,检查系统磁盘空间,检查Oracle各个表空间使用情况,检查一些扩展异常的对象,检查system表空间内的内容,检查对象的下一扩展与表空间的最大扩展值,总共七个部分。
5.1.检查Oracle初始化文件中相关参数值
247
enqueue_locks 34 3010 3010
enqueue_resources 38 1304 UNLIMITED
ges_procs 0 0 0
ges_ress 0 0 UNLIMITED
ges_locks 0 0 UNLIMITED
ges_cache_ress 0 0 UNLIMITED
ges_reg_msgs 0 0 UNLIMITED
ges_big_msgs 0 0 UNLIMITED
ges_rsv_msgs 0 0
gcs_resources 0 0 0
gcs_shadows 0 0 0
dml_locks 0 1084 UNLIMITED
temporary_table_locks 0 UNLIMITED UNLIMITED
transactions 0 271 UNLIMITED
branches 0 271 UNLIMITED
cmtcallbk 1 271 UNLIMITED
max_rollback_segments 11 271 65535
sort_segment_locks 1 UNLIMITED
若LIMIT_VALU-MAX_UTILIZATION<=5,则表明与RESOURCE_NAME相关的Oracle初始化参数需要调整。
可以通过修改Oracle初始化参数文
件$ORACLE_BASE/admin/racdb1/pfile/来修改。
5.2.检查数据库连接情况
说明
其中:SID 会话(session)的ID号;
SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话;USERNAME 建立该会话的用户名;
PROGRAM 这个会话是用什么工具连接到数据库的;
STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;
如果建立了过多的连接,会消耗数据库的资源,同时,对一些“挂死”的连接可能需要手工进行清理。
如果DBA要手工断开某个会话,则执
行:(一般不建议使用这种方式去杀掉数据库的连接,这样有时候session不会断开。
容易引起死连接。
建议通过sid查到操作系统的spid,使用ps –ef|grep spidno的方式确认spid不是ORACLE的后台进程。
使用操作系统的kill -9命令杀掉连接)
注意:上例中SID为1到10(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。
5.3.检查系统磁盘空间
5.4.检查表空间使用情况
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME,FILE_ID) E,
(SELECT FILE_ID,AUTOEXTENSIBLE FROM DBA_DATA_FILES) F WHERE = (+) AND = (+) AND = (+)
UNION ALL --if have tempfile
SELECT ,FILE_NAME "FILE_NAME",SPACE "SUM_SPACE(M)", USED_SP ACE "USED_SPACE(M)",
ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",AUTOEXT ENSIBLE
FROM
(SELECT FILE_ID,FILE_NAME,TABLESPACE_NAME,ROUND(SUM(BYTES)/ (1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME,FILE_ID,FILE_NAME) D,
(SELECT FILE_ID,TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024 *1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE。