面试题目集合 更新8/24

1.oracle rac 有多少类型的ip

一个scan-ip,n个pub-ip,n个pri-ip,n个vip


2.oracle datagrud底层传送的是什么,或者用什么维系主备之间的数据同步

传输的是redo日志,同样也是更具传输redo日记去区别三种模式。还有传输同步有两种,同步传输和异步传输,同步传的是redo日志,异步传输的是归档日志(系统默认)


3.DG三种模式

...............................

4.DG中Standby Redo Log的作用,面试的时候对方说英语的最好听清楚,问清楚,什么primary,Standby Redo我那时听得一头暮水

SRL只有在数据库是standby角色是才起作用,在primary发生日志切换时,Remote File System(RFS)进程把primary上的ORL写到standby的SRL,同时standby归档上一个SRL,说白了就是主库切换的时候把日志传输成Standby Redo Log,然后在备库上面再应用变成自己的redo


5.如何远程判断对方的oracle的端口是否正常

yum install nmap

nmap x.x.x.x -p1521


6.一条sql语句为什么不会走索引

sql语句走不走索引不是你设了索引就一定会走索引的,oracle里面有他的判断机制,一般返回记录占总记录数的25%以上,就是走全表。打开alter session set sql_trace=true;查看查询性能,如果只想走索引就只能强制select/*+ index(t t_idx) */  * from t ;但是一般情况下请相信oracle


7.大量数据更新的优化

Oracle优化:大量数据插入或更新


8.Hadoop有几个角色

Hadoop分别从三个角度将主机划分为两种角色。第一、最基本的划分为Master和Slave,即主人和奴隶;第二,从HDFS的角度,将主机划分为NameNode和DataNode(在分布式文件系统中,目录的管理很重要,管理目录相当于主人,而NameNode就是目录管理者);第三,从MapReduce的角度,将主机划分JobTracker 和TaskTracker(一个job经常被划分为多个Task,从这个角度不难理解它们之间的关系)


9.索引的种类

Oracle中可以创建多种类型的索引,以适应各种表的特点和各种查询条件的特点;可以按列的多少,索引列是否唯一、索引数据的组织形式对索引进行分类。
1.单列索引与复合索引
 一个索引可以由一个或多个列组成,用来创建索引的列被称为“索引列”。
 单列索引是基于单列所创建的索引,复合索引是基于两列或者多列所创建的索引。
2.唯一索引与非唯一索引
 唯一索引是索引列值不能重复的索引,非唯一索引是索引列可以重复的索引。
 无论是唯一索引还是非唯一索引,索引列都允许取NULL值。默认情况下,Oracle创建的索引是不唯一索引。
3.B树索引
 B树索引是按B树算法组织并存放索引数据的,所以B树索引主要依赖其组织并存放索引数据的算法来实现快速检索功能。
4.位图索引
 位图索引在多列查询时,可以对两个列上的位图进行AND和OR操作,达到更好的查询效果。
5.函数索引
 Oracle中不仅能够直接对表中的列创建索引,还可以对包含列的函数或表达式创建索引,这种索引称为“函数索引”。


10.standby redo log是必须要设置的吗

不一定,但在下面三种情况备库配置必须standby redo log:

  1)在最大保护和最大可用模式下
  2)在实时应用情况下
  3)配置级联dataguard情况下

11.commint,alter system switch logfile,alter system checkpoint之间的区别
commit:针对的是dml操作,释放锁,数据提交到缓冲区,删除保存点,还没有写data,只是写了redo日志,普通用户可以执行。需要手动执行。
alter system checkpoint:将脏数据写进磁盘,让数据保持一致,永久性,如果硬盘出错会出错,system用户,可以自动被执行: 日志切换,对数据文件进行热备时(rman),当运行ALTER TABLESPACE/DATAFILE READ ONLY的时候,SHUTDOWN命令发出时。
alter systerm switch logfile:切换日记,如果切完会自动归档(开了归档日记前提),可有自动切:当前日记组被写满了就可以切。
alter system archive log current ; 对数据库中的所有实例执行日志切换(只归档当前日志)。手工归档活动的日志文件组。
alter system archive log all;手工归档所有的日志文件组
--8/24--
2.脏块
脏数据是相对于原数据而言的,是指被修改过的,与原数据不一样的数据。

在oracle有SGA中,有个数据高速缓冲区(database buffer cache),由许多大小相等的缓存块组成。这些块根据使用情况不同,可分为脏缓冲块、空闲缓存块和命中缓存块三类:
1. 脏缓存块(dirty buffers):它保存的是已经被修改过的数据。当一条SQL语句对某个缓存块中的数据进行修改后,这个缓存块就被标记为脏缓存块。
2. 空闲缓存块(free buffers):不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。当oracle从数据文件中读取数据时,将会寻找空闲缓存块,以便将数据写入其中。
3. 命中缓存块(pinned buffers):是那些正被使用,或者被显式地声明为保留的缓存块。这些缓存块始终保留在数据高速缓冲区中,不会被换出。

