⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dba.txt

📁 DBA具体操作方法以及常见问题解决办法
💻 TXT
📖 第 1 页 / 共 5 页
字号:
尐寳貝oo

 DBA面试题集----我要好好学习
Posted by cosio under [ DBA学习 ]
[ (0) 评论 ] | [ (0) 引用 ]

(1)数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?
触发dbwr的执行,dbwr会把和这个日志相关的所有脏队列写到数据文件去,减少数据库崩溃的时的恢复时间。

(2)表空间管理方式有哪几种,各有什么优劣。
字典管理方式和自动管理方式,自动管理方式采用位图管理extent,减少字典之间的竞争,同时避免了碎片

(3)本地索引与全局索引的差别与适用情况。
本地索引适用于sql语句种限定一个范围的查询比如时间之类的, 全局索引适用于在全部记录中查询,比如要查询一个手机号之类的。
全局索引总可能出现unused的情况,需要重建

(4)一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么?
这个要考虑到rwoid所占的字节数,假设char总是占用2字节的情况,比较rowid和3

(5)9i的data guard有几种模式,各有什么差别。
三种模式
maxmize performance 采用异步传送
maxmize availablity 允许采用异步传送,在两者之间摇摆
maxmize protection 采用同步传送
个人以为采用maxmize performance好一点,对主数据库影响比较小

(6)执行计划是什么,查看执行计划一般有哪几种方式。
执行计划是数据库内部的执行步骤
set autotrace on
select * from table
alter session set event '10046 trace name context forever,level 12 '
一般采用pl/sql developer,其它的比较少用,记不住

(7)简单描述一下nest loop与hash join的差别。
nest loop适用于返回结果比较小的情况。
for in 1...n loop
对小表进行遍历
根据小表的结果遍历大表(大表需要索引)
end loop
这个在数据库高效设计里面有很好的解释,一时还写不出来

hash join适用在返回大结果集的情况

(8)db file sequential read与db file scattered read等待的差别,如果以上等待比较多,证明了什么问题?
db file sequential read指的是需要一个但当前不在sga中的块,等待从磁盘中读取。db file scattered read需要多个连续的数据库引起等待。
db file sequential read出现大量的等待,或许不是个问题。如果这两个事件等待比较多,根据p1,p2,p3以及sid检查sql语句,是否有调优的可能

l(9)ibrary cache pin与library cache lock是什么地方的等待事件,一般说明什么问题?
一般出现在对package,procedure进行编译,add contraint的时候。

(10)在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。
不能确定,是否可以采用先建索引后建立约束
create index idx_w1 on w_1 (a,b,c) online ;
alter table w_1 add constraint uni_w1 unique (a,b,c) novalidate;


(11)如果一个linux上的oracle数据库系统突然变慢,你一般从哪里去查找原因。
先top看看是哪些进程,看看这些进程在做什么
看看v$session_wait


(12)说明一下对raid5与raid01/10的认识。
raid5采用校验信息,硬盘的利用率n-1/n, raid10先采用先镜像在进行条带化,是最高效的硬盘利用方式,硬盘的利用率50%

(13)列举5个10g的新特性
1.rename tablespace
2.新的em
3.asm
4.bigfile tablespace
5.真正的增量rman
6.flashback table
7.expdp、impdp

 

12 五月, 2007 08:44
一个好的设计签名软件
Posted by cosio under [ 情感世界 ]
[ (0) 评论 ] | [ (0) 引用 ]
签名设计软件.rar
 

09 五月, 2007 11:55
DBA常用SQL语句
Posted by cosio under [ DBA学习 ]
[ (2) 评论 ] | [ (0) 引用 ]
查看表空间的名称及大小:

SQL>select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size

from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;



查看表空间物理文件的名称及大小:

SQL>select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;



查看回滚段名称及大小:

SQL>select segment_name, tablespace_name, r.status,

