Oracle DBA面试突击题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle DBA面试突击题相关的知识,希望对你有一定的参考价值。
一份ORACLE DBA面试题
一:SQL tuning 类
1:列举几种表连接方式
答:Oracle的多表连接算法有Nest Loop、Sort Merge和Hash Join三大类,每一类又可以分为三小类。
以Nest Loop为例:
- 传统的Nest Loop连接;
- 针对In、Exists优化的Semi Nest Loop;
- 专门针对Not In、Not Exists优化的Anti Nest Loop。
Semi/Anti *** Join这几种也叫半连接。
(可以补充一下这三个连接的不同之处)
2:不借助第三方工具,怎样查看sql的执行计划
答:
Explain Plan For...命令是最简单的获得执行计划的方法,这个命令生成指定的SQL语句的执行计划,并把执行计划保存到用户指定的表中供用户查询。但是Explain Plan For命令获得的执行计划不是Libary Cache中的执行计划,因此其准确性会打折扣。
SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics
SET AUTOTRACE ON;
3:如何使用CBO,CBO与RULE的区别
答:在初始化参数里面设置optimizer_mode=choose/all_rows/first_row等可以使用cbo.<br />rbo会选择不合适的索引,cbo需要统计信息。
在确定最佳的访问路径里面。如果是RBO,根据一些预定义的规则来决定访问路径;如果是CBO,则根据对象的统计信息确定访问路径。
CBO是基于成本(Cost)来评估执行计划的,CBO所用到的成本其实就是物理IO、逻辑IO的数量。
Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)
RBO: Rule-Based Optimization 基于规则的优化器
CBO: Cost-Based Optimization 基于代价的优化器
RBO自ORACLE 6以来被采用,一直沿用至ORACLE 9i. ORACLE 10g开始,ORACLE已经彻底丢弃了RBO,它有着一套严格的使用规则,只要你按照它去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说RBO对数据不“敏感”;它根据ORACLE指定的优先顺序规则,对指定的表进行执行计划的选择。比如在规则中,索引的优先级大于全表扫描;RBO是根据可用的访问路径以及访问路径等级来选择执行计划,在RBO中,SQL的写法往往会影响执行计划,它要求开发人员非常了解RBO的各项细则,菜鸟写出来的SQL脚本性能可能非常差。
CBO优化器根据SQL语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,并调用计划生成器(Plan Generator)生成执行计划,比较执行计划的代价,最终选择选择一个代价最小的执行计划。查询优化器由查询转换器(Query Transform)、代价估算器(Estimator)和计划生成器(Plan Generator)组成。
在Oracle 9i中,优化器模式可以选择first_rows_n,all_rows, choose, rule 等模式:
Rule: 基于规则的方式。
Choolse:指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。
First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
All Rows: 10g中的默认值,也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐
4:如何定位重要(消耗资源多)的SQL
答:根据v$sqlarea 中的逻辑读/disk_read。以及寻找CPU使用过量的session,查出当前session的当前SQL语句,或者:监控WIN平台Oracle的运行
5:如何跟踪某个session的SQL。
答:先找出对应的‘sid,serial‘,然后调用system_system.set_sql_trace_in_session(sid,serial,true);参考:跟踪某个会话
6:SQL调整最关注的是什么
答:逻辑读。IO量
7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能。
答:默认的索引是b-tree.
对insert的影响.(分裂,要保证tree的平衡)
对delete的影响.(删除行的时候要标记改节点为删除).
对update的影响,如果更新表中的索引字段,则要相应的更新索引中的键值。
查询中包含索引字段的键值和行的物理地址。
8:使用索引查询一定能提高查询的性能吗?为什么。
答:不一定能够。如果返回的行数目较大,使用全表扫描的性能较好。
第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。第三,对于那些定义为text,image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。
9:绑定变量是什么?绑定变量有什么优缺点
答:通俗的说,绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值不同的
语句的解析。
10:如何稳定(固定)执行计划
答:使用stored outline.
11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么
答i:使用sort_area_size,hash_area_size,每个session分配相同的值,不管有无使用。
9i: 使用pga_aggregate来统一管理。
临时表空间的作用:
在sort_area_size中不能完成的部分在临时表空间完成,临时表空间在重建索引,创建临时表等都要用到。
还有hash join不能完成的也在临时表空间中做。
12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
或者:
select * from (select rownum rn,a.* from (select a,b,c,d from T order by c) a )where rn between 21 and 30;
二:数据库基本概念类
1pctused and pctfree 表示什么含义有什么作用
答:表示数据块什么时候移入和移出freelist。
pctused:如果数据块的使用率小于pctused的值,则该数据块重新加入到fresslist中。
pctfree:如果数据块的使用率高于pctfree的值,则该数据块从freelist中移出。
2:简单描述table / segment / extent / block之间的关系
答:一个table至少是一个segment,如果分区表,则每个分区是一个segment,table可以看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;
segment由一个或多个extents组成,segment不可以跨表空间但可以跨数据文件;
extent由多个连续的blocks组成,不可以跨数据文件;
block由1-多个os块组成,是oracle i/o的最小存储单位。
3:描述tablespace和datafile之间的关系
答:tablespace是逻辑上的概念,datafile是物理上的概念。
一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。
4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点
答:一个使用freelist管理,一个使用位图管理。
5:回滚段的作用是什么
答:保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!
6:日志的作用是什么
答:记录对数据库的操作,便与恢复。
7:SGA主要有那些部分,主要作用是什么
答:db_cache(缓存数据块),shared_pool(缓存sql,执行计划,数据字典信息等),large_pool(MTS模式、parallel 、rman等要用到),java pool(java程序如SQLJ存储过程运行时要用到)
8:racle系统进程主要有哪些,作用是什么
答:smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的时候归档日志文件),lgmr(日志书写器进程,负责写日志),ckpt(检查点进程,触发检查点),dbwr(数据库写入器,负责把数据写入导datafile)
三:备份恢复类
1:备份如何分类
答:逻辑备份(exp)与物理备份。
或者冷备份与热备份。
2:归档是什么含义
答:把日志文件放到另一个地方。
3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复
答:拷贝备份,
recover database until time 2004-08-04 10:30:00
alter database open resetlogs;
4:rman是什么,有何特点
答:rman叫恢复管理器.
特点很多。可以在线备份,到少目标数据库是mount状态。
1:热备份。
2:可以存储脚本。
3:可以增量备份。
4:自动管理备份集。
5:standby的特点
答:利用传输重做日志来达到同步的目的。可以设定多个保护级别,9i后支持逻辑standbyDB。
6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
答:每天一个全备份。
四:系统管理类
1:对于一个存在系统性能的系统,说出你的诊断处理思路
答:做一个statspack,根据top 5,system load,top sql等来做相应的调整。
2:列举几种诊断IO、CPU、性能状况的方法
答:hp-unix:iostat -x 1 5;
top/vmstat/glance
3:对statspack有何认识
答:一个性能诊断工具而已,其本质就是在两个时间点采样两个系统数据。(动态性能视图),然后根据两个snapshot,产生一个报告。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
答:1:增大sort_area_size(8i)/pga_aggregate_target(9i)值。
2:如果表有分区(一般大表都要用到分区的),按分区逐个建索引,如果是本地索引的话;
3:系统空闲的时候建。
5:对raid10 和raid5有何认识
答:raid10是先镜像后条带,适合对写入速度要求较高的数据库系统,特别是online redolog文件,raid5适合大部分的数据库系统和数据仓库系统,读性能优于写性能。
五:综合随意类
1:你最擅长的是oracle哪部分?
答:性能/sql 调优、备份恢复。
2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?
答:http://www.itpub.net/,Oracle的SQL 优化。
3:随意说说你觉得oracle最有意思的部分或者最困难的部分
答:SQL调优,最困难的是Oracle的网络管理,Oracle的Connect Manager没用过。
4:为何要选择做DBA呢?
答:爱好加职业历史积累。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
答:1:增大sort_area_size(8i)/pga_aggregate_target(9i)值。
2:用并行的方式来建。
3:系统空闲的时候建。
其他:
什么是聚集索引,什么是非聚集索引,什么又是主键?
聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。
非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键,通过它可强制表的实体完整性。
1、事务是什么?A:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
2、oracle中truncate和delete命令有何区别?A:
(1)delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,truncate执行都很快。
(2)truncate 是 DDL,执行隐含的commit,truncate不能回滚。任何没有提交的 DML 改变也将会和truncate一起提交。
(3)truncate 重置表及其索引高水位标志。全表扫描和索引快速全扫描读高水位标志下的所有数据块,因此在delete后全扫描性能没有提高,但truncate后将会变快。
(4)truncate 不触发 delete 触发器。
(5)没有对象权限允许一个用户 truncate 另一个用户的表。这样做需要 DROP ANY TABLE 系统权限。
(6)当一个表被 truncate,表及其索引的存储将被重置回初始大小。而 delete 不收缩表及其索引的大小。
(7)当父表有一个可用的引用完整性约束时不能被 truncate。必须先disable引用父表的外键约束,再truncate。
3、Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?A:char是定长字符类型,varchar2是变长字符类型。“test”在char(10)中被补齐空格,存储长度是10字节,在varchar2(10)中存储长度是4字节。
Oracle DBA笔试及面试题汇总:基础篇-考试认证
使用篇
1:使用索引查询一定能提高查询的性能吗?举出实例
2:数据库设计的一、二、三范式、BCNF是什么?
3:StoreProcedure和Function有何区别?
4:如何跟踪某个session的SQL?
5:如何使用CBO,CBO与RULE的区别?
6:描述tablespace和datafile之间的关系
7:truncate和delete有何区别?哪一种操作性能更快?
8:什么是Snapshot?与View有何区别?
9:pctused and pctfree 表示什么含义有什么作用
10:cursor一般用在什么地方?有何弱点?
管理篇
1:SQL调整最关注的是什么?
2:Oracle的系统进程有哪些?作用是什么?
3:本地管理表空间和字典管理表空间的特点,ASSM有什么特点?
4:备份如何分类?
5:如果一个表被drop,在有完善的归档和备份的情况下,如何恢复
6:rman是什么,有何特点?
7:standby的特点
8:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
9:对于一个存在系统性能的系统,说出你的诊断处理思路
10:列举几种诊断IO、CPU、性能状况的方法
11:对statspack有何认识
12:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
13:对raid10 和raid5有何认识
14:SGA主要有那些部分,主要作用是什么
15:简单描述table / segment / extent / block之间的关系
16:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
8.简述堆栈与队列的区别。
Oracle DBA 笔试题
(答题时间60分钟)
Unix/Linux题目
1、如何查看主机cpu,内存、IP和磁盘空间?
2、你常用的进程管理、主机性能察看命令有哪些?
3、建立组dba和该组下用户oracle,默认shell为bash。
4、如何查看用户oracle的登陆历史和命令操作历史?
5、写crontab,让脚本/opt/test.sh在每周日晚上8:00执行。
6、如何查找当前目录及其所有子目录下含有“ORA-”或“warning”字符内容的所有带log后缀的文件。
7、写一个shell,完成自动登陆数据库(用户名密码是test/testpwd, 网络连接串是db_wending)并获取数据库当前SCN的功能。
Oracle Database题目
1、如何快速了解一个已经运行很久的数据库系统?
2、如何获得SQL语句的执行计划和统计信息?
3、列出你常用的数据字典视图和动态性能视图。
4、陈述使用过的数据库备份和恢复技术,及其优缺点。
5、描述 table/segment/tablespace/datafile/extent/block 之间的关系。
6、前台系统反映非常慢,需要你去分析诊断。请详细陈述诊断流程,包括写下可能用到的操作系统命令、数据库视图等。
7、公司准备把Oracle9i升级为Oracle10.2.0.4,但批准的停库时间仅为10分钟,你打算如何应对?
8、详细陈述RAC、Dataguard、Streams Replication、Advanced Replication等Oracle HA技术的原理和优缺点。
9、写存储过程,把当前用户下数据库对象个数信息按对象类型分组输出来。
10、请写下你常关注的oracle初始化参数。
--End--
国外公司的Oracle DBA 面试题
2007-11-20 10:20
Oracle DBA Interview Questions By B G
1. How many memory layers are in the shared pool?
2. How do you find out from the RMAN catalog if a particular archive log has been backed-up?
3. How can you tell how much space is left on a given file system and how much space each of the file system‘s subdirectories take-up?
4. Define the SGA and:
? How you would configure SGA for a mid-sized OLTP environment?
? What is involved in tuning the SGA?
5. What is the cache hit ratio, what impact does it have on performance of an Oracle database and what is involved in tuning it?
6. Other than making use of the statspack utility, what would you check when you are monitoring or running a health check on an Oracle 8i or 9i database?
7. How do you tell what your machine name is and what is its IP address?
8. How would you go about verifying the network name that the local_listener is currently using?
9. You have 4 instances running on the same UNIX box. How can you determine which shared memory and semaphores are associated with which instance?
10. What view(s) do you use to associate a user‘s SQLPLUS session with his o/s process?
11. What is the recommended interval at which to run statspack snapshots, and why?
12. What spfile/init.ora file parameter exists to force the CBO to make the execution path of a given statement use an index, even if the index scan may appear to be calculated as more costly?
13. Assuming today is Monday, how would you use the DBMS_JOB package to schedule the execution of a given procedure owned by SCOTT to start Wednesday at 9AM and to run subsequently every other day at 2AM.
14. How would you edit your CRONTAB to schedule the running of /test/test.sh to run every other day at 2PM?
15. What do the 9i dbms_standard.sql_txt() and dbms_standard.sql_text() procedures do?
16. In which dictionary table or view would you look to determine at which time a snapshot or MVIEW last successfully refreshed?
17. How would you best determine why your MVIEW couldn‘t FAST REFRESH?
18. How does propagation differ between Advanced Replication and Snapshot Replication (readonly)?
19. Which dictionary view(s) would you first look at to understand or get a high-level idea of a given Advanced Replication environment?
20. How would you begin to troubleshoot an ORA-3113 error?
21. Which dictionary tables and/or views would you look at to diagnose a locking issue?
22. An automatic job running via DBMS_JOB has failed. Knowing only that "it‘s failed", how do you approach troubleshooting this issue?
23. How would you extract DDL of a table without using a GUI tool?
24. You‘re getting high "busy buffer waits" - how can you find what‘s causing it?
25. What query tells you how much space a tablespace named "test" is taking up, and how much space is remaining?
26. Database is hung. Old and new user connections alike hang on impact. What do you do? Your SYS SQLPLUS session IS able to connect.
27. Database crashes. Corruption is found scattered among the file system neither of your doing nor of Oracle‘s. What database recovery options are available? Database is in archive log mode.
28. Illustrate how to determine the amount of physical CPUs a Unix Box possesses (LINUX and/or Solaris)。
29. How do you increase the OS limitation for open files (LINUX and/or Solaris)?
30. Provide an example of a shell script which logs into SQLPLUS as SYS, determines the current date, changes the date format to include minutes & seconds, issues a drop table command, displays the date again, and finally exits.
31. Explain how you would restore a database using RMAN to Point in Time?
32. How does Oracle guarantee data integrity of data changes?
33. Which environment variables are absolutely critical in order to run the OUI?
34. What SQL query from v$session can you run to show how many sessions are logged in as a particular user account?
35. Why does Oracle not permit the use of PCTUSED with indexes?
36. What would you use to improve performance on an insert statement that places millions of rows into that table?
37. What would you do with an "in-doubt" distributed transaction?
38. What are the commands you‘d issue to show the explain plan for "select * from dual"?
39. In what script is "snap$" created? In what script is the "scott/tiger" schema created?
40. If you‘re unsure in which script a sys or system-owned object is created, but you know it‘s in a script from a specific directory, what UNIX command from that directory structure can you run to find your answer?
41. How would you configure your networking files to connect to a database by the name of DSS which resides in domain icallinc.com?
42. You create a private database link and upon connection,
fails with: ORA-2085: connects to .
What is the problem? How would you go about resolving this error?
43. I have my backup RMAN script called "backup_rman.sh". I am on the target database. My catalog username/password is rman/rman. My catalog db is called rman. How would you run this shell script from the O/S such that it would run as a background process?
44. Explain the concept of the DUAL table.
45. What are the ways tablespaces can be managed and how do they differ?
46. From the database level, how can you tell under which time zone a database is operating?
47. What‘s the benefit of "dbms_stats" over "analyze"?
48. Typically, where is the conventional directory structure chosen for Oracle binaries to reside?
49. You have found corruption in a tablespace that contains static tables that are part of a database that is in NOARCHIVE log mode. How would you restore the tablespace without losing new data in the other tablespaces?
50. How do you recover a datafile that has not been physically been backed up since its creation and has been deleted. Provide syntax example.
如何获得Oracle DBA工作?
不过48个小时,就有120封Oracle 数据库管理员的求职信堆在了Debbie Reames的桌子上,Reames是位于洛杉矶的商业编程公司的高级技术招聘人员。然后Reames做了许多招聘人员都做的事情。她通过三个步骤的过程剔除了其中的一般简历。需要H-1B visa信用卡?走吧。需要重新安置?不适合这个工作。只在小公司工作过?这个职位对你来说太大了。
根据多项调查,除了IT历史上最低迷的时期之外,Oracle总是为那些经过认证的专业人士和数据库管理员提过了大量的工作机会。当然,具有资格的候选人的列表就更长了。当在市场上寻找一份工作的时候,即使是最资深的IT专家都需要记住一些他们在很久以前就学到的规则,并且同时采用一些新的策略。
数据库管理员市场可以按照以多种方式分为两个部分——初级和高级。
Don Burleson,位于美国北卡罗来纳州Kittrell的BEI Oracle顾问公司的所有者,说,那些工作经验少于3年的初级数据库管理员,经常会面临失业和低等的工作市场。Burleson曾写过与Oracle技术和职业生涯有关的17本书,其中包括《Oracle工作面试指导(Conducting the Oracle Job Interview)》,这本书是为那些需要评估Oracle周围候选人的IT经理们准备的指南。
“过去,许多公司都不会雇佣初学者,” Burleson说。
然而,Burleson说,那些初级数据库管理员仍然是有希望的。那些不愿意花12万美元年薪雇佣经验丰富的专家的公司有时候会雇佣这些新手并对他们进行培训。Burleson建议那些新入门的数据库管理员可以到体检行业和大学这两个地方去找到他们的第一份工作。
政府安全检查对资深人员很关键
然后就是资深人士。那些拥有超过10年经验的,拥有高级学位,并且具有专业技能的数据库管理员仍然有很大的需求量。
Oracle财务知识,SAP,PeopleSoft, 9i RAC, 9iAS 和 Unix都是重要的能力,Burleson说。还有,政府安全调查是在第一轮的简历挑选中排除许多Oracle数据库管理员的一项。另外,开发技能,例如Java,Windows,J2EE和门户,都是候选人具有竞争力的优势。
更重要的是,Reames说,候选人的技能需要与公司的需要相匹配。“他们真的需要拥有全面技能,” Reames说。
“如果工作需要的是能够进行数据建模的人,”她说,“并且我没有在简历中看见任何的数据建模经验,那么我就会对这个人大打折扣。”
除了专业技能之外,Burleson说,许多的公司都愿意要那些有教育背景的人,倾向于雇佣那些拥有研究生学位或者MBA的候选人。公司认为那些懂得财务或者会计,具有数据库管理员支持的业务过程知识的数据库管理员有价值。
打跟进电话,第一轮面试
对于两个群体,要通过关键的第一轮面试都有一些基本的规则需要遵守。
今早地投递简历是有帮助的。如果有120份简历需要阅读的话,Reames也许不会把所有简历都读完就找到了达到面试要求,具有足够特点的候选人。
候选人应该给招聘人员打电话确认他们的简历被收到了,她说。“不要害怕打跟进电话,” Reames说。“这会带给你一个优势,否则我们可能就不会看你的简历。”
通过第一轮筛选的申请人通常是在电话中面试。记住面试你的人也许没有任何技术背景,这一点很重要,Burleson说。在这一点上,是对候选人从技术之外的其他品质上进行判断。专家说,此时沟通技巧非常重要。
因为沟通技巧在工作中是如此的重要,Burleson推荐候选人提供给潜在的雇主写作样例,尤其是那些得到发表的。有几个在线网站,包括这一个,都接受技术贴士投稿,他指出。
实际的技术对话
少数能够通过电话面试的候选人能够到工作地点去进行面试,Burleson称之为候选人的技术化。他建议面试人员提出一些专业的问题,例如“Oracle中的SYS用户默认密码是多少?”
这些问题没有捏造的答案,面试人员可以轻松地判断候选人的技术能力。“只有那些实践过的数据库管理员知道答案是‘change_on_install,’” Burleson说。“经验丰富的数据库管理员可以立即发现谎话。”
然后就是最后一个阶段,与公司的IT人员在线会见。这些会见通常会持续半天,这是真正在测试你是否会被雇佣。有时候是一些开放的问题,例如“如果一个终端用户抱怨性能差劲,你要做的第一件事情是什么?”这些问题的答案非常具有启发性,Burleson说,因为他们也没有正确答案,他们只是看看候选人是如何独立思考的,或者是数据库管理员有多少创新思维。
也许更重要的是,这个最后的交流就是判断一些无形的,例如人际关系技巧的过程。拥有一个能够成为团队中一员的数据库管理员对于大多数公司(即使不是所有的公司)来说都是优先考虑的。在很多情况下 ,这些无形的东西形成了差别。
“我见过公司拒绝了技术能力最强的候选人。这样的事情总是发生,” Burleson指出。“数据库管理员需要与其他人打好关系。”
最后,Burleson说,忘掉星期五可以穿便装的习惯。
“面试中穿得太随便是对自己的极度不负责,”他说。
“外表确实重要。”
整理了几个Oracle面试中的技术问题,各位可以借鉴一下:
1.解释冷备份和热备份的不同点以及各自的优点
解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
2.你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
3.如何转换init.ora到spfile?
解答:使用create spfile from pfile 命令.
4.解释data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
5.给出两个检查表结构的方法
解答:1.DESCRIBE命令
2.DBMS_METADATA.GET_DDL 包
6.怎样查看数据库引擎的报错
解答:alert log.
评价:这里的回答并不是十分全面,这些问题可以通过多个角度来进行解释,也许你不必在面试过程中给出完全详尽的答案,只需要通过你的解答使面试考官了解你对ORACLE概念的熟悉程度。
Oracle DBA 问题记录
1.select执行时oracle内部的过程
分析:其中包括语法分析、语义分析、视图转换、表达式转换、选择优化器、选择连接方式、选择连接顺序、选择数据搜索路径等等,然后在SGA中的共享SQL区中找是否执行过该语句,如找到则直接执行已编译的SQL语句,如没有找到,则先编译后放入SGA,并执行编译后的SQL语句。
执行:在执行编译过的SQL语句时,先在SGA中的数据库缓冲区内查找是否存在所需要的数据,如有直接读取,如果没有,则从物理文件中读取至数据库缓冲区并读取。
返回结果:对SELECT 语句需要返回结果的语句,先看是否需要排序,需要,则排序后返回给用户,然后根据内存的大小不同,可以一次取出一行数据,也可以一次取一组数据。
2.热备份导致非一致性解决方法
使用热备份会导致备份的数据具有非一致性,在Oracle提供的RMAN工具中可以依靠联机重做日志解决恢复备份时导致的非一致性。
3.热备份所备份文件
数据库文件
日志文件
控制文件
参数文件
口令文件
网络参数文件
4.数据库中的最小读写操做以什么为单位
Oracleblock是Oracle数据库中读写操作的最小单元。一个Oracleblock由三个部分组成,分别是数据块头、自由空间、实际数据三部份组成。
数据块头:主要包含有数据块地址的一些基本信息和段的类型,以及表和包含有数据的实际行的地址。
自由空间:是指可以为以后的更新和插入操作分配的空间,大小由PCTFREE和PCTUSED两个参数影响。
实际数据:是指在行内存储的实际数据。
当创建或者更改任何表和索引的时候,Oracle在空间控制方面使用两个存储参数:PCTFREE: 为将来更新已经存在的数据预留空间的百分比。PCTUSED:用于为插入一新行数据的最小空间的百分比。这个值决定了块的可用状态。可用的块时可以执行插入的块,不可用状态的块只能执行删除和修改,可用状态的块被放在freelist中。
5.数据库的两种连接模式
1.专用服务器连接(dedicated server)
在专用服务器模式下,优点就是每个用户都有一个连接,所以大家不至于有的应用占着连接造成别的客户的请求给挂起了。而最大的缺点在于内存管理上。
2.共享服务器连接(shared server)
而共享连接方式优点在于连接数量固定,所以内存数量不会占用很多。共享服务器的最大的缺点还是在于数据仓库模式下运行的时候,如果有大量的请求需要长时间占用服务器,那么就会造成很多别的请求的挂起,导致整个服务器性能的降低。
6.oracle服务器的体系结构
oracle系统体系结构由实例、逻辑结构和物理结构组成。
1.实例:SGA、系统监视SMON、进程监视PMON、数据库写入器DBWn、日志写入器LGWR、检查点CKPT等进程组成。
2.逻辑结构:主要由:表空间、段、区和数据块等概念组成。逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构。数据库存储层次结构及其构成关系,结构对象也从数据块到表空间形成了不同层次的粒度关系
3.物理结构:主要是数据库文件,包括控制文件、重做日志文件、数据文件等等。
7.RAC实际应用群集
RAC允许不同计算机上的多个实例打开共享磁盘系统上的一个或多个公用数据库,它极大地提高了数据库的性能、容错和可伸缩性。多对多的架构也可用较低的价格扩展数据库规模。
8.Linux启动过程
poweron --BIOS自检--LILO/GRUB调用---KERNEL 调用--INIT 调用---MIGGETTY--LOGIN
9.Linux决定开机后是否进入GUI界面的配置文件名
在UNIX/Linux中一般将运行级别分为7级(一说九级,但实际应用为六级,保留一级):
0 系统停机
1 单用户模式
2 多用户模式
3 网络多用户模式
4 保留
5 X11模式(即进入图形界面模式)
6 重起
系统将其设置在/etc/inittab配置文件中:
id:3:initdefault:
10.oracle调整工具
1.STATSPACK:通过Statspack我们可以很容易的确定Oracle数据库的瓶颈所在,记录数据库性能状态。
2.SQL Tuning:SQL Tuning Advisor用一个调整工具集作为输入,检查其中的语句并为它们提出优化建议。
11.Date Guard
Oracle9i Data Guard 通过使用称为standby database的数据库来防止出现数据的灾难。它通过将primary database数据库的重做日志传到并应用到standby database数据库来使standby database数据库与primary database数据库同步。
OracleStandby Database 是最经常使用的最有效的灾难解决方案。在过去版本的基础上,Oracle9i 又进行了许多改进,使其功能远远超过了基本的灾难恢复要求。通过将复杂的工作自动化,并对监控、警告、以及控制机制的大规模改进,Standby Database 和一些新的模块可以帮助DBA从错误操作、瘫痪、以及其它的灾难中恢复(这些灾难都可能毁掉数据库)。另外,通过使用Oracle9i Standby Database,由于硬件和软件升级造成的宕机时间也可以极度缩短。
Oracle9i 将改进过的8版本的Standby Database功能,与几个新增加的防止用户错误和瘫痪的模块合起来称为Oracle9i Data Guard。
oracle 存储过程的基本语法
oracle 存储过程的基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
END 存储过程名字
2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.变量赋值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
关于oracle存储过程的若干问题备忘
1.在oracle中,数据表别名不能加as,如:
select a.appname from appinfo a;-- 正确
select a.appname from appinfo as a;-- 错误
也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧
2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。
select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 有into,正确编译
select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;-- 没有into,编译报错,提示:Compilation
Error: PLS-00428: an INTO clause is expected in this SELECT statement
3.在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。
可以在该语法之前,先利用select count(*) from 查看数据库中是否存在该记录,如果存在,再利用select...into...
4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错
select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正确运行
select af.keynode into kn from APPFOUNDATION af where af.appid=appid and af.foundationid=foundationid;-- 运行阶段报错,提示
ORA-01422:exact fetch returns more than requested number of rows
5.在存储过程中,关于出现null的问题
假设有一个表A,定义如下:
create table A(
id varchar2(50) primary key not null,
vcount number(8) not null,
bid varchar2(50) not null -- 外键
);
如果在存储过程中,使用如下语句:
select sum(vcount) into fcount from A where bid=‘‘xxxxxx‘‘;
如果A表中不存在bid="xxxxxx"的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:
if fcount is null then
fcount:=0;
end if;
这样就一切ok了。
6.Hibernate调用oracle存储过程
this.pnumberManager.getHibernateTemplate().execute(
new HibernateCallback() ...{
public Object doInHibernate(Session session)
throws HibernateException, SQLException ...{
CallableStatement cs = session
.connection()
.prepareCall("{call modifyapppnumber_remain(?)}");
cs.setString(1, foundationid);
cs.execute();
return null;
}
});
ORACLE里锁有以下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其他DML操作
5:S/Row-X 共享行专用(SRX):阻止其他事务操作
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操作越多。
一般的查询语句如select ... from ... ;是小于2的锁, 有时会在v$locked_object出现。
select ... from ... for update; 是2的锁。
当对话使用for update子串打开一个游标时,
所有返回集中的数据行都将处于行级(Row-X)独占式锁定,
其他对象只能查询这些数据行,不能进行update、delete或select...for update操作。
insert / update / delete ... ; 是3的锁。
没有commit之前插入同样的一条记录会没有反应,
因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。
创建索引的时候也会产生3,4级别的锁。
locked_mode为2,3,4不影响DML(insert,delete,update,select)操作,
但DDL(alter,drop等)操作会提示ora-00054错误。
有主外键约束时 update / delete ... ; 可能会产生4,5的锁。
DDL语句时是6的锁。
以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句:
select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
如果有长期出现的一列,可能是没有释放的锁。
我们可以用下面SQL语句杀掉长期没有释放非正常的锁:
alter system kill session ‘sid,serial#‘;
如果出现了锁的问题, 某个DML操作可能等待很久没有反应。
当你采用的是直接连接数据库的方式,
也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,
因为一个用户进程可能产生一个以上的锁, 杀OS进程并不能彻底清除锁的问题。
记得在数据库级别用alter system kill session ‘sid,serial#‘;杀掉不正常的锁。
Oracle DBA有关回滚段管理试题精选
Q. 1 : What system privilege is required to create a rollback segment ?
1. Create database
2. Create rollback segment
3. Alter database
4. Create segment
KEY:2
Q. 2 : Oracle recommends this number of minimum extents in a rollback segment
1. 0
2. 1
3. 2
4. 3
KEY:3
Q. 3 : Oracle recommends that the following segment size when creating a rollback segment
1. INITIAL > NEXT
2. INITIAL = NEXT
3. INITIAL < NEXT
4. NONE OF THE ABOVE
KEY:2
Q. 4 : The OPTIMAL parameter for a rollback segment should be set
1. large for long-frequently running transactions, small for short transactions.
2. small for long-frequently running transactions, large for small transactions.
3. small for all transactions
4. large for all transactions
KEY:1
Q. 5 : In case of system failure, This type of segment is used to undo the changes
1. Data Segment
2. Temp Segment
3. Redo Segment
4. Rollback Segment
KEY:4 : Rollback Segments are used to rollback information that has already been applied to database. During recovery, the database is rolled forward and then backwards to a consistent state.
Q. 6 : This is a valid storage parameter when creating a rollback segment
1. FREELISTS
2. OPTIMAL
3. PARTITION
4. NONE OF THE ABOVE
KEY:2
Q. 7 : Madhu created a couple of private rollback segments. What should he do now to make them online automatically during startup
1. Grant online during startup to the segments
2. Add rollback_segments=(rbs1,rbs2) in parameter file
3. Drop segments and recreate them as protected
4. None of the above
KEY:2
Q. 8 : Which is true regarding rollback segments
1. System Rollback Segment Cannot be put in an offline mode
2. Tablespaces containing rollback segments with active transactions can be put in offline mode
3. All of the above
4. None of the above
KEY:1
Q. 9 : A rollback segment ____
1. writes to the redo logs
2. requires one for each tablespace
3. records changes only after they are committed
4. provides for read consistency
KEY:4
Q. 10 : Which type of segment can record changes for multiple transactions
1. DATA SEGMENT
2. TEMP SEGMENT
3. ROLLBACK
4. NONE OF THE ABOVE
KEY:3
Q. 11 : The type of rollback segment that is created when a tablespace goes offline is
1. PRIVATE
2. PUBLIC
3. DEFFERED
4. PROTECTED
KEY:3
如何快速的成为一个合格的Oracle DBA?
作者:eygle
链接:http://www.eygle.com/archives/2008/11/become_dba_quickly.html
在这样一个清晨写下这样一个题目,是因为最近有越来越多的人问起我这个问题,我想还是试着把我的想法写下来。
1.快速有多快?
很多人都喜欢寻找捷径,所以经常问起快速,但是我经常反复告诉大家的是,没有捷径,或者说没有轻而易举的捷径可循。
当然快速两个字也是有意义的,这是这个快速的社会对于年轻人的要求,在《深入解析Oracle》一书的序言中,我写过这样一段话:随着技术以及时代的不断进步,社会留给DBA的成长时间越来越短,一个DBA从入门到成长为资深的时间不会超过2年。。。。张爱玲说过,成名要趁早。做技术的也是如此,成长越早越好,越快越好。
理解快速两个字的涵义,推荐仔细阅读我的《深入解析Oracle》一书序言,这里总结了很多我的学习经验和学习历程:
http://www.eygle.com/archives/2008/11/oracle_internals_preface.html
2.该读什么书?
Oracle方面的书籍无疑已经是汗牛充栋了,那么在杂陈的书籍中,我们该读什么书来入门?该读什么书来深入进阶呢?
我曾经推荐了几本书,并且我的观点是:书不在多,精读则灵。所以,认真细致的阅读对于学习是必不可少的。
等你进入了Oracle的大门,然后怎么阅读,读什么,就完全可以自己把握了。
推荐阅读:书不在多,精读则灵 - Oracle入门书籍推荐
http://www.eygle.com/archives/2006/08/oracle_fundbook_recommand.html
3.如何获得成功?
无疑每个人都热切的期待成功,那么如何才能获得成功?
我曾经总结了一个简单的公式,罗列了我认为及其重要的成功因素:兴趣 + 勤奋 + 坚持 + 方法 ≈ 成功
如果你对数据库感兴趣,由兴趣推动学习,再加上勤奋的努力,坚持不懈的探索,找到合适的方法,那么这就是你的快速学习之路,快速成功之路。
推荐阅读:
http://www.eygle.com/archives/2005/12/what_kind_of_dba_we_need.html
4.三种境界
关于境界,我在多篇文章中都谈到过,最早在《Oracle数据库性能优化》一书的序言中我引用了王国维的三种境界:
古今之成大事业、大学问者,罔不经过三种之境界。
"昨夜西风凋碧树。独上高楼,望尽天涯路。"此第一境界也。
"衣带渐宽终不悔,为伊消得人憔悴。"此第二境界也。
"众里寻他千百度,蓦然回首,那人却在灯火阑珊处。"此第三境界也。
这三种境界分别代表了,打下坚实的基础,不懈的坚持,峰回路转的提升,你在学习过程中,一定会面对这样的阶段和情形,所以要有一定的思想准备,坚持不懈。
推荐阅读:
http://www.eygle.com/archives/2005/08/ecinieoracleouo.html
5.由点及面、深入浅出
在学习方法上,我主张由点及面、深入浅出,在《深入浅出Oracle》一书的序言中,我这样写道:
书中贯彻的也是我一直主张的"由点到线再及面"的学习方法。特别是对于初学者,如果没有经过专门的培训和系统学习,那么自己通过实践的学习和思考就应当深入,在知识上,从某个角度来说,是"不患寡,而患不精深"。在我们遇到问题时,就应该不断深入研究,直至问题的核心本质,这样通过一个案例或实际问题的诊断学习和研究,我们就可以带动很多连带知识的学习,这样从一个点深入下去就形成一条线,再横向扩展就可以形成一个知识网,解决和研究的问题多了,就可以逐渐覆盖一个面,形成一个知识体系,这样慢慢的你就会觉得学习不再困难,而是一件得心应手的事情。
推荐阅读:
http://www.eygle.com/archives/2008/10/sbsoracle_preface.html
6.工作机会
在工作选择上,如果能够快速进入Oracle的领域可能是幸运的,但是如果第一份工作没有找到理想的位置,那么接下来的职业道路可能就会稍微曲折一些。
很多朋友在进行了一段时间的学习之后,对转型迫不及待甚至焦虑不堪,这是不对的,在工作中应当切忌浮躁,我们每个人从毕业到工作、再到找到适合自己的位置,这通常都要经过一个较长的时期,学习、思考、进步、再次出发,所以要知道有时候等待是过程的必须。
如果你手上已经有了一份工作,那你需要做的是,做好它,哪怕那不是你喜欢的!
你必须证明给别人看你有做好一件事情的能力,别人才会给你下一个机会,如果你从来没能很好的完成一项任务,那你应该冷静的反省一下。
对于处在这样境地的朋友们,我有16个字可供借鉴:去除浮躁,认真学习,不断积累,寻找机遇
推荐阅读:
http://www.eygle.com/archives/2008/06/oracle_and_dba.html
7.如何在有限的环境中学习?
很多朋友的工作环境、条件有限,可能没有小型机、可能没有UNIX,那么如何学习和提高呢?
我想说的是不一定要在多大的生产环境里才能锻炼出高手。据我所知很多高手都是从个人的简单环境中学习成长起来的,最重要的是自己学习一定要深入,多思考,多试验。
有朋友说:小库一样练水平。这句话是很有道理的。也有朋友在ITPUB上不断试验和重复别人有价值的试验或测试,说:不是自己的,通过试验动手,变成自己的。也说得非常好。
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/[email protected]_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/[email protected]_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$contro
以上是关于Oracle DBA面试突击题的主要内容,如果未能解决你的问题,请参考以下文章
《面试突击— Redis篇》-- Redis哨兵原理及持久化机制
❤️三万字《C/C++面试突击200题》四年面试官爆肝整合❤️(附答案,建议收藏)
❤️三万字《C/C++面试突击200题》四年面试官爆肝整合❤️(附答案,建议收藏)