3.LRU算法
LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

4.oracle表之间有几种连接方式、各有什么特点
嵌套链接,哈希链接,排序合拼链接
驱动表较小,有有效索引,对于被连接的数据子集较小的情况,嵌套循环连接是较好的选择。在嵌套循环中,外表驱动内表,外表返回的每一行都要在内表中检索找到它匹配的行,因此整个查询返回的结果集不能太大(大于10000不合适),要把返回子集较小的表作为外表(驱动表),而且在内表的连接字段上一定要有索引。
哈希连接是大数据集连接时常用的方式,优化器使用两个表中较小的表,利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。
        这种方式适用于较小的表完全可以放入内存的情况,这样成本就是访问两个表的成本之和。但是在表很大的情况下并不能完全放入内存,这时优化器将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段。io少但占cpu
排序合并连接的两个数据集可以并行处理,而嵌套循环和哈希连接不能.,占io
5.什么样的表需要进行统计信息和收集、如何快速进行统计信息收集

优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划。优化器统计信息包括:· 表的统计信息:行数、 Block数、 行平均长度· 列的统计信息:列中不同值的数量、列中null的数量、数据分布(柱状图/直方图)· 索引的统计信息:叶子块的数量、 索引的高度、 聚簇因子(clustering factor)· 系统的统计信息:I/O性能和利用、 CPU性能和利用
dbms_stats可以并行分析
dbms_stats有自动分析的功能(alter table monitor )
 
analyze 分析统计信息,不准确----some times

6.复合索引创建原则
复合索引的优点:
  改善选择性:复合索引比单个字段的索引更具选择性
  减少I/O:如果要查询的字段刚好全部包含在复合索引的字段里,则ORACLE只须访问索引,无须访问表
  什么情况下优化器会用到复合索引呢?
  (a) 当SQL语句的WHERE子句中有用到复合索引的领导字段时,ORACLE优化器会考虑用到复合索引来访问.
  (b) 当某几个字段在SQL语句的WHERE子句中经常通过AND操作符联合在一起使用作为过滤谓词,并且这几个字段合在一起时选择性比各自单个字段的选择性要更好时,可
  能考虑用这几个字段来建立复合索引.
  (c) 当有几个查询语句都是查询同样的几个字段值时,则可以考虑在这几个字段上建立复合索引.
  复合索引字段排序的原则:
  确保在WHERE子句中使用到的字段是复合索引的领导字段
  如果某个字段在WHERE子句中最频繁使用,则在建立复合索引时,考虑把这个字段排在第一位(在CREATE INDEX语句中)
  如果所有的字段在WHERE子句中使用频率相同,则将最具选择性的字段排在最前面,将最不具选择性的字段排在最后面
  如果所有的字段在WHERE子句中使用频率相同,如果数据在物理上是按某一个字段排序的,则考虑将这个字段放在复合索引的第一位

7.介绍一下oracle锁和latch
1,都是锁

2,latch锁比lock锁级别低

3,lock用于database data,针对磁盘

4,latch用于管理系统资源,针对内存,shared pool latch.

5, library cache pin和library cache lock都是用于share pool的并发控制的。pin和lock都可以看作是一种锁。locks/pins会在SQL语句执行期间一直保持,在结束的时候才释放。

6,大体上可以这样理解,现在要在一个房间里面修一张桌子。
shared pool latch保护你正常找到一个可以修桌子的空房间,
library cache lock保护你可以正常把桌子搬进房间,
library cache pin保护你可以正常在房间里把桌子修完。

7,latch:It's called 锁存器, a register array for temporary keep the working status.oracle中文培训教材上翻译为栓锁,就是oracle的系统锁,进程只有获得latch才可以向db buffer cache里写入数据.闩,以区别与锁。闩是比锁低一级,或者说是用于系统内部的小型锁。latch是用于保证内存结构(如LRU List和Redo Allocation)在非常短的时间处在一致性的状态,一般不需要DBA的维护!

8,lock是用于保证数据的一致性与更高的并发度的,包括TM表类型的lock和TX纪录类型的lock。

Latch不存在死锁,而Lock中存在。
select username from v$session; 

8.解释ORA-01555
用户user1对表进行了更新操作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交操作,那又会产生什么影响呢?这个时候怎么保证读写一致性呢?这个时候DBMS就要保证有足够大的undo表空间来存放修改前的数值,,以保证user2读取的数据是修改前的一致数据.然后下次再读取时候就是更新后的数据了.
ora-01555快照过旧就是因为undo空间不够大,其中一部分undo数据被覆盖了,用户无法获得修改前的数据。
undo数据分为三种:
活动的undo:未提交事务的undo数据,这些undo数据永远不能覆盖,用于回滚rollback事务。
过期的undo:已提交事务的undo数据,这些undo数据可以覆盖。
未过期的undo:事务已提交,但事务提交前,有些查询正在进行,它要读取的是提交前的数据,这部分数据就是未过期数据。如果这部分undo数据被覆盖了,就会发生ora-01555错误。

