`

ORACLE學習總結[DBA]

阅读更多

1、通常oracle需要启动OracleServiceORCL,OracleStartORCL,OracleTNSListener 任务
在NT上至少要启动两个服务
oraclestartID和oracleserverID
每个数据库都有一个系统标识符(SID),典型安装的数据库使用的系统标识符是ORCL

2、启动关闭数据库
关闭:
svrmgr>connect internal/oracle
>shutdown --正常关闭数据库
svrmgr>shutdown immediate --立即关闭数据库
svrmgr>shutdown abort --一种最直接的关闭数据库的方式,执行之后,重新启动需要花6-8小时
启动:
svrmgr>startup --正常启动
--等价于:startup nomount;
alter database mount;
alter database open;
svrmgr>startup mount; --安装启动:用于改变数据库的归档或执行恢复状态
svrmgr>startup nomount; --用于重建控制文件或重建数据库
svrmgr>startup restrict; --约束启动,能启动数据库,但只允许具有一定特权的用户访问
如果希望改变这种状态,连接成功后
alter system disable restricted session;
svrmgr>startup force;当不能关闭数据库时,可采用强制启动数据库来完成数据库的关闭操作。
svrmgr>startup pfile=d:\orant\database\initorcl.ora --带初始化参数文件的启动

3、缺省用户和密码
<1>. Oracle安裝完成后的初始口令? 
 internal/oracle 
  sys/change_on_install 
  system/manager 
  scott/tiger 
  sysman/oem_temp
<2>. ORACLE9IAS WEB CACHE的初始默认用户和密码? 
administrator/administrator
4、让定义自己的回滚段生效
在initorcl.ora中加入rollback_segments=(rb0,rb1,...)
其中rb0,rb1为自己定义的回滚段,可使这些回滚段在启动时生效

5、查看修改数据库的字符集
<1>数据库服务器字符集 
在表props$中
update props$ set value$='ZHS16CGB231280' 
where name ='NLS_CHARACTERSET'
然后重新启动数据库,而不需要重新安装

8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
Startup nomount;
Alter database mount exclusive;
Alter system enable restricted session;
Alter system set job_queue_process=0;
Alter database open;
Alter database character set zhs16gbk;



sql> show parameter NLS

查看数据库字符集:
SELECT * FROM NLS_DATABASE_PARAMETERS; 
SELECT * FROM V$NLS_PARAMETERS;
<2>
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

<3> 有时候用crontab发起的时候,由于执行的shell脚本的不同,导致很多的环境变量不同。常常看到插入到数据库中的汉字变成乱码。
比如shell脚本cai.sh如下内容。
#!/bin/ksh
export ORACLE_BASE=/u01/oracle/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/9.2.0
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$LD_LIBRARY_PATH
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:/app/prepay/lib
/u01/oracle/app/oracle/product/9.2.0/bin/sqlplus aicbs/aicbs@busi_cs <insert into okcai values('okcai是个大好人呀');
commit;
quit
!

在crontab中定时每天20:19执行一次
19 20 * * * /bin/sh /app/prepay/cai.sh >/dev/null 2>&1 &

则可以看到数据库中数据变成了:
2LQSJY
当前数据库的字符集是
SELECT * FROM NLS_DATABASE_PARAMETERS
AMERICAN.ZHS16GBK
为了正常,必须保持客户端和数据库一致的字符集
改脚本如下即可
#!/bin/ksh
export ORACLE_BASE=/u01/oracle/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/9.2.0
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$LD_LIBRARY_PATH
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:/app/prepay/lib
####下面就是增加的
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
/u01/oracle/app/oracle/product/9.2.0/bin/sqlplus aicbs/aicbs@busi_cs <insert into okcai values('okcai是个大好人呀');
commit;
quit
!

6、svgmgr>show sga

7、查询锁的原因
如果进程被死锁,可以按下面方式查询
<1> 从v$session或者v$locked_object找到此session
<2> 如果有lockwait,查询v$lock,
select * from v$lock where kaddr = 'C00000024AB87210'
如果没有,根据sid
select * from v$lock where sid = 438
<3> 查看v$lock
lmode > 0,表示已经得到此锁
request > 0 表示正在请求此锁
根据id1和id2的值可以判断请求哪个锁的释放。
select * from v$lock where id1=134132 and id2 = 31431 

8. 查询锁的状况的对象
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
查询锁的表的方法:
SELECT S.SID SESSION_ID, S.USERNAME, 
DECODE(LMODE, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(LMODE)) MODE_HELD, 
DECODE(REQUEST, 0, 'None', 1, 'Null', 2, 'Row-S (SS)', 3, 'Row-X (SX)', 4, 'Share', 5, 'S/Row-X (SSX)', 6, 'Exclusive', TO_CHAR(REQUEST)) MODE_REQUESTED, 
O.OWNER||'.'||O.OBJECT_NAME||' ('||O.OBJECT_TYPE||')', S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 
FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S 
WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;

9. 怎样查得数据库的SID ?
select name from v$database; 
也可以直接查看 init.ora文件

10、管理回滚段:
存放事务的恢复信息
建立回滚段
create public rollback segment SEG_NAME tabelspace TABLESPACE_NAME;
alter rollback segment SEG_NAME online;
删除回滚段
首先改变为offline状态
直接使用回滚段
sql>set transaction use rollback segment SEG_NAME;

11. 计算一个表占用的空间的大小
select owner,table_name, 
NUM_ROWS,
BLOCKS*AAA/1024/1024 "Size M", 
EMPTY_BLOCKS, 
LAST_ANALYZED 
from dba_tables 
where table_name='XXX'; 

Here: AAA is the value of db_block_size ; 
XXX is the table name you want to check

12. 表在表空间中的存储情况
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where 
tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name; 

13. 索引在表空间中的存储情况
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner' 
group by segment_name; 

14.查看某表/索引的大小

SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments 
where segment_name=upper('&table_name');
索引
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments 
where segment_name=upper('&index_name');

15、确定可用空间
select tablespace_name,sum(blocks),sum(bytes) from sys.dba_free_space group by tablespace_name;

16、程序中报错:maxinum cursor exceed!
<1> 查看当前的open cursor参数
sql> show parameter open_cursors
<2> 如果确实很小,应该调整数据库初始化文件
加如一项 open_cursors=200
<3> 如果很大,则
select sid,sql_text,count(*) from v$open_cursor
group by sid,sql_text
having count(*) > 200 
其中200是随便写一个比较大的值。查询得到打开太多的cursor.

17、查看数据库的版本信息
SQL> select * from v$version;
包含版本信息,核心版本信息,位数信息(32位或64位)等
至于位数信息,在linux/unix平台上,可以通过file查看,如
file $ORACLE_HOME/bin/oracle

18. 查看最大会话数
SELECT * FROM V$PARAMETER WHERE NAME LIKE 'proc%'; 
SQL> 
SQL> show parameter processes 
NAME TYPE VALUE 
------------------------------------ ------- ------------------------------ 
aq_tm_processes integer 1 
db_writer_processes integer 1 
job_queue_processes integer 4 
log_archive_max_processes integer 1 
processes integer 200 

这里为200个用户。 

select * from v$license; 
其中sessions_highwater纪录曾经到达的最大会话数 

19. 以archivelog的方式运行oracle。 
init.ora 
log_archive_start = true 
RESTART DATABASE

20. unix 下调整数据库的时间
su -root 
date -u 08010000

21.P4电脑的安裝方法 
将SYMCJIT.DLL改为SYSMCJIT.OLD

22. 如何查询SERVER是不是OPS? 
SELECT * FROM V$OPTION; 
如果PARALLEL SERVER=TRUE则有OPS能

23. 查询每个用户的权限
SELECT * FROM DBA_SYS_PRIVS;

24.将表/索引移动表空间
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;

25.在LINUX,UNIX下启动DBA STUDIO?
OEMAPP DBASTUDIO

26.LINUX下查询磁盘竞争状况命令? 
Sar -d

27.LINUX下查询磁盘CPU竞争状况命令? 
sar -r

28. 查询表空间信息? 
SELECT * FROM DBA_DATA_FILES;

29. 看各个表空间占用磁盘情况:

SQL> col tablespace format a20
SQL> select 
b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes 字节数,
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余空间,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 
from dba_free_space a,dba_data_files b 
where a.file_id=b.file_id 
group by b.tablespace_name,b.file_id,b.bytes 
order by b.file_id

30. 如把ORACLE设置为MTS或专用模式? 
#dispatchers="(PROTOCOL=TCP) (SERVICE=SIDXDB)" 
加上就是MTS,注释就是专用模式,SID是指你的实例名。 

31. 如何才能得知系统当前的SCN号 ?
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;

32. 修改oracel数据库的默认日期
alter session set nls_date_format='yyyymmddhh24miss';
OR 
可以在init.ora中加上一行 
nls_date_format='yyyymmddhh24miss' 

33. 将小表放入keep池中
alter table xxx storage(buffer_pool keep); 

34. 如何检查是否安装了某个patch? 
check that oraInventory 

35. 如何修改oracle数据库的用户连接数? 
修改initSID.ora,将process加大,重启数据库. 

36. 如何创建SPFILE?

SQL> connect / as sysdba 
SQL> select * from v$version; 
SQL> create pfile from spfile; 
SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora'; 

文件已创建。 
SQL> CREATE SPFILE='E:\ora9i\database\SPFILEEYGLE.ORA' FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora'; 
文件已创建。 

37. 內核参数的应用
shmmax
  含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。 
  设置方法:0.5*物理内存 
  例子:Set shmsys:shminfo_shmmax=10485760 
  shmmin 
  含义:共享内存的最小大小。 
  设置方法:一般都设置成为1。 
  例子:Set shmsys:shminfo_shmmin=1: 
  shmmni 
  含义:系统中共享内存段的最大个数。 
  例子:Set shmsys:shminfo_shmmni=100 
  shmseg 
  含义:每个用户进程可以使用的最多的共享内存段的数目。 
  例子:Set shmsys:shminfo_shmseg=20: 
  semmni 
  含义:系统中semaphore identifierer的最大个数。 
  设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那个值加10。 
  例子:Set semsys:seminfo_semmni=100 
  semmns 
  含义:系统中emaphores的最大个数。 
  设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。 
  例子:Set semsys:seminfo_semmns=200 
  semmsl: 
  含义:一个set中semaphore的最大个数。 
  设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。 
  例子:Set semsys:seminfo_semmsl=-200

38. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限? 

SQL>conn sys/change_on_install
SQL>select * from V_$PWFILE_USERS;


39. 如何查看数据文件放置的路径 ? 
col file_name format a50
SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; 

40. 如何查看现有回滚段及其状态 ? 
SQL> col segment format a30
SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS 

41. Oracle常用系统文件有哪些? 
通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile v$parameter; 

42.查看数据库实例
SQL>SELECT * FROM V$INSTANCE; 

43. 怎样估算SQL执行的I/O数 ? 
SQL>SET AUTOTRACE ON ; 
SQL>SELECT * FROM TABLE; 
OR 
SQL>SELECT * FROM v$filestat ; 

可以查看IO数 

44. 怎样扩大REDO LOG的大小? 
建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。 

45. 查询做比较大的排序的进程?
<1>
SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#, 
a.username, a.osuser, a.status 
FROM v$session a,v$sort_usage b 
WHERE a.saddr = b.session_addr 
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ;

<2>. 查询做比较大的排序的进程的SQL语句
select /*+ ORDERED */ sql_text from v$sqltext a 
where a.hash_value = ( 
select sql_hash_value from v$session b 
where b.sid = &sid and b.serial# = &serial) 
order by piece asc ;

46. ORA-01555 SNAPSHOT TOO OLD的解决办法
增加MINEXTENTS的值,增加区的大小,设置一个高的OPTIMAL值。 
如果是执行大的事务,报此错误,说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行.例如 

set transaction use rollback segment roll_abc; 
delete from table_name where ... 
commit; 
  回滚段roll_abc被指定给这个delete事务,commit命令则在事务结束之后取消了回滚段的指定. 


47. 事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达参数 MAXEXTENTS的值(ORA-01628)的解决办法.
向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。 


48. 监控事例的等待
select event,sum(decode(wait_Time,0,0,1)) "Prev", 
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" 
from v$session_Wait 
group by event order by 4; 

49. 回滚段的争用情况
select name, waits, gets, waits/gets "Ratio" 
from v$rollstat C, v$rollname D 
where C.usn = D.usn; 

50 监控表空间的 I/O 比例
select B.tablespace_name name,B.file_name "file",A.phyrds pyr, 
A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw 
from v$filestat A, dba_data_files B 
where A.file# = B.file_id 
order by B.tablespace_name; 

51、监控文件系统的 I/O 比例
select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name", 
C.status, C.bytes, D.phyrds, D.phywrts 
from v$datafile C, v$filestat D 
where C.file# = D.file#; 

52、监控 SGA 的命中率
select a.value + b.value "logical_reads", c.value "phys_reads", 
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" 
from v$sysstat a, v$sysstat b, v$sysstat c 
where a.statistic# = 38 and b.statistic# = 39 
and c.statistic# = 40; 

53、监控 SGA 中字典缓冲区的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", 
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" 
from v$rowcache 
where gets+getmisses <>0 
group by parameter, gets, getmisses; 

54、监控 SGA 中共享缓存区的命中率,应该小于1% 
select sum(pins) "Total Pins", sum(reloads) "Total Reloads", 
sum(reloads)/sum(pins) *100 libcache 
from v$librarycache; 

select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent" 
from v$librarycache; 

55、显示所有数据库对象的类别和大小
select count(name) num_instances ,type ,sum(source_size) source_size , 
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size, 
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required 
from dba_object_size 
group by type order by 2; 

56、监控 SGA 中重做日志缓存区的命中率,应该小于1% 
SELECT name, gets, misses, immediate_gets, immediate_misses, 
Decode(gets,0,0,misses/gets*100) ratio1, 
Decode(immediate_gets+immediate_misses,0,0, 
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2 
FROM v$latch WHERE name IN ('redo allocation', 'redo copy'); 

57、监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size 
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)'); 

58、监控当前数据库谁在运行什么SQL语句?
SELECT osuser, username, sql_text from v$session a, v$sqltext b 
where a.sql_address =b.address order by address, piece; 

59、监控字典缓冲区?
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE; 
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE; 
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE; 
后者除以前者,此比率小于1%,接近0%为好。 

SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES" 
FROM V$ROWCACHE 

60、监控 MTS 
select busy/(busy+idle) "shared servers busy" from v$dispatcher; 
此值大于0.5时,参数需加大 
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher'; 
select count(*) from v$dispatcher; 
select servers_highwater from v$mts; 
servers_highwater接近mts_max_servers时,参数需加大 

61、查看碎片程度高的表? 
SELECT segment_name table_name , COUNT(*) extents 
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name 
HAVING COUNT(*) = (SELECT MAX( COUNT(*)  FROM dba_segments GROUP BY segment_name); 

62、如何知道使用CPU多的用户session? 
11是cpu used by this session 

select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value 
from v$session a,v$process b,v$sesstat c 
where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc; 

63.如何检查操作系统是否存在IO的问题
使用的工具有sar,这是一个比较通用的工具。
#sar -u 2 10
即每隔2秒检察一次,共执行20次,当然这些都由你决定了。
示例返回:
HP-UX hpn2 B.11.00 U 9000/800 08/05/03
18:26:32 %usr %sys %wio %idle
18:26:34 80 9 12 0
18:26:36 78 11 11 0
18:26:38 78 9 13 1
18:26:40 81 10 9 1
18:26:42 75 10 14 0
18:26:44 76 8 15 0
18:26:46 80 9 10 1
18:26:48 78 11 11 0
18:26:50 79 10 10 0
18:26:52 81 10 9 0

Average 79 10 11 0
其中的%usr指的是用户进程使用的cpu资源的百分比,
%sys指的是系统资源使用cpu资源的百分比,
%wio指的是等待io完成的百分比,这是值得我们观注的一项,
%idle即空闲的百分比。如果wio列的值很大,如在35%以上,说明你的系统的IO存在瓶颈,你的CPU花费了很大的时间去等待IO的完成。
Idle很小说明系统CPU很忙。像我的这个示例,可以看到wio平均值为11说明io没什么特别的问题,而我的idle值为零,说明我的cpu已经满负荷运行了。

64.关注一下内存。
常用的工具便是vmstat,对于hp-unix来说可以用glance,Aix来说可以用topas,当你发现vmstat中pi列非零,memory中的free列的值很小,glance,topas中内存的利用率多于80%时,这时说明你的内存方面应该调节一下了,方法大体有以下几项。
a.划给Oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。
b.为系统增加内存
c.如果你的连接特别多,可以使用MTS的方式
d.打全补丁,防止内存漏洞。

65、查找前十条性能差的sql.
SELECT * FROM 
(
SELECT PARSING_USER_ID
EXECUTIONS,
SORTS,
COMMAND_TYPE,
DISK_READS,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC 

WHERE ROWNUM<10 ;

66、查看占io较大的正在运行的session
SELECT se.sid,
se.serial#,
pr.SPID,
se.username,
se.status,
se.terminal,
se.program,
se.MODULE,
se.sql_address,
st.event,
st.p1text,
si.physical_reads,
si.block_changes 
FROM v$session se,
v$session_wait st,
v$sess_io si,
v$process pr
WHERE st.sid=se.sid 
AND st.sid=si.sid
AND se.PADDR=pr.ADDR
AND se.sid>6
AND st.wait_time=0 
AND st.event NOT LIKE '%SQL%'
ORDER BY physical_reads DESC
对检索出的结果的几点说明:
<1> 我是按每个正在等待的session已经发生的物理读排的序,因为它与实际的IO相关。
<2> 你可以看一下这些等待的进程都在忙什么,语句是否合理?
Select sql_address from v$session where sid=;
Select * from v$sqltext where address=;
执行以上两个语句便可以得到这个session的语句。
你也以用alter system kill session 'sid,serial#';把这个session杀掉。
<3> 应观注一下event这列,这是我们调优的关键一列,下面对常出现的event做以简要的说明:
a、buffer busy waits,free buffer waits这两个参数所标识是dbwr是否够用的问题,与IO很大相关的,当v$session_wait中的free buffer wait的条目很小或没有的时侯,说明你的系统的dbwr进程决对够用,不用调整;free buffer wait的条目很多,你的系统感觉起来一定很慢,这时说明你的dbwr已经不够用了,它产生的wio已经成为你的数据库性能的瓶颈,这时的解决办法如下:
a.1增加写进程,同时要调整db_block_lru_latches参数
示例:修改或添加如下两个参数
db_writer_processes=4
db_block_lru_latches=8
a.2开异步IO,IBM这方面简单得多,hp则麻烦一些,可以与Hp工程师联系。
b、db file sequential read,指的是顺序读,即全表扫描,这也是我们应该尽量减少的部分,解决方法就是使用索引、sql调优,同时可以增大db_file_multiblock_read_count这个参数。
c、db file scattered read,这个参数指的是通过索引来读取,同样可以通过增加db_file_multiblock_read_count这个参数来提高性能。
d、latch free,与栓相关的了,需要专门调节。
e、其他参数可以不特别观注。

67. 文件说明
<1>监听器日志文件
以8I为例
$ORACLE_HOME/NETWORK/LOG/LISTENER.LOG

<2>. 监听器参数文件
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA

<3>. TNS 连接文件
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/TNSNAMES.ORA

<4>. Sql*Net 环境文件
以8I为例
$ORACLE_HOME/NETWORK/ADMIN/SQLNET.ORA

<5>. 警告日志文件
以8I为例
$ORACLE_HOME/ADMIN/SID/BDUMP/SIDALRT.LOG

<6>. 基本结构
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/STANDARD.SQL

<7>. 建立数据字典视图
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL

<8>.建立审计用数据字典视图
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATAUDIT.SQL

<9>. 建立快照用数据字典视图
以8I为例
$ORACLE_HOME/RDBMS/ADMIN/CATSNAP.SQL

loading...

分享到:
评论

相关推荐

    OracleDBA入门、进阶学习路线图参考.pdf

    该路线图由经验丰富的 DBA eygle 根据自己的学习经历和经验总结而成。 首先,该路线图分为两个部分:入门和进阶。在入门部分,eygle 推荐学习《深入浅出 Oracle 》和《循序渐进 Oracle 》两本书,以此作为学习 ...

    Oracle 10g DBA 学习手册

    ### Oracle 10g DBA 学习手册关键知识点总结 #### 一、Oracle 10g DBA 学习手册概述 - **标题**:“Oracle 10g DBA 学习手册” - **描述**:这是一本面向初学者的指南,旨在帮助读者掌握Oracle 10g数据库的安装与...

    oracle dba学习笔记

    描述:学习使用维护 Oracle 数据库数年,对认为值得记录的 Oracle 维护脚本进行记录总结,存起来,虽然今后开源是方向,但不可否认 Oracle 仍然非常有水平的,在人类发展历史上相信一定会留下它的一页。 标签:...

    oracle11g DBA-OCP认证

    - **官方培训**:获得OCP认证至少需要完成一门Oracle官方培训课程(可以是课堂培训或在线网络学习)。这一步骤对于确保候选人具备必要的实践经验和理论知识至关重要。 - **考试**:除了官方培训之外,还必须通过一...

    Oracle_DBA工作手记.pdf

    6. 故障诊断和处理:遇到问题时能够快速定位和解决问题,并从问题中学习和总结经验。 7. 技术研究与学习:持续关注数据库技术的新发展,学习新技术以提升工作效率。 DBA在工作中应养成良好习惯,如保持系统的稳定性...

    Oracle 12c DBA Handbook

    ### Oracle 12c DBA Handbook 关键知识点详解 #### 一、书籍概述与作者介绍 ...通过深入学习本书内容,读者将能够更加熟练地处理Oracle 12c数据库的日常管理和复杂问题解决,从而提升工作效率并确保系统的稳定运行。

    Oracle新手DBA入门.pdf

    在我们深入探讨Oracle新手DBA入门的各个方面之前,让我们先来了解一些基础知识。...通过以上知识的了解和学习,新手DBA可以为进入实际工作环境打下坚实的基础,并对Oracle数据库有一个全面的理解。

    Oracle 学习总结

    下面将对Oracle数据库的学习进行总结,并重点阐述触发器的概念与应用。 1. Oracle数据库入门:首先,Oracle数据库的安装和配置是基础环节。接着,学习使用SQL语言进行数据操作,这是Oracle数据库管理与开发的核心...

    dba教材 oracle教程

    Oracle数据库是全球最广泛使用的...总结,Oracle数据库的学习涵盖广泛,从基础概念到高级特性,再到DBA的实际操作,都需要系统学习和实践。通过阅读提供的教材和资源,逐步积累经验,定能成为一名优秀的Oracle DBA。

    oracle dba基础知识

    总结来说,Oracle DBA基础知识涵盖的内容广泛且深入,从基本的数据库架构到复杂的性能调优,都需要DBA具备扎实的专业知识和实践经验。随着Oracle数据库系统的不断升级和发展,DBA的角色也在不断演变,需要持续学习和...

    Oracle DBA培训教程 从实践中学习Oracle数据库管理与维护_part1

    压缩包PART1,与PART2共同解压。...ORACLE数据DBA入门与提高教程。包含Oracle数据库管理与维护内容。 一本Oracle数据库管理的入门教材,适合于初中级的读者,是作者二十多年IT工作和教学实践的总结与升华。

    Oracle9i DBA手册.pdf

    总结来说,《Oracle9i DBA手册》不仅是对Oracle9i数据库系统管理知识的详细介绍,它更是DBA在日常工作中不可或缺的参考资料。通过学习手册中提供的实践技巧和策略,DBA可以提高对Oracle9i的掌握,增强解决复杂问题的...

    Oracle Database 2 day DBA

    - **长期目标**:逐步深入学习Oracle数据库的各项高级特性,如性能优化、高可用性解决方案等,成为具备全面能力的Oracle DBA。 #### 七、适合人群 - 对Oracle数据库感兴趣的技术人员。 - 希望快速入门Oracle数据库...

    Oracle 数据库2天 DBA

    通过深入学习Oracle 11g 2天DBA文档,您可以迅速掌握Oracle数据库的基本操作,包括安装、配置和日常管理任务。这对于希望快速入门Oracle数据库管理的新手来说是一份非常宝贵的资源。此外,熟练使用DBCA这样的工具对于...

    oracle学习资料,我搜集和总结的大量oracle学习资源

    本压缩包中包含的“Oracle学习资料”是一份综合性的资源集合,旨在为系统管理员和初学者提供深入理解Oracle数据库的路径。 首先,Oracle数据库的基础知识是学习的起点。这包括了解SQL(结构化查询语言),它是与...

    OracleDBA学习日记笔记

    本资源为 Oracle DBA 学习日记笔记,共36页,简洁清晰的总结了 Oracle DBA 的重点部分,这是一个非常有价值的 Oracle DBA 入门资料。 在本资源中,我们可以看到作者Stephenzhou对 Oracle DBA 的学习笔记,这些笔记...

    Rampant. Oracle DBA Made Simple Oracle Database Administration Techniques

    Oracle DBA Made Simple Oracle Database Administration Techniques》是一本非常适合Oracle数据库管理员学习和参考的书籍,它不仅提供了丰富的实践技巧,还深入讲解了Oracle数据库管理的核心理念和技术。

    oracle DBA

    Oracle DBA 学习笔记 Oracle DBA 是一个专业的数据库管理员,负责管理和维护 Oracle 数据库。...本文总结了 Oracle 8i 的概述、安装、配置、管理和维护等方面的知识点,为 Oracle DBA 提供了一个系统的学习笔记。

    oracle dba 日记第一部

    文档"DBA日记(第一部)789852.doc"很可能包含了这些主题的详细内容,通过阅读和学习,无论是初入Oracle DBA领域的新人还是有经验的从业者,都能从中受益匪浅,提升自己的专业技能。这部日记不仅仅是技术知识的总结,...

    深入浅出Oracle: DBA入门、进阶与诊断案例. .pdf

    总结,《深入浅出Oracle:DBA入门、进阶与诊断案例》是Oracle DBA的必读之书,它不仅提供了理论知识,还通过丰富的案例将理论与实践相结合,使读者能够在实践中不断提升自己的技能。无论是初学者还是经验丰富的DBA,...

Global site tag (gtag.js) - Google Analytics