oracle 查出连续5行,【转】一份高级技术支持笔试题(主要是Oracle和Unix,含参考答案)...

一、    unix相关问题1、    你常用的主机和OS是什么?(以下Unix相关问题尽量基于你常用的Unix环境作答)

我常用的是Sun主机,操作系统一般是Solaris8或Solaris10。

2、    如何查看cpu信息,内存、交换区(swap)大小和使用情况

CPU大小:

sar -u t n 注意%usr,%sys,%wio,%idle(如果wio列的值很大说明系统的IO存在瓶颈,CPU花费了很大的时间去等待IO的完成; Idle很小说明系统CPU很忙。)

AIX:lsdev -C|grep Process 或 topas(root登陆)

Solaris:psrinfo -v 或 mpstat

内存大小:

vmstat t n 报告关于内存的统计信息

AIX:lsattr -E -l sys0 -a realmem 或 topas(root登陆) 或 svmon(root登陆)

HP-UX:grep MemTotal /proc/meminfo 或 top 或 glance

Linux:dmesg | grep "Physical:"

Solaris:prtconf|grep Mem 或 /usr/platform/sun4u/sbin/prtdiag|grep Mem

Tru64:/bin/vmstat -P | grep "Total Physical Memory"

显示分配的内存段:

ipcs -pmb

手动移除内存段分配:

ipcrm -m 96 (96是内存段id,用ipcs查到)

有的情况下内存实例崩溃,但是Oracle的内存段却没释放。注意,这个命令可以使Oracle瘫痪。只有后台进程异常死掉的时候才考虑用。

交换区:

AIX:lsps -a

HP-UX:swapinfo -tam

Linux:

Solaris:swap -s

Tru64:

3、    如何查看磁盘大小和使用情况,及其查看某一个目录空间各文件大小信息

df -k

