oracle数据库误删的表以及表中记录的恢复 强烈推介IDEA2020.2破解激活...,IntelliJ IDEA 注册码,2020.2 IDEA 激活码 oracle数据库误删的表以及表中记录的恢复 本文转载自:https://blog.csdn.net/fei7837226/article...二、表数据恢复 对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有: 1、先从flashback_transaction_query视图里查询...在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。...表中
题目部分 Oracle中如何删除表中重复的记录? 答案部分 平时工作中可能会遇到这种情况,当试图对表中的某一列或几列创建唯一索引时,系统提示ORA-01452 :不能创建唯一索引,发现重复记录。...删除重复记录后的结果也分为两种,第一种是重复的记录全部删除,第二种是重复的记录中只保留最新的一条记录,在一般业务中,第二种的情况较多。...1、删除重复记录的方法原理 在Oracle中,每一条记录都有一个ROWID,ROWID在整个数据库中是唯一的,ROWID确定了每条记录是在Oracle中的哪一个数据文件、块、行上。...在重复的记录中,可能所有列上的内容都相同,但ROWID不会相同,所以,只要确定出重复记录中那些具有最大ROWID的就可以了,其余全部删除。...SELECT 字段1,字段2 FROM 表名 GROUP BY 字段1,字段2 HAVING COUNT(1) > 1); 也可以利用临时表的方式,先将查询到的重复的数据插入到一个临时表中,然后进行删除
在 Oracle 23c 中,数据库表或视图中允许的最大列数已增加到 4096。此功能允许您构建可以在单个表中存储超过之前 1000 列限制的属性的应用程序。...某些应用程序(例如机器学习和流式 IoT 应用程序工作负载)可能需要使用包含超过 1000 列的非规范化表。 您现在可以在单行中存储大量属性,这对于某些应用程序来说可以简化应用程序设计和实现。...这与 Oracle Database 23c 之前版本中的行为相匹配。 可以随时将 MAX_COLUMNS 的值从 STANDARD 更改为 EXTENDED。...但是,仅当数据库中的所有表和视图包含 1000 或更少的列时,才可以将 MAX_COLUMNS 的值从 EXTENDED 更改为 STANDARD。...较旧的客户端版本(Oracle Database 23c 之前的版本)不支持增加的列限制,并且无法访问表或视图中超过 1000 列。 此参数从 Oracle Database 23c 开始可用。
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。 ...ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。...数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。
Oracle数据库中自带的4张表: dept、emp、bonus和salgrade是练习SQL查询的经典案例表,本文提供在MySQL中建这4张表的SQL语句 1....创建dept表 CREATE TABLE `dept`( `deptno` INT(2) NOT NULL, `dname` VARCHAR(14), `loc` VARCHAR...创建emp表 CREATE TABLE `emp` ( `empno` int(4) NOT NULL PRIMARY KEY, `ename` VARCHAR(10), `...创建bonus表 CREATE TABLE `bonus`( `ename` VARCHAR(10), `job` VARCHAR(9), `sal` INT, `comm...创建salgrade表 CREATE TABLE `salgrade` ( `grade` int, `losal` int, `hisal` int ) ENGINE
//查询表的主键约束名 select * from user_constraints e where e.table_name='表名';--输入 //查询所有引用到该主键的记录 select b.table_name
♣ 题目部分 在Oracle中,什么是索引的选择性? ♣ 答案部分 索引的选择性(Index Selectivity,索引的选择度或索引的选择率)是指索引列中不同值的记录数与表中总记录数的比值。...索引的选择性的取值范围是[0,1]。例如,某个表的记录数是1000条,而该表的索引列的值只有900个不同的值(有100个是相同或是空),所以,该列索引的选择性为900/1000=0.9。...对于索引的选择性,值越高那么表示该列索引的效率也就越高。...可以使用如下的SQL来计算索引的选择性: SELECT COUNT(DISTINCT NAME)/COUNT(*) FROM TB_A; 这种方法的优点是在创建索引前就能评估索引的选择性。...选择性越接近1,那么该索引就越好。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
DROP DATAFILE 可以使用如下的命令删除一个表空间里的数据文件: ALTER TABLESPACE TS_DD_LHR DROP DATAFILE n; --n为数据文件号 ALTER TABLESPACE...② 该语句只能是在相关数据文件ONLINE的时候才可以使用。...PURGE;”或者在已经使用了“DROP TABLE XXX;”的情况下,再使用“PURGE TABLE "XXX表在回收站中的名称";”来删除回收站中的该表,否则空间还是不释放,数据文件仍然不能DROP...需要注意的是,据官方文档介绍说,处于READ ONLY状态的表空间数据文件也不能删除,但经过实验证明,其实是可以删除的。...数据文件的相关信息还会存在数据字典和控制文件中。 对于归档模式而言,“OFFLINE FOR DROP”和“OFFLINE”没有什么区别,因为Oracle会忽略FOR DROP选项。
♣ 题目部分 在Oracle中,表和表之间的关联方式有哪几种?...在嵌套循环连接中,Oracle读取驱动表(外部表)中的每一行,然后在被驱动表(内部表)中检查是否有匹配的行,所有被匹配的行都被放到结果集中,然后处理驱动表中的下一行。...做驱动表的时候,逻辑读为98517,而用T_20161014_LHR_02(大表)做驱动表的时候,逻辑读为301061,差异非常大,所以,在使用NL连接的时候,尽量选择结果集较小的表作为驱动表。...(三)哈希连接(HJ) HJ的连接原理如下:首先把小表的哈希操作存放到内存中,然后用大表的每条记录做哈希,与之前小表的哈希值匹配。...这个阶段中如果被驱动表的连接列的值没有与驱动表连接列的值相等的话,那么这些记录将会被丢弃而不进行探测。 这种方式适用于较小的表完全可以放于内存中的情况,这样总成本就是访问两个表的成本之和。
♣ 题目部分 在Oracle中,表的访问方式有哪几种?...当Oracle执行全表扫描时,会按顺序读取每个块且只读一次,如果能够一次读取多个块,那么可以有效地提高效率,初始化参数DB_FILE_MULTIBLOCK_READ_COUNT用来设置在一次I/O中可以读取多少个数据块...通常应该避免全表扫描,但是在检索大量数据时全表扫描优于索引扫描,这正是因为全表扫描可以在一次I/O中读取多个块,从而减少了I/O的次数。在使用全表扫描的同时也可以使用并行来提高扫描的速度。...全表扫描的Hint为:FULL(T)。 CBO优化器在以下几种情况下会选择全表扫描: ① 无合适的索引。 ② 检索表中绝大多数的数据。 ③ 表非常小。...对Oracle中的堆表而言,可以通过Oracle内置的ROWID伪列得到对应行记录所在的ROWID的值,然后通过DBMS_ROWID包中的相关方法(DBMS_ROWID.ROWID_RELATIVE_FNO
♣ 题目部分 在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?...=>'PARTITION',CASCADE=>TRUE);--针对分区表的单个分区进行收集统计信息 除此之外,还有一些其它的用法,如下所示: l EXEC DBMS_STATS.GATHER_DATABASE_STATS...();--收集当前数据库下所有用户的统计信息 l EXEC DBMS_STATS.GATHER_SCHEMA_STATS(USER);--收集用户下所有对象的统计信息 当系统的分区表数据量很大时,如果每次都收集全部的分区必然会导致统计信息的收集非常慢...,在Oracle 11g之后可以通过设置INCREMENTAL来只针对数据有变动的分区做收集: EXEC DBMS_STATS.SET_TABLE_PREFS(USER,'TABLE_NAME','INCREMENTAL...INCREMENTAL的值 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
♣ 题目部分 在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可以查询历史收集统计信息的时间,但是不能查询到行数,所以需要结合基表来查询...这些统计信息在SYSAUX表空间中占有额外的存储开销,所以应该注意并防止统计信息将表空间填满。
♣ 题目部分 在Oracle中,什么是用户的表空间配额(User tablespace Quota)? ♣ 答案部分 用户的表空间配额也叫表空间限额,指的是用户可以使用指定表空间的最大大小。...控制用户的表空间配额也就等于控制用户所占用的表空间大小。...,因此,新建的用户对所有表空间都是没有配额的,即不受空间的限制。...表空间配额可以在创建用户的时候指定,也可以在创建用户后再修改用户的配额。...③ 目标用户必须不能含有UNLIMITED TABLESPACE的系统权限,否则空间配额对用户的设置无效,也就会出现在DBA_TS_QUOTAS中的BYTES大于MAX_BYTES的情况。
♣ 题目部分 在Oracle中,基表COL_USAGE$的作用是什么?...♣ 答案部分 从Oracle 9i开始引入了SYS.COL_USAGE$表用来跟踪列的使用情况,该功能通过隐含参数“_COLUMN_TRACKING_LEVEL”来控制。...缺省情况下,该功能是生效的,并且CBO负责将SQL语句中WHERE条件的查询谓词信息保存在该表中,数据库在执行SHUTDOWN NORMAL或者SHUTDOWN IMMEDIATE会自动将该表中的数据清空...“EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'LHR',TABNAME => 'T1');”来将内存中的统计数据刷新到SYS.COL_USAGE$表中。...本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
题目部分 在Oracle中,什么是高水位?如何回收表的高水位? 答案部分 Oracle数据库通过跟踪段中的块状态来管理空间。...HWM的说法;在段空间是自动管理方式(ASSM)时,Oracle是通过BITMAP来管理段内的空间分配,此时Oracle引入了LHWM(Low HWM,低高水位)的概念。...在MSSM中,当数据插入以后,如果是插入到新的数据块中,那么数据块就会被自动格式化等待数据访问;而在ASSM中,数据插入到新的数据块以后,数据块并没有被格式化,而是在第一次访问这个数据块的时候才格式化这个块...在一个ASSM段中的每个数据块处于以下状态之一: ① 在HWM之上,这些块是未分配、未格式化的,且从未使用过。...当使用DELETE删除表记录时,HWM并不会下降,随之导致的是全表扫描的实际开销并没有任何减少。
♣ 题目部分 在Oracle中,如何查询表的DML操作数据变化量?...♣ 答案部分 DBA_TAB_MODIFICATIONS视图(基表为SYS.MON_MODS_ALL$)记录了从上次收集统计信息以来表中DML操作变化的数据量,包括执行INSERT、UPDATE和DELETE...Analyzed)之后发生的INSERT、UPDATE、DELETE以及表是否被TRUNCATE截断操作,并且Oracle数据库的SMON后台进程每15分钟会将这些操作数量的近似值(内存SGA中记录的...DML操作)写入到数据字典基表MON_MODS$中(从SGA中写入到MON_MOD$),但是这个写入过程只持续1分钟,因此,可能不是所有DML操作都会记录到MON_MODS$表中。...需要注意的是,在作者实际测试过程中发现,Oracle并不是严格按照每15分钟将SGA中的DML刷新到MON_MODS$表中,而且也不是严格按照每天1次的规律刷新MON_MODS$表的数据到MON_MODS_ALL
♣ 题目部分 在Oracle中,当收集表的统计信息时应该注意哪些问题?...② 在导入大量数据后应及时收集统计信息后才能进行相关的后续业务处理(包括查询和修改),否则可能会由于实际数据量和统计信息里记录的数据量存在巨大差异而导致CBO选择错误的执行计划。...如果表中的数据倾斜度较大,那么收集直方图能最大程度的帮助优化器计算出准确的Cardinality,从而避免产生差的执行计划;再进一步,如果存在倾斜的多个列共同构成了Predicate里的等值连接且这些列间存在较强的列相关性的话...,那么生成带有直方图的多列统计信息是一个上佳的选择,能够最大程度的帮助优化器准确预测出Cardinality。...21 如果加载数据量比较大,并且是分区表,每个分区的业务数据呈现的是均匀的,在Oracle 11g可以考虑采用DBMS_STATS.COPY_TABLE_STATS先把统计信息做个快速的设置,然后,再收集该分区的统计信息
♣ 题目部分 在Oracle中,分区表统计信息的更新机制是怎样的?...♣ 答案部分 分区表统计信息的更新机制如下所示: ① 当某个分区的数据变化达到10%,自动收集统计信息任务运行时,Oracle会更新该分区的统计信息。...② 当分区表中所有分区中数据变化量的总和达到分区表总数据量的10%,Oracle会更新该分区表的统计信息。...另外,需要注意的是,在更新分区表的统计信息时,在10.2.0.5之前必须要扫描该表所有的分区或整个表的数据,而从10.2.0.5开始,可以设置分区表按增量变化统计,只收集有数据变化的分区。...DUAL;--查看分区表INCREMENTAL的值 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
♣ 题目部分 在Oracle中,SYS.SMON_SCN_TIME基表的作用是什么?...♣ 答案部分 SYS.SMON_SCN_TIME基表用于记录过去时间段中SCN与具体的时间戳(timestamp)之间的映射关系,因为是采样记录这种映射关系,所以SMON_SCN_TIME可以较为粗糙地定位某个...在Oracle 11g中,该表的创建SQL在$ORACLE_HOME/rdbms/admin/dtxnspc.bsq文件中,可以直接查看: create cluster smon_scn_to_time_aux...10g开始,SMON会定时清理SMON_SCN_TIME中的记录。...SMON后台进程会每5分钟被唤醒一次,检查SMON_SCN_TIME在磁盘上的映射记录总数,若总数超过144000条,则会使用以下语句删除最老的一条记录(TIME_MP列最小): delete from
♣ 题目部分 在Oracle中,如何列举某个用户下所有表的注释及列的注释?...♣ 答案部分 可以使用DBA_TAB_COMMENTS视图来查询表的注释,使用DBA_COL_COMMENTS视图来查询列的注释。...它们的示例分别如下所示: 某个用户下所有表的注释: SELECT D.OWNER, D.TABLE_NAME, D.COMMENTS FROM DBA_TAB_COMMENTS D WHERE D.OWNER...某个用户下某个表的所有列的注释: SELECT D.OWNER, D.TABLE_NAME,D.COLUMN_NAME, D.COMMENTS FROM DBA_COL_COMMENTS D WHERE...& 说明: 有关Oracle数据字典的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2153324/ 本文选自《Oracle程序员面试笔试宝典
领取专属 10元无门槛券
手把手带您无忧上云