发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117684.html原文链接:https://javaforall.cn
♣ 题目部分 在Oracle中,如何查询表和索引的历史统计信息?...♣ 答案部分 从Oracle 10g开始,当收集表的统计信息的时候,旧的统计数据被保留,如果因为新的统计信息而出现性能问题,旧的统计信息就可以被恢复。...历史统计信息保存在以下几张表中: l WRI$_OPTSTAT_TAB_HISTORY 表的统计信息 l WRI$_OPTSTAT_IND_HISTORY 索引的统计信息 l WRI$_OPTSTAT_HISTHEAD_HISTORY...列的统计信息 l WRI$_OPTSTAT_HISTGRM_HISTORY 直方图的信息 从视图DBA_TAB_STATS_HISTORY可以查询历史收集统计信息的时间,但是不能查询到行数,所以需要结合基表来查询...查询索引的历史统计信息的SQL语句如下: SELECT B.OWNER, B.OBJECT_NAME INDEX_NAME, TO_CHAR(D.ANALYZETIME, '
题目部分 Oracle中如何删除表中重复的记录? 答案部分 平时工作中可能会遇到这种情况,当试图对表中的某一列或几列创建唯一索引时,系统提示ORA-01452 :不能创建唯一索引,发现重复记录。...1、删除重复记录的方法原理 在Oracle中,每一条记录都有一个ROWID,ROWID在整个数据库中是唯一的,ROWID确定了每条记录是在Oracle中的哪一个数据文件、块、行上。...SELECT 字段1,字段2 FROM 表名 GROUP BY 字段1,字段2 HAVING COUNT(1) > 1); 也可以利用临时表的方式,先将查询到的重复的数据插入到一个临时表中,然后进行删除...,这样,执行删除的时候就不用再进行一次查询了。...,并将查询到的数据插入其中。
♣ 题目部分 在Oracle中,如何获取SQL历史执行计划?...♣ 答案部分 历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示: SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR...,单机环境为1,RAC环境填写具体的实例号,L_BID为开始的快照号,L_EID为结束的快照号,L_SQLID为要查看SQL的SQL_ID。...下面的例子可以直接从AWR中获取SQL_ID为“bsa0wjtftg3uw”的执行计划,可以看到历史有2种执行计划,一个是全表扫描,一个是索引范围扫描: SYS@RAC2LHR1> SELECT * FROM...本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
♣ 题目部分 在Oracle中,如何查询表的DML操作数据变化量?...影响的行数,以及是否执行过TRUNCATE操作。...从Oracle 10g开始,当初始化参数STATISTICS_LEVEL的值被设置为TYPICAL或ALL时,默认会启用Oracle中表监控的特性,此时,Oracle会默认监控表上的自上一次分析(Last...Analyzed)之后发生的INSERT、UPDATE、DELETE以及表是否被TRUNCATE截断操作,并且Oracle数据库的SMON后台进程每15分钟会将这些操作数量的近似值(内存SGA中记录的...需要注意的是,在作者实际测试过程中发现,Oracle并不是严格按照每15分钟将SGA中的DML刷新到MON_MODS$表中,而且也不是严格按照每天1次的规律刷新MON_MODS$表的数据到MON_MODS_ALL
当表自查询的时候,就基本会用到递归的查询 比如一个员工表 主键 名字 职位 上级id 部门id id...1001 y100 1003 赵六 员工 1001 y100 像这张表就会用到自查询..., 有自查询的表的话,基本会用到递归查询 比如我要查询部门id为“y100”的,张三经理带领的这个团队底下所有的员工.
♣ 题目部分 在Oracle中,表的访问方式有哪几种?...当Oracle执行全表扫描时,会按顺序读取每个块且只读一次,如果能够一次读取多个块,那么可以有效地提高效率,初始化参数DB_FILE_MULTIBLOCK_READ_COUNT用来设置在一次I/O中可以读取多少个数据块...例如,表中的块小于DB_FILE_MULTIBLOCK_READ_COUNT,只需一次I/O。...(二)索引扫描(INDEX SCAN) 索引不仅包含被索引的字段值,还包含行的位置标识ROWID,如果SQL语句只检索索引字段,那么Oracle将直接从索引中读取而不需要通过ROWID去访问表;如果SQL...通常情况下,索引全扫描是不需要回表的,所以索引全扫描适用于目标SQL的查询列全部是目标索引的索引键值列的情形。
♣ 题目部分 在Oracle中,如何获取trace文件的路径?...♣ 答案部分 跟踪文件(Trace File)一般位于“user_dump_dest”参数所指定的目录中,具体路径可以通过以下几种方式查询获得。...1、通过user_dump_dest查询 运行如下SQL语句来创建视图: CREATE OR REPLACE VIEW VW_SQL_TRACE_NAME_LHR AS SELECT D.VALUE...: CREATE OR REPLACE PUBLIC SYNONYM SYN_TRACENAME_LHR FOR VW_SQL_TRACE_NAME_LHR; 查询同义词或视图都可以得到当前会话的trace....trc & 说明: 有关获取trace文件的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2125659 本文选自《Oracle程序员面试笔试宝典
♣ 题目部分 在Oracle中,如何获取用户的权限?...♣ 答案部分 若要获取一个用户的角色、系统权限、对象权限以及列权限,则可以通过以上介绍的数据字典视图来获取也可以通过DBMS_METADATA.GET_GRANTED_DDL来获取。...可以直接运行EXEC_SQL列来创建用户并赋予相应的权限。...另外还可以通过exp或expdp来获取用户的权限,这里不再演示。...& 说明: 有关权限的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2140775/ 本文选自《Oracle程序员面试笔试宝典》,作者:
♣ 题目部分 在Oracle中,如何查询RMAN的配置信息? ♣ 答案部分 通过视图V$RMAN_CONFIGURATION可以查询其配置信息或在RMAN中使用SHOW ALL命令查看。.../oracle_bk/orclasm/%U_%d.bak' [oracle@rhel6lhr ~]$ rman target / Recovery Manager: Release 11.2.0.3.0...- Production on Mon May 22 14:14:18 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates....target database control file instead of recovery catalog RMAN configuration parameters for database with db_unique_name.../product/11.2.0/dbhome_1/dbs/snapcf_orclasm.f'; # default 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
♣ 题目部分 在Oracle中,如何获取集群的名称(Cluster name)?...♣ 答案部分 集群名称信息是记录在OCR中的,因此可以通过转储OCR的方法来获得集群名称,另外,也可以使用cemutlo工具直接查看集群名称信息,如下所示: [root@raclhr-11gR2-N1...vendor_info> [root@raclhr-11gR2-N1 ~]# cemutlo -n raclhr-cluster 其实在$CRS_HOME/cdata/CLUSTER_NAME/目录中也可以看到...CLUSTER_NAME,这个目录是用作OCR备份的。...[root@raclhr-11gR2-N1 ~]# cd $ORACLE_HOME/cdata [root@raclhr-11gR2-N1 cdata]# ll total 2740 drwxr-xr-x
♣ 题目部分 在Oracle中,如何在不执行SQL的情况下获取执行计划? ♣ 答案部分 1、“EXPLAIN PLAN FOR SQL”不实际执行SQL语句,生成的计划未必是真实执行的计划。...但是,必须要有PLAN_TABLE表,可以执行脚本“@?/rdbms/admin/utlxplan.sql”来创建。...2、SQL*Plus的AUTOTRACE功能,命令:SET AUTOTRACE TRACEONLY EXPLAIN。...除SET AUTOTRACE TRACEONLY EXPLAIN外其它的AUTOTRACE方式均实际执行SQL。...但是,如果该命令后执行的是DML语句,那么该DML语句是确实被Oracle实际执行过的。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
一条sql怎么查出单表中含有父子关系的数据呢?...tab.name, '\' ) FROM tab WHERE LEVEL = 3 CONNECT BY PRIOR tab.id = tab.parid image.png 还有其他更优雅的写法吗...,需要注意的是如果with后面的值是子节点那么求出的就是他的父节点和祖宗节点,如果是父节点那么求出的就是他的子节点和子孙节点,如果不懂可以把上面start with 后面的条件改成 p.parent=0...关键词prior,prior跟它右边的父节点放在一起(prior p.parent)表示往父节点方向遍历, 反之,如果 prior跟子节点放在一起(prior p.id)表示往叶子方向遍历。...这里需要注意的 =p.id 放在prior关键词的前面或者后面都没什么关系,也就是上面可以这样写 p.id= prior p.paren。重要的是prior旁边放的
-- 查看表结构 select * from user_tab_columns where table_name = '表名'; -- 查看表主键 select a.constraint_name, a.column_name...user_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'P' and a.table_name = '表名...'; 查询表结构演示: 查询表主键演示:
♣ 题目部分 在Oracle中,SQL如何优化?SQL优化的关注点有哪些? ♣ 答案部分 随着数据库中数据量的增长,系统的响应速度就成为目前系统需要解决的最主要的问题之一。...对于一个系统不是简单地能实现其功能就可以了,而是要写出高质量的SQL语句,提高系统的可用性。 在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。...如果在SQL语句的WHERE子句中写的SQL条件不合理,那么就会造成优化器舍去索引而使用全表扫描,一般这种SQL语句的性能都是非常差的。...是否可以使用组合索引;限制条件、连接条件的列是否有索引;能否使用到索引,避免全表扫描。一般情况下,尽量使用索引,因为索引在很多情况下可以提高查询效率。...有可能是设计的不合理、业务需求的不合理,而问题SQL并非根本原因。 (9)查询特别频繁的结果是否可以缓存,比如Oracle的/*+ result_cache */。 (10)分析表的连接方式。
♣ 题目部分 在Oracle中,如何得到已执行的目标SQL中的绑定变量的值?...♣ 答案部分 当Oracle解析和执行含有绑定变量的目标SQL时,如果满足如下两个条件之一,那么该SQL中的绑定变量的具体输入值就会被Oracle捕获: l 当含有绑定变量的目标SQL以硬解析的方式被执行时...,Oracle只会捕获那些位于目标SQL的WHERE条件中的绑定变量的具体输入值,而对于那些使用了绑定变量的INSERT语句,不管该INSERT语句是否是以硬解析的方式执行,Oracle始终不会捕获INSERT...查询视图V$SQL_BIND_CAPTURE或V$SQL可以得到已执行目标SQL中绑定变量的具体输入值。...如果V$SQL_BIND_CAPTURE中查不到,那么有可能对应的Shared Cursor已经从Shared Pool中被清除了,这时候可以尝试从AWR相关的数据字典表DBA_HIST_SQLSTAT
JOIN sys.partitions B ON A.object_id = B.object_id GROUP BY A.name ORDER BY MAX(B.rows) DESC - -按数据行数的降序进行排序显示...2、显示所有空表 USE text go SELECT A.NAME,MaxRows = MAX(B.rows) FROM sys.tables A INNER JOIN sys.partitions...B ON A.object_id = B.object_id GROUP BY A.name HAVING MAX(B.rows) = 0 3、显示所有非空表 USE text go SELECT
♣ 题目部分 在Oracle中,如何查到会话正在执行的SQL语句?...通过SQL_ID这个字段,可以获取到某个会话正在执行的SQL语句。...SQL_ID VARCHAR2(13) 正在执行的SQL语句ID SQL_CHILD_NUMBER NUMBER 正在执行的SQL语句的子游标的ID,从0开始 SQL_EXEC_START DATE 该会话开始执行该...SQL语句的时间。...对应于V$SQL_MONITOR.SQL_EXEC_ID列。 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
♣ 题目部分 在Oracle中,如何查找未使用绑定变量的SQL语句?...⊙ 【DB笔试面试586】在Oracle中,什么是自适应游标共享(4)?⊙ 【DB笔试面试586】在Oracle中,什么是自适应游标共享(3)?...⊙ 【DB笔试面试586】在Oracle中,什么是自适应游标共享(2)?⊙ 【DB笔试面试586】在Oracle中,什么是自适应游标共享(1)?...⊙ 【DB笔试面试585】在Oracle中,什么是常规游标共享?⊙ 【DB笔试面试584】在Oracle中,如何得到已执行的目标SQL中的绑定变量的值?...⊙ 【DB笔试面试583】在Oracle中,什么是绑定变量分级?⊙ 【DB笔试面试582】在Oracle中,什么是绑定变量窥探(下)?
10; 业务需要,LIKE 的时候必须使用模糊查询,我当然知道这会导致全表扫描,不过速度确实太慢了,直观感受,全表扫描不至于这么慢!...EXPLAIN: SQL Without LIMIT 如上所示:去掉 limit 后,根本就没用上索引,直接全表扫描,不过反而更快。...要想搞清楚缘由,你需要理解本例中 SQL 查询的处理流程:当使用 limit 时,因为只是返回几条数据,所以优化器觉得采用一个满足 order by 的索引比较划算;当不使用 limit 时,因为要返回所有满足条件的数据...不过就算知道这些还是不足以解释为什么在本例中全表扫描反而快,实际上这是因为当使用索引的时候,除非使用了 covering index,否则一旦索引定位到数据地址后,这里会有一个「回表」的操作,形象一点来说...,就是返回原始表中对应行的数据,以便引擎进行再次过滤(比如本例中的 like 运算),一旦回表操作过于频繁,那么性能无疑将急剧下降,全表扫描没有这个问题,因为它就没用索引,所以不存在所谓「回表」操作。
领取专属 10元无门槛券
手把手带您无忧上云