du -sk /opt/testuser/* | sort -n 查看目录下各文件大小并排序

du -sk /opt/testuser/ 查看总目录大小

4、    如何查看主机名、主机类型,OS版本和IP地址

主机:uname -n

IP:ifconfig -a

5、    如何查看系统进程信息,你常用的进程管理命令有哪些?

查看:prstat -a 或 top

管理:pldd pid 显示链接到每个进程的动态链接库

pstack pid 显示十六进制与符号堆跟踪信息

fuser files

pwdx pid 查看进程运行目录

ptree pid 查看进程树信息

6、    列举几种诊断IO、CPU、性能状况的方法

w    显示高资源会话简单的信息

top 显示cpu和内存资源利用情况

iostat t n列出系统i/o负载(每t秒显示一次,共显示n次,下同)

当系统存在IO的问题,可以从以下几个方面解决:

*    联系相应的操作系统的技术支持对这方面进行优化,比如hp-ux在划定卷组时的条带化等方面。

*    查找Oracle中不合理的sql语句,对其进行优化。

*    对Oracle中访问量频繁的表除合理建索引外,再就是把这些表分表空间存放以免访问上产生热点,再有就是对表合理分区。

vmstat t n报告关于内核线程的统计信息(IRIX系统中对应osview)

当发现vmstat中pi列非零,memory中的free列的值很小,说明内存方面应调节:

*    划给Oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。

*    为系统增加内存

*    如果你的连接特别多,可以使用MTS的方式

*    打全补丁,防止内存漏洞

sar -u t n 观察CPU 的使用情况

sar -w t n 观察交换(swapping)的使用情况

sar -b t n 显示buffer的活动情况

7、    csh和ksh在设置环境变量上有什么不同?

csh: setenv NAME value1

ksh: NAME=value1; export NAME

8、    建立组dba,然后建立用户oracle,其home目录为/opt/oracle,使用ksh.

groupadd dba

useradd -d /opt/oracle -m -s /bin/ksh -g dba oracle

9、    显示当前登陆用户、当前系统时间、当前操作目录的命令

whoami、who am i

date

pwd

10、    如何知道testuser用户最近都做了哪些事情?

tail -30 ~testuser/.sh_history

11、    如何得到当前系统的核心参数信息,这样的参数影响oracle的安装。

AIX:lsattr -El sys0

HP-UX:kmtune | grep -i shm(after v11)

Solaris:cat /etc/system | grep sem

Tru64:sysconfig -q ipc, cat /etc/sysconfigtab | grep sem

12、    写crontab,让脚本/opt/test.sh在每周日晚上8:00执行。

00 20 * * 0 /opt/test.sh

13、    以下选择其一做:

写一条指令,找寻当前目录及其所有子目录下的所有dbf后缀的文件,并拷贝到/opt/oracle/oradata目录下。

find . -name "*.dbf" -exec cp {} /opt/oracle/oradata \;

写一条指令,删除当前目录下(不含子目录)除了abc.txt以外的以.txt结尾的修改时间大于7天的文件。

find . -level 0 -name "*.txt” ! -name "abc.txt" -mtime +7 -exec rm {} \;

写一条指令,查找当前目录及其所有子目录下含有“ORA-”或“warning”字符内容的所有带log后缀的文件。

find . -name "*.log" -print | xargs egrep -i -e "ORA-|warning"

14、    写一段shell,要求传入两参数,一个是ORACLE_SID,一个是大于100的数字值,如果输入正确就打印出“Right parameter”,否则输出"usage:$0 (where value is > 100)",且限制只有oracle用户可以运行该脚本。

#!/bin/ksh

if [ `whoami` != oracle ]

then

echo "Error:you must be oracle to execute."

exit 99

fi

#check if null

if [ -z "$1" -o -z "$2" ]

then

echo "usage:$0 (where value is > 100)"

exit 99

fi

tmp=`expr $2` #convert string to number,tmp = `expr $2` is error

if [ $tmp -lt 101 ]

then

echo

echo "Argument two is less then 100.\

Aborting script."

echo

exit 99

fi

echo "Right parameter"

15、    写一段shell,把test.txt中的数据插入表tab_test,每插入一条数据自动执行/opt/oracle/auto.sql。并将该shell提交到后台执行,然后想办法实时查看当前shell执行日志。

数据库信息:

ORACLE_SID=ORCL,可sqlplus testuser/test登陆

test.txt文件内容如下:

123

456

789

tab_test表结构如下:

create table tab_test (c1 number,c2 date default sysdate);

#!/bin/ksh

ORACLE_SID=ORCL;export ORACLE_SID

# /etc/oratab (AIX & HP-UX) or /var/opt/oracle/oratab in Solaris.

ORACLE_HOME=`cat /var/opt/oracle/oratab | grep ^$ORACLE_SID: | cut -f2 -d':'`

export ORACLE_HOME

PATH=$ORACLE_HOME/bin:$PATH;export PATH

for tmp in `cat test.txt`

do

$ORACLE_HOME/bin/sqlplus -S testuser/oss

@/opt/oracle/auto.sql

commit;

exit

!

done

然后要用chmod 755 runsql.ksh来将此脚本改成可执行。

$ nohup ./runsql.ksh > runsql.log 2>&1 & (放入后台执行)

$ tail -f runsql.log或tail -f nohup.log (不断的显示输出文件中的新的行)

二、    oracle相关问题(未作特殊说明,基于unix下oracle9i作答)

1、    数据库报警日志文件alertSID.log、初始化参数文件和trace文件分别存放在哪个目录下?

alertSID.log:background_dump_dest参数指定的目录下,默认是在$ORACLE_BASE/admin/$ORACLE_SID/bdump下;

init文件:spfile参数指定的目录下,默认是在$ORACLE_HOME/dbs;

trace文件:user_dump_dest参数指定的目录下,默认是在$ORACLE_BASE/admin/$ORACLE_SID/udump下。

2、    如何优化系统?

系统级别:statspack 15分钟一次

应用级别:10046 event + tkprof

不要碰到数据库就要优化,如果数据库运行状况不能满足客户需求时,就针对需求去优化!当然,数据库健康检查总是要做!

3、    写sql。

SQL> desc emp;

Name                           Null?    Type

------------------------------ -------- -------------------------------

EMPNO                          NOT NULL NUMBER(4)

ENAME                                   VARCHAR2(10)

JOB                                     VARCHAR2(9)

MGR                                     NUMBER(4)

HIREDATE                                DATE

SAL                                     NUMBER(7,2)

COMM                                    NUMBER(7,2)

DEPTNO                                  NUMBER(2)

1)    查出各部门薪水最高的三个员工的部门、姓名和薪水。

break on deptno;

select deptno,ename,sal

from (

select deptno,ename,sal,

row_number() over (partition by deptno order by sal) as rank

from emp

)

where rank <= 3 ;

2)    查看各部门的薪水合计,要求有总计信息。

break on deptno skip 1;

select decode(grouping(deptno),1,'总计',to_char(deptno)) deptno,

sum(sal) sum_sal

from emp

group by rollup(deptno);

3)    查看各部门和工作职位薪水合计,要求分别有部门和工作职位的总计信息。

select decode(grouping(deptno),1,'总计',to_char(deptno)) deptno,

decode(grouping(job),1,'小计',job) job,

sum(sal) sum_sal

from emp

group by cube(deptno,job)

order by deptno,job nulls last;

4)    查看各部门和工作职位薪水合计,要求按部门有百分比信息。

break on deptno skip 1;

compute sum of sum_sal on deptno;

compute sum of ratio_pct on deptno;

select deptno,job,sum(sal) sum_sal,

ratio_to_report(sum(sal)) over (partition by deptno) ratio_pct

from emp

group by deptno,job;

4、    如何设置会话跟踪?

alter session set sql_trace=true

dbms_system.set_sql_trace_in_session(sid,serial,true)

5、    sqlplus一台DB后,如何得到用户当前的sid和对应的OS进程号?

select distinct sid from v$mystat;

select spid from v$process p,v$session s where p.addr=s.paddr and s.sid = :sid;

6、    如何得到"select * from dual"语句的执行计划和统计信息?

第一种方法:(看执行计划)

explain plan for select * from dual;

@?/rdbms/admin/utlxpls.sql

第二钟方法:

set autotrace traceonly

select * from dual

附:set autotrace 选项

on              显示查询结果,执行计划,统计数据

on statistics   显示查询结果,统计数据,不显示执行计划

on explain      显示查询结果,执行计划,不显示统计数据

traceonly       显示执行计划和统计结果,但不包括查询结果

traceonly statistics 仅显示统计数据

第三种方法:借助toad等第三方工具

(如果plan_table 表不存在,首先执行@?/rdbms/admin/utlxplan.sql建立该表)

7、    不借助第三方工具,如何得到表和存储过程(包)的结构信息?

表:desc,dbms_metadata.get_ddl

存储过程(包):desc

8、    写存储过程把当前schema下数据库对象个数信息按对象类型分组输出来。并写出在sqlplus得出输出结果的执行过程。

输出结果类似:

对象类型:xxx1,个数:yyy1

对象类型:xxx2,个数:yyy2

对象类型:xxx3,个数:yyy3

create or replace procedure sp_test

as

p_object_type varchar2(30);

p_object_count number(10);

cursor cur is

select object_type,count(*)

from user_objects

group by object_type;

begin

open cur;

loop fetch cur into p_object_type, p_object_count;

exit when cur%notfound;

dbms_output.put_line('对象类型:'||to_char(p_object_type)||',个数:'||to_char(p_object_count));

end loop;

close cur;

end;

执行过程:

set serveroutput on size 100000

exec sp_test;

9、    一个oracle实例是由SGA和哪几个后台进程组成的?SGA有哪些组成部分及简述它们的作用?PGA是什么?

后台进程:系统监控和进程监控进程(SMON和PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、归档进程(ARCH)、检查点(CKPT);

其它可选进程:调度进程(Dnnn)、恢复进程(RECO)、快照进程(SNPn)、锁进程(LCKn)、并行查询进程(Pnnn)。

数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件;

日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件;

系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复;

进程监控(pmon):负责在一个Oracle 进程失败时清理资源;

检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息;

归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档;

作业调度器(cjq):负责将调度与执行系统中已定义好的job,完成一些预定义的工作;

恢复进程(reco):保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

SGA包含:db_cache、shared_pool、large_pool、java_pool

db_cache:数据库缓存(Block Buffer)占据Oracle数据库SGA(系统共享内存区)的主要部分,Oracle数据库通过使用LRU算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问;

shared_pool:共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL 块和SQL 语句及控制结构;

large_pool:使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存;使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器;

java_pool:为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的。

PGA:程序全局区,是保存有特定服务进程的数据和控制信息的内存结构,这个内存结构是非共享的,只有服务进程本身才能够访问它自己的PGA区。每个服务 进程都有它自己的PGA区,各个服务进程PGA区的总和即库实例的PGA区的大小。一般情况下,PGA区都由私有SQL工作区和会话内存区组成。

10、    你常用的数据字典视图和动态性能视图有哪些?

dba_xxx,v$xxx系列

11、    陈述使用过的备份和恢复技术,及其优缺点。

exp/imp

rman

12、    简单描述 table/segment/tablespace/datafile/extent/block 之间的关系。

一个table至少是一个segment,如果分区表,则每个分区是一个segment,table可以看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;

segment由一个或多个extents组成,segment不可以跨表空间但可以跨数据文件;

extent由多个连续的blocks组成,不可以跨数据文件;

block由1-多个os块组成,是oracle i/o的最小存储单位。

tablespace是逻辑上的概念,datafile是物理上的概念;一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。

13、    你关注的oracle初始化参数有哪些?

show parameter

三、    其它

1、    使用任何一种你熟悉的脚本语言,完成从DB中获取表tab的数据并转成文本的功能,要求各字段以逗号分隔,每条记录占用一行。

DB的实例信息如下:sqlplus scott/tiger@(description=(address=(protocol=tcp)(host=192.168.1.4)(port=1521))(connect_data=(server=dedicated)(service_name=orcl)))

2、    某天现场反映BOSS系统非常之慢,根据经验这很有可能是某些sql执行效率低下造成的,需要你去分析诊断,详细陈述诊断流程。

(包括写下可能用到的OS命令、DB的数据字典试图和动态性能视图)

3、    选择你负责或参与的电信项目的子系统,简要介绍该子系统数据流程。

4、    Choose at least one of the topics from the following and write whatever you want.

? Business Intelligence, Data Warehouse, CRM

? TMF's eTOM/NGOSS, CMCC's NGBOSS, CU's NGBSS, CT's CTG-MBOSS

? latest web frameworks

? open source products that you have used before or are focusing on

? latest web2.0 sites.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11411056/viewspace-733355/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值