(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,

max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v

Where r.segment_id = v.usn(+) order by segment_name;



如何查看某个回滚段里面,跑的什么事物或者正在执行什么sql语句:

SQL>select d.sql_text,a.name
from v$rollname a,v$transaction b,v$session c,v$sqltext d
where a.usn=b.xidusn and b.addr=c.taddr and c.sql_address=
d.address and c.sql_hash_value=d.hash_value
and a.usn=1;

(备注:你要看哪个,就把usn=?写成几就行了)



查看控制文件:

SQL>select * from v$controlfile;



查看日志文件:

SQL> col member format a50

SQL>select * from v$logfile;



如何查看当前SQL*PLUS用户的sid和serial#:

SQL>select sid, serial#, status from v$session where audsid=userenv('sessionid');



如何查看当前数据库的字符集:

SQL>select userenv('language') from dual;

SQL>select userenv('lang') from dual;



怎么判断当前正在使用何种SQL优化方式:

用explain plan产生EXPLAIN PLAN,检查PLAN_TABLE中ID=0的POSITION列的值。

SQL>select decode(nvl(position,-1),-1,'RBO',1,'CBO') from plan_table where id=0;



如何查看系统当前最新的SCN号:

SQL>select max(ktuxescnw * power(2,32) + ktuxescnb) from x$ktuxe;





在ORACLE中查找TRACE文件的脚本:

SQL>select u_dump.value || '/' || instance.value || '_ora_' ||

v$process.spid || nvl2(v$process.traceid, '_' || v$process.traceid, null ) || '.trc'"Trace File" from v$parameter u_dump cross join v$parameter instance cross join v$process join v$session on v$process.addr = v$session.paddr where u_dump.name = 'user_dump_dest' and

instance.name = 'instance_name' and v$session.audsid=sys_context('userenv','sessionid');



SQL>select d.value || '/ora_' || p.spid || '.trc' trace_file_name
from (select p.spid from sys.v_$mystat m,sys.v_$session s,
sys.v_$process p where m.statistic# = 1 and
s.sid = m.sid and p.addr = s.paddr) p,(select value from sys.v_$parameter where name ='user_dump_dest') d;



如何查看客户端登陆的IP地址:

SQL>select sys_context('userenv','ip_address') from dual;



如何在生产数据库中创建一个追踪客户端IP地址的触发器:

SQL>create or replace trigger on_logon_trigger

after logon on database

begin

dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));

end;



REM 记录登陆信息的触发器

CREATE OR REPLACE TRIGGER LOGON_HISTORY

AFTER LOGON ON DATABASE --WHEN (USER='WACOS') --ONLY FOR USER 'WACOS'

BEGIN

insert into session_history

select username,sid,serial#,AUDSID,OSUSER,ACTION,SYSDATE,null,SYS_CONTEXT('USERENV','IP_ADDRESS'),TERMINAL,machine,PROGRAM

from v$session where audsid = userenv('sessionid');

END;



查询当前日期:

SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;



查看所有表空间对应的数据文件名:

SQL>select distinct file_name,tablespace_name,AUTOEXTENSIBLE from dba_data_files;



查看表空间的使用情况:

SQL>select sum(bytes)/(1024*1024) as free_space,tablespace_name

from dba_free_space group by tablespace_name;



SQL>SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,