一个解决方法是,指定undo表空间参数UNDO_TABLESPACE,并将undo空间管理方法设置成自动扩展:UNDO_MANAGEMENT=AUTO
这种方法可能产生的结果是:
因为undo表空间装了太多未过期(unexpired)的undo数据,新的transaction无法向其中写入undo数据,这时transaction就会发生ORA-30036错误。
优化分析表,缩短查询时间,减小undo nologging
因为undo表段是循环使用的,当表空间里没有可用的undo段时,就有可能覆盖旧的undo段 。当会话访问原undo 段。对应的undo数据找不到,就会报错 ora-01555 快照太旧 。解决方法。把 undo数据文件放于 读写性能好的磁盘上。

9.如何查对象定义
 select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;

10.哪些命令会引起排序行为,如何优化排序?
A、创建索引;    B、涉及到索引维护的并行插入    C、order by或者group by(尽可能对索引字段排序)    D、Distinct    E、union/intersect/minus    F、sort-merge join    G、analyze命令(仅可能使用estamate而不是compute)
合理设置Sort_area_size参数 尽量减少不必要的排序。 利用Statspack工具监控排序活动。添加索引避免排序
------------------------------------------------------------
1.表被删除如何处理
FLASHBACK TABLE RECYCLETEST TO BEFORE DROP 闪回
expd/impd 数据
不完成恢复

2.Rac优缺点,规划时注意事项
优:多机并行,高可用,随时添加删除节点(易用性),多机所以吞发高,低成本
缺:配置一样,搭建复杂,
注意事项:时间一致,关掉selinux,防火墙,asm共享存储

3.sql没有走索引的原因
1.表太小了,不值得走 2.索引类型不对,应该用复合索引,位图索引,函数索引 3.系统觉得全表更优表大,查询量占的比例也大 4 百分号,模糊搜索 先Analyze 一下

4.消耗最大的sql,awr主要指标,以往维护XXXX
1.从V$SQLAREA中查询最占用资源的查询。 V$SQL是内存共享SQL区域中已经解析的SQL语句。
2.SQL> @?/rdbms/admin/awrsqrpi
• SQL with executions>1:执行次数大于1的sql比率,如果此值太小,说明需要在应用中更多使用绑定变量,避免过多SQL解析。
• Memory for SQL w/exec>1:执行次数大于1的SQL消耗内存的占比。
• CPU Time(s): 为SQL语句执行时CPU占用时间总时长,此时间会小于等于Elapsed Time时间。单位时间为秒。
Top 5 Timed Events 它指出了数据库的sessions花费时间最多的等待事件,如下:
在了解系统架构前提下,对业务也比较熟悉最好。
关注系统负载 这个比较靠谱:DB Time/Elapsed与cpu个数的比较
关注系统负载load profile ,Redo ,logical read ,physical read,hard parse/parse 等有没有异常
关注TOP EVENT 。有时候占CPU最高的不一定是问题的源点,DB time排第一也不一定说系统没问题,要结合现场,业务等具体分析。
命中率什么的看着差不多就行了,100%最好,一般来说95%以下就可能有问题。
RAC响应时间一般不超过10MS
看看SQL部分,解析,DBtime,逻辑读,物理读。有没有异常
在看看SGA,PGA够不够有没有抖动,SHARED_POOL,BUFFER_CACHE分配的是否合理。
往细了说太多了。我也正在学习,请指正哈。

5.建库需要考虑的问题
库的名字是否重复,字符集,sid,是否开启em,ORACLE_HOME和ORACLE_BASE目录,手动建库还是用dbca建库(考虑:内存,图形界面)

6.RAID0+1 RAID5认识,lv条带化理解
 RAID 5可以理解为是RAID 0和RAID 1的折中方案。RAID 5具有和RAID 0相近似的数据读取速度RAID 5的磁盘空间利用率要比RAID 1,通过奇偶校验信息去恢复被损坏的数据RAID5最少3快硬盘,做好了容量是(n-1)x单块容量

RAID0+1是先做两个RAID0,然后再做RAID1,因此RAID0+1允许坏多个盘,但只能在坏在同一个RAID0中,不允许两个RAID0都有坏盘。
    RAID1+0是先做RAID1,然后再做RAID0,因此RAID1+0允许坏多个盘,只要不是一对磁盘坏就可以啦。

因此说RAID1+0比RAID0+1安全得多,因为在同一对磁盘中,两块磁盘都坏掉的概率很低。
lv可以动态增加减去增容,把不连续的pv-》vg组合,不好本身很占空间
同一RAIDLUNLVM里再条带只有坏处但不同RAID GROUPLUNLVM里做条带是可以提高性

6,。数据库变缓慢怎么处理
系统层-》应用层
先查cpu,i/o,内存
top sar free vmstat
找到使用资源特别大的Oracle的session及其执行的语句 
查找前十条性能差的sql语句 
索引,sga 死锁,网络速度慢 
察看数据库的等待事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knuuy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值