查看原文
其他

Oracle 每日一题系列合集

墨天轮 JiekeXu DBA之路 2024-03-03

作者 | JiekeXu

来源 | JiekeXu之路(ID: JiekeXu_IT)

转载请联系授权 | (微信ID:xxq1426321293)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享收藏已久的 Oracle 每日一题系列合集本文首发于微信公众号【JiekeXu之路】,欢迎点击上方蓝字关注我吧!

在墨天轮平台有个[数据库每日一题]栏目,均是由各行各业的各位专家亲自出题,墨天轮审核后发布的一系列数据库知识点集合,本次只是收集了 20 天的题目以及给出了尽可能详细的答案解析,以供大家多次阅读。


1. 在 Oracle 中,下面哪个命令可以修改用户的默认密码有效期为无限制?(单选)


A. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;

B. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 999;

C. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

D. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180;


答案:C

解析:

【答案解析】ORACLE 修改默认密码有效期 180 天为无限制

1、查看用户的 proifle 是哪个,一般是 default:

sql>SELECT username,PROFILE FROM dba_users;

2、查看指定概要文件(如 default)的密码有效期设置:

sql>SELECT * FROM dba_profiles s WHERE s.profile=‘DEFAULT’ AND resource_name=‘PASSWORD_LIFE_TIME’;

3、将密码有效期由默认的 180 天修改成“无限制”:

sql>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

修改之后不需要重启动数据库,会立即生效。

4、修改后,还没有被提示 ORA-28002 警告的帐户不会再碰到同样的提示;

已经被提示的帐户必须再改一次密码,举例如下:

$sqlplus / as sysdba

sql> alter user 用户名 identified by <原来的密码> ----不用换新密码

oracle11g 启动参数 resource_limit 无论设置为 false 还是 true,密码有效期都是生效的,所以必须通过以上方式进行修改。以上的帐户名请根据实际使用的帐户名更改。


2. 关于数据库处于 ARCHIVELOG 模式下的说法正确的是?(单选)


A. Fast Recovery Area

B. 在切换到 ARCHIVELOG 模式之前执行的所有备份都可以用于执行完全恢复。

C.在数据库开启时可以进行全备。

D. 在将数据库置于 ARCHIVELOG 模式之前,必须对联机重做日志文件进行多路复用。


答案:C

解析:归档模式下可进行全库的热备。没有归档的全库备份无法用来进行完全恢复,因为缺少日志。

3.默认情况下,AWR 的快照会定期删除,因此导致无法比较一个很长区间的活动(比如今年的年末和去年的年末)。如下那种是实现这一目标的最佳方法?(单选)


A.设置参数 STATISTICS_LEVEL 为 AL L以禁止快照删除

B.保存年末快照为基线

C.设置 SYSAUX 表空间的数据文件 AUTOEXTEND 打开,因此快照不会被清除

D.调整快照保持区间为比一年稍多


答案:B

解析:快照超过设置的 retention(wrm$_wr_control.retention)区间就会被清理。

调大快照保留区间足够大虽然可以避免历史快照被清理,但对本案例并不是最优的方法。

baseline 是一段特定时间内的 snapshot 的集合,当异常发生时,使用异常时间段的snapshot 和 baseline 进行对比。baseline 中的 snapshot不受 AWR retention 的限制。

因此通过将关注的快照区间设置为基线并设置合适的过期时间(DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE 的 expiration 参数),就可以确保这些快照不会被删除。

SYSAUX 用于存储快照数据,但是保留时间和空间无关。

STATISTICS_LEVEL 控制采集数据的详细程度,和保留多长时间无关。

4. 下述哪个内存组件在实例启动后无法动态伸缩?(单选)


A.database buffer cache

B.Jave pool

C.stream pool

D.log buffer


答案:D

解析:log buffer 是在实例启动时固定分配的,其他组件均为可伸缩组件。

5. 关于自连接那两个说法是正确的?(多选)


A.它可以是左外连接

B.它必须是一个全外连接

C.关联列必须有索引

D.它可以是一个内连接


答案:AD

解析:相同表的关联可以是左外连接可以是内连接,没有必须是哪种连接方法。

6. 以下关于 ORACLE 缓冲池的描述,正确的是?(多选)


A.Recycle Pool 用于存储临时使用的、不被经常使用的较大的对象,避免导致默认池和保持池中的块老化而退出缓存。

B. DEFAULT Pool 采用 LRU 管理,更热的对象频繁访问时,原有 LRU 冷端的对象可能被 age out。

C.Recycle Pool 是为了让内存中的数据尽快被回收,设立的池

D.Keep Pool 中并不是热点表一直能够缓存,当 keep pool 不够的时候,最先缓存到 keep pool 的对象会被挤出


答案:ABD

解析:Keep Buffer Pool 的作用是缓存那些需要经常查询的对象但又容易被默认缓冲区置换出去的对象,按惯例,Keep pool 设置为合理的大小,以使其中存储的对象不再age out,也就是查询这个对象的操作不会引起磁盘IO操作,可以极大地提高查询性能。

并不是我们设置了 keep pool 之后,热点表就一定能够缓存在 keep pool ,keep pool 同样也是由 LRU 链表管理的,当 keep pool 不够的时候,最先缓存到 keep pool 的对象会被挤出,不过与 default pool 中的 LRU 的管理方式不同,在 keep pool 中表永远是从 MRU 移动到 LRU,不会由于你做了 F TS 而将表缓存到 LRU 端,在 keep pool 中对象永远是先进先出。

Recycle Buffer Pool 正好相反。Recycle Buffer Pool 用于存储临时使用的、不被经常使用的较大的对象,这些对象放置在 Default Buffer Pool 显然是不合适的,这些块会导致过量的缓冲区刷新输出,而且不会带来任何好处,因为等你想要再用这个块时,它可已经老化退出了缓存。要把这些段与默认池和保持池中的段分开,这样就不会导致默认池和保持池中的块老化而退出缓存。

7. 以下哪个参数可以控制笛卡尔积访问方式?(多选)


A._optimizer_index_cost_adj

B._optimizer_mjc_enabled

C._optimizer_cartesian_enabled

D._b_tree_bitmap_plans


答案:BC

解析:_optimizer_cartesian_enabled:控制是否允许笛卡尔积访问;

_optimizer_mjc_enabled:控制是否允许 merge join 笛卡尔积访问;

_b_tree_bitmap_plans:–控制位图索引转化;

optimizer_index_cost_adj:调整索引扫描的转换成本百分比。

8. PG数据库中包含以下哪几种表连接方式?(多选)


A.MERGE JOIN CARTESIAN

B.NESTLOOP JOIN

C.HASH JOIN

D.MERGE JOIN


答案:BCD

解析:◆Nestloop Join

嵌套循环连接(Nestloop Join)是在两个表做连接时最朴素的一种连接方式。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大(>10000不适合),要把返回子集较小的表作为外表,而且在内表的连接字段上要有索引,否则会很慢。

执行的过程:确定一个驱动表(outer table),另一个表为 inner table,驱动表中的每一行与 inner 表中的相应记录 JOIN,类似一个嵌套的循环。适用于驱动表的记录集比较小(<10000)而且 inner 表有有效的访问方法(index)。需要注意的是,JOIN 的顺序很重要,驱动表(outer table)的记录集一定要小,返回的结果集的相应时间是最快的

◆Hash Join

优化器使用两个表中较小的表,并利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。

这种方式适用于较小的表可以完全放入内容的情况,这样总成本就是访问两个表的成本之和。但是如果表很大,不能完全放入内存,优化器会将它分割成若干不同的分区,把不能放入内存的部分写入磁盘的临时段,此时要有较大的临时段以便尽量提高I/O的性能。

◆Merge Join

通常情况下散列表连接的效果比合并连接好,然而如果源数据上有索引,或者结果已经被排过序,在执行排序合并连接时就不需要排序了,这时合并连接的性能会优于是散列连接。

9. 以下哪种方法可以回收表段中的可用空间?(多选)


A.alter table … move;

B.alter table … shrink space compact;

C.通过create table as select (CTAS)重建表

D.通过export/import重建表


答案:ABC

解析:alter table shrink space compact 会移动表中的行并整理表上的碎片,但并不会调整高水位,也不会释放已占用的空间。只有不带 compact 选项时,才会调整高水位并释放空间。

10. 以下关于外连接的写法,哪些是正确的?(多选)


A、select * from emp left join dept2 on emp.deptno=dept2.deptno where dept2.deptno=20 ;B、select * from emp,dept2 where emp.deptno=dept2.deptno(+) and dept2.deptno(+)=20 ; C、select * from emp,dept2 where emp.deptno=dept2.deptno(+) and dept2.deptno=20 ;D、select * from emp left join dept2 using(deptno) ;

答案:BD

【答案解析】select * from emp left join dept2 on emp.deptno=dept2.deptno where dept2.deptno=20、 select * from emp,dept2 where emp.deptno=dept2.deptno(+) and dept2.deptno=20:会在最后进行过滤,失去了外连接的效果。

11.以下关于实例内存和会话内存,下面哪2种说法是正确的:?(多选)


A、SGA内存是私有内存段;PGA是共享内存段

B、PGA在实例启动时分配

C、SGA被所有会话写入;但是PGA只能被一个会话写入 【正确答案】

D、会话能写PGA,但是不能写SGA E、SGA在实例启动时分配 【正确答案】


12.DBWn进程是Oracle负责将脏块写入磁盘的后台进程,如果我们要加快它写出块的速度,可以配置多个DBWn进程,那么在Oracle 11g中最多可以配多少个呢?(单选)


A、32

B、16

C、64

D、36


解析:D

11g 36 个 ,12c 64 个


13.以下关于Oracle分区索引的表述,哪些是正确的?(多选)


A、不可以创建本地分区的唯一索引

B、不可以创建非前缀全局分区索引

C、与表分区方法相同的,是本地分区索引,与表分区的方法不相同的,是全局分区索引。

D、分区索引所在的基表需要为分区表

E、分区索引主要有本地分区索引和全局分区索引


解析:BCE

1、索引是否分区与表是否分区无关。2、可以创建本地分区的唯一索引,但需要将分区键列加入做为索引列。3、Oracle不支持创建非前缀全局分区索引 4、与索引所在分区表的分区方法相同的,是本地分区索引,反之,是全局分区索引。


14.以下哪些描述适用于位图索引?(多选)

A、需要更少的索引存储空间

B、可以创建复合索引

C、会存储索引列全空的记录

D、可以创建基于函数的索引

E、可以创建压缩索引


解析:ABCD

由于位图索引是用一个二进制位表示一行,所以,其所需要的索引空间会比较少。由于位图索引是用一个二进制位表示一行,所以,其所需要的索引空间会比较少。位图索引会存储索引列为空值的记录。位图索引可以创建基于函数的索引,也可以创建复合索引。但不能创建压缩的位图索引。


15.为了获取GV$SQL视图的定义,以下哪个方法可以得到正确的视图定义?(C)


A、select view_definition from gv$fixed_view_definition where view_name='GV_$SQL';

B、select dbms_metadata.get_ddl('VIEW','GV_$SQL','SYS') from dual;

C、select view_definition from gv$fixed_view_definition where view_name='GV$SQL';

D、select text from dba_views where view_name = 'GV$SQL' and owner='SYS';

E、select dbms_metadata.get_ddl('VIEW','GV$SQL','SYS') from dual;

F、select text from dba_views where view_name = 'GV_$SQL' and owner='SYS';


解析:C

数据库启动时,会创建名为GV$SQL的FIXED_VIEW。其视图定义文本可以在GV$FIXED_VIEW_DEFINITION中查到。然后继续创建名为GV_$SQL(注意有下划线)的视图和名为GV$SQL的公有同义词,该公有同义词指向GV_$SQL视图。虽然可以通过在DBA_VIEWS和dbms_metadata.get_ddl('VIEW','GV_$SQL','SYS')查询到视图GV_$SQL的定义文本,但这两种方法获取的定义文本并不是GV$SQL视图的定义文本,而是GV_$SQL视图的定义文本,在该定义文本中,FROM子句中的对象是GV$SQL。而从GV$FIXED_VIEW_DEFINITION中查到的GV$SQL的定义文本,其FROM子句后面的对象才是内部对象表x$kglcursor_child。


16.以下的层次查询中的各个子句,其执行顺序为何?d

1 select *

2     from tab1

3         where 

4                 start with 

5                     connect by

 

A、2->3->5->4->1 

B、2->4->3->5->1 

C、2->3->4->5->1 

D、2->4->5->3->1 


解析:D

SELECT ... FROM + 表名

WHERE + 条件3

START WITH + 条件1

CONNECT BY PRIOR + 条件2


17.关于ORACLE的保留关键字OPT_PARAM的描述,正确的是?


A、OPT_PARAM用法为:/*+ OPT_PARAM('隐藏参数值','true/false') */

B、OPT_PARAM关键字可以在SQL级别通过加HINT的方式来调整单个SQL执行的时候所依赖的系统参数的值

C、HINT中只写OPT_PARAM关键字也不会有任何影响

D、OPT_PARAM后跟的参数值可以不完整,系统会忽略OPT_PARAM参数


解析:AB

OPT_PARAM关键字可以在SQL级别通过加HINT的方式来调整单个SQL执行的时候所依赖的系统参数的值;OPT_PARAM关键字后的参数信息如果不完整或只写OPT_PARAM关键字,相当于保留关键字,会导致保留关键字后的HINT都被忽略,使用时需注意。


18.客户端的字符集为GB2312,数据库的字符集为AL32UTF8。请问,以下哪个设置NLS_LANG的方法,可以保证在数据库中存储正确编码的字符?

  

A、export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

B、无需设置,因为AL32UTF8中的字符涵盖了GB2312中的字符。

C、export NLS_LANG=AMERICAN_AMERICA.AL32UTF8


解析:A

NLS_LANG 需要设置为客户端字符集或者为超级。


19.以下并行的hint写法哪些是正确并且高效的

  

A、 /*+ parallel_index(a idx_01 8) */

B、/*+ parallel(a 8) */

C、/*+ parallel 8 */

D、/*+ index_parallel(a idx_01 8) */

E、/*+ parallel */

F、 /*+ parallel(8) */


解析:AB

A会导致优化器使用自动并行度。B会使得SQL中的所有表在某些情况下,都选择并行执行。C写法错误,索引的并行是/*+ parallel_index(table_name index_name degree)*/.


20.Oracle数据库中可通过V$SORT_USAGE动态视图查询当前实例各会话临时段使用情况,下列关于临时段描述正确的是?

  

A、使用GROUP BY和UNION语法的SQL语句,如分组和合并的数据量较大超过PGA排序区容量时,可能会使用到临时表空间。【正确答案】

B、使用会话表(GT_SESS_TAB)插入数据后,在同一个会话中使用删除语句(DELETE)语句无法释放临时段。DELETE FROM GT_SESS_TAB; 【正确答案】

C、使用事务表(GT_TRANS_TAB)插入数据后,在同一个会话中提交或回滚事务操作无法释放临时段。INSERT INTO GT_TRANS_TAB(TMP_ID) VALUES(123); COMMIT;

D、使用长字符聚合查询(如:WM_CONCAT)返回大字段或插入到全局临时表中包含大字段值,这2类操作均会生产临时段,且临时段类型为LOB_DATA(V$SORT_USAGE.SGTYPE='LOB_DATA') SELECT WM_CONCAT(COL_CHAR) CHAR_CLOB FROM T_CHAR_TAB; INSERT INTO GT_SESS_TAB(COL_CLOB) VALUES('123'); 【正确答案】

E、往如下全局临时表(GLOBAL TEMPORARY TABLE)插入数值型记录时,会话表GT_SESS_TAB(DBA_TABLES.DURATION='SYS$SESSION')和事务表GT_TRANS_TAB(DBA_TABLES.DURATION='SYS$TRANSACTION')这2类全局临时表均会生产临时段,且临时段类型为DATA(V$SORT_USAGE.SGTYPE='DATA') INSERT INTO GT_SESS_TAB(TMP_ID) VALUES(123); INSERT INTO GT_TRANS_TAB(TMP_ID) VALUES(123); 【正确答案】

F、在Oracle 11G或以上版本,除了通过断开会话连接释放临时段外,也可通过ALTER TABLESPACE TEMP SHRINK SPACE命令来降低临时表空间占用率。【正确答案】


【答案解析】ABDEF

插入到全局临时表均使用临时表空间存储,存储数据段(SEGMENT)为临时段

会话表需断开会话或使用前后使用TRUNCATE语句释放临时段

提交或回滚事务时,Oracle内部自动管理并释放事务表的临时段

聚合返回CLOB段和插入带LOB段的会话表,均会产生LOB段类型的临时段。插入带LOB段全局临时表时,还带有LOB段对应INDEX类型的临时段。

Oracle数据库中断开会话即可释放临时段,11G以上版本还提供了临时段收缩命令 ALTER TABLESPACE TEMP SHRINK SPACE

UNION语句实际执行计划中带有SORT UNION操作,涉及排序排重操作,大数据量较大时可能会使用到临时表空间。分组HASH GROUP BY同样使用到排序和临时段。


说明:以上题目及答案解析均来自墨天轮各位认证专家,本次只做了收集与整理,如有侵犯,请联系会及时处理,谢谢!


最后推荐一下收藏已久的 Oracle 五大学习网站,如有需要的小伙伴们可前去围观:

网站一、 https://www.oracle.com/technetwork/index.html,简称 OTN,全世界最大的开发者社区,涵盖很多 Oracle 的学习资源,内容是英文的;

网站二、 http://www.itpub.net/, 国内专业的 IT 技术论坛社区;

网站三、http://www.chinaunix.net , 中国最大的 Linux/Unix 技术社区网站, 此外对编程、数据库、网络安全等也涉猎颇多;

网站四、http://www.eygle.com,云和恩墨创始人、Oracle ACED 盖国强老师的个人网站,提供很多优质的关于 Oracle 的文章和资料,值得收藏与学习。

网站五、http://yangtingkun.net/ Oracle 的那些事儿,Oracle 百科全书杨廷琨老师个人网站, ITPUB Oracle数据库管理版版主 ,人称"杨长老",值得收藏与学习。


每天进步一点,一年后的进步将会很大,远远大于 “1”;每天退步,即使退步一点点,一年后几乎退步为 "0"。每天加油,让我们一起努力做更好的自己,今天就到这里了,祝小伙伴们新的一天开心愉快,工作顺利!



Oracle 12c 及以上版本补丁更新说明及下载方法(收藏版)

Oracle 11.2.0.4 RAC 最新补丁下载(11.2.0.4.200714)

11g RAC 在线存储迁移实现 OCR 磁盘组完美替换

Oracle 19c 之多租户 PDB 连接与访问(三)

案例:RMAN 备份控制文件报错 ORA-00230

Oracle 12C 最新补丁下载与安装操作指北

DBA 常用的软件工具有哪些(分享篇)?

Oracle 相关认证证书查询及真伪辨别

openGaussDB 初体验(下)


点亮在看,你最好看!

继续滑动看下一个

Oracle 每日一题系列合集

墨天轮 JiekeXu DBA之路
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存