(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"

FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C

WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;



column tablespace_name format a18;
column Sum_M format a12;
column Used_M format a12;
column Free_M format a12;
column pto_M format 9.99;
select s.tablespace_name,ceil(sum(s.bytes/1024/1024))||'M' Sum_M,ceil(sum(s.UsedSpace/1024/1024))||'M' Used_M,ceil(sum(s.FreeSpace/1024/1024))||'M' Free_M, sum(s.UsedSpace)/sum(s.bytes) PTUSED

from (select b.file_id,b.tablespace_name,b.bytes,
(b.bytes-sum(nvl(a.bytes,0))) UsedSpace,
sum(nvl(a.bytes,0)) FreeSpace,(sum(nvl(a.bytes,0))/(b.bytes)) * 100 FreePercentRatio from sys.dba_free_space a,sys.dba_data_files b
where a.file_id(+)=b.file_id group by b.file_id,b.tablespace_name,b.bytes
order by b.tablespace_name) s group by s.tablespace_name
order by sum(s.FreeSpace)/sum(s.bytes) desc;



查看数据文件的hwm(可以resize的最小空间)和文件头大小:

SELECT v1.file_name,v1.file_id,
num1 totle_space,
num3 free_space,
num1-num3 "USED_SPACE(HWM)",
nvl(num2,0) data_space,
num1-num3-nvl(num2,0) file_head
FROM
(SELECT file_name,file_id,SUM(bytes) num1 FROM Dba_Data_Files GROUP BY file_name,file_id) v1,
(SELECT file_id,SUM(bytes) num2 FROM dba_extents GROUP BY file_id) v2,
(SELECT file_id,SUM(BYTES) num3 FROM DBA_FREE_SPACE GROUP BY file_id) v3
WHERE v1.file_id=v2.file_id(+)
AND v1.file_id=v3.file_id(+);



数据文件大小及头大小:

SELECT v1.file_name,v1.file_id,
num1 totle_space,
num3 free_space,
num1-num3 Used_space,
nvl(num2,0) data_space,
num1-num3-nvl(num2,0) file_head
FROM
(SELECT file_name,file_id,SUM(bytes) num1 FROM Dba_Data_Files GROUP BY file_name,file_id) v1,
(SELECT file_id,SUM(bytes) num2 FROM dba_extents GROUP BY file_id) v2,
(SELECT file_id,SUM(BYTES) num3 FROM DBA_FREE_SPACE GROUP BY file_id) v3
WHERE v1.file_id=v2.file_id(+)
AND v1.file_id=v3.file_id(+);

(运行以上查询,我们可以如下信息:
Totle_pace:该数据文件的总大小,字节为单位
Free_space:该数据文件的剩于大小,字节为单位
Used_space:该数据文件的已用空间,字节为单位
Data_space:该数据文件中段数据占用空间,也就是数据空间,字节为单位
File_Head:该数据文件头部占用空间,字节为单位)



数据库各个表空间增长情况的检查:

SQL>select A.tablespace_name,(1-(A.total)/B.total)*100 used_percent

From (select tablespace_name,sum(bytes) total from dba_free_space group by tablespace_name) A,(select tablespace_name,sum(bytes) total from dba_data_files group by tablespace_name) B where A.tablespace_name=B.tablespace_name;



SQL>SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比", F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)" FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER BY 4 DESC;



查看各个表空间占用磁盘情况:
SQL>col tablespace_name format a20;
SQL>select b.file_id file_ID,
b.tablespace_name tablespace_name,
b.bytes Bytes,
(b.bytes-sum(nvl(a.bytes,0))) used,
sum(nvl(a.bytes,0)) free,
sum(nvl(a.bytes,0))/(b.bytes)*100 Percent
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;

数据库对象下一扩展与表空间的free扩展值的检查:

SQL>select a.table_name, a.next_extent, a.tablespace_name

from all_tables a,(select tablespace_name, max(bytes) as big_chunk

from dba_free_space group by tablespace_name ) f where f.tablespace_name = a.tablespace_name and a.next_extent > f.big_chunk

union select a.index_name, a.next_extent, a.tablespace_name

from all_indexes a,(select tablespace_name, max(bytes) as big_chunk

from dba_free_space group by tablespace_name ) f where f.tablespace_name = a.tablespace_name and a.next_extent > f.big_chunk;



Disk Read最高的SQL语句的获取:

SQL>select sql_text from (select * from v$sqlarea order by disk_reads)

where rownum<=5;



查找前十条性能差的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 ;



等待时间最多的5个系统等待事件的获取:

SQL>select * from (select * from v$system_event where event not like 'SQL%' order by total_waits desc) where rownum<=5;



查看当前等待事件的会话:

col username format a10

set line 120

col EVENT format a30

select SE.Sid,s.Username,SE.Event,se.Total_Waits,SE.Time_Waited,SE.Average_Wait

from v$session S,v$session_event SE where S.Username is not null and SE.Sid=S.Sid

and S.Status='ACTIVE' and SE.Event not like '%SQL*Net%';



select sid, event, p1, p2, p3, wait_time, seconds_in_wait, state from v$session_wait where event not like '%message%' and event not like 'SQL*Net%' and event not like '%timer%' and event != 'wakeup time manager';



找到与所连接的会话有关的当前等待事件:

select SW.Sid,S.Username,SW.Event,SW.Wait_Time,SW.State,SW.Seconds_In_Wait SEC_IN_WAIT

from v$session S,v$session_wait SW where S.Username is not null and SW.Sid=S.Sid

and SW.event not like '%SQL*Net%' order by SW.Wait_Time Desc;



Oracle所有回滚段状态的检查:

SQL>select segment_name,owner,tablespace_name,initial_extent,next_extent,dba_rollback_segs.status from dba_rollback_segs,v$datafile where file_id=file#;



Oracle回滚段扩展信息的检查:

col name format a10

set linesize 140

select substr(name,1,40) name,extents,rssize,optsize,aveactive,extends,wraps,shrinks,hwmsize

from v$rollname rn,v$rollstat rs where (rn.usn=rs.usn);


extents:回滚段中的盘区数量。

Rssize:以字节为单位的回滚段的尺寸。

optsize:为optimal参数设定的值。

Aveactive:从回滚段中删除盘区时释放的以字节为单位的平均空间的大小。

Extends:系统为回滚段增加的盘区的次数。

Shrinks:系统从回滚段中清除盘区(即回滚段收缩)的次数。回滚段每次清除盘区时,系统可能会从这个回滚段中消除一个或多个盘区。

Hwmsize:回滚段尺寸的上限,即回滚段曾经达到的最大尺寸。

(如果回滚段平均尺寸接近OPTIMAL的值,那么说明OPTIMAL的值设置正确,如果回滚段动态增长次数或收缩次数很高,那么需要提高OPTIMAL的值)



查看回滚段的使用情况,哪个用户正在使用回滚段的资源:

select s.username, u.name from v$transaction t,v$rollstat r,
v$rollname u,v$session s where s.taddr=t.addr and
t.xidusn=r.usn and r.usn=u.usn order by s.username;



如何查看一下某个shared_server正在忙什么:

SELECT a.username,a.machine,a.program,a.sid,
a.serial#,a.status,c.piece,c.sql_text
FROM v$session a,v$process b,v$sqltext c
WHERE b.spid=13161 AND b.addr=a.paddr

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -