1、Oracle 企业面试题一、ORACLE 实例与数据库有什么区别? (容易)ORACLE 实例 = 进程 + 进程所使用的内存(SGA)实例是一个临时性的东西,你也可以认为它代表了数据库某一时刻的状态!数据库 = 重做文件 + 控制文件 + 数据文件 + 临时文件数据库是永久的,是一个文件的集合。ORACLE 实例和数据库之间的关系1.临时性和永久性2.实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义3.一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库4.一个数据库可被许
2、多实例同时装载和打开(即 RAC),RAC 环境中实例的作用能够得到充分的体现!二、SGA 主要有那些部分,主要作用是什么 (容易)数据库信息存储在 SGA 中,并由多个数据库进程共享。SGA 有多个内存结构,按其作用不同,可分为共享池、数据缓冲区及日志缓冲区。共享池是对 SQL、PL/SQL 程序进行语法分析、编译、执行的内存区域。如果共享池太小,则运行 SQL、PL/SQL 程序所用的时间就会较长,影响数据库的性能。数据缓冲区用于存储从磁盘数据文件中读入的数据,所有用户共享。数据缓冲区的大小对数据库的读取速度有直接的影响。日志数据首先产生于日志缓冲区,当日志缓冲区的日志数据达到一定数量时,
3、由日志写入进程 LGWR 将日志数据写入日志文件中。三、Oracle 进程主要有哪些,作用是什么 (容易)Oracle 进程主要有用户进程、服务器进程和后台进程。用户进程是一个需要与 Oracle 服务器进行交互的程序。服务器进程是一个用于处理连接到该实例的用户进程的请求。服务器进程和用户进程通信并为所连接的用户请求服务。后台进程主要作用是使系统性能最好和协调多个用户。其主要包括进程监控进程(PMON,在用户进程出现故障时执行进程恢复)、系统监控进程(SMON,在实例启动时执行实例恢复、整理数据文件的自由空间、释放不再使用的临时段)、数据写入进程(DBWR,主要负责将数据缓冲区内的数据写入数据
4、文件) 、日志写入进程(LGWR,主要负责将日志数据区内的数据写入日志文件)及检查点进程(CKPT,其作用是保证所有修改过的数据库缓冲区都被写入数据库文件) 。四、数据描述有通常有哪几种形式?(中等)数据描述有物理描述和逻辑描述两种形式。物理数据描述指数据在存储设备上的存储方式,物理数据是实际存放在存储设备上的数据。逻辑数据描述指程序员或用户用以操作的数据形式,是抽象的概念化数据。五、和排序相关的内存在 8i 和 9i 分别怎样调整,临时表空间的作用是什么(中等)Oracle 8i 中 sort_area_size/sort_area_retained_size 决定了排序所需要的内存;如果排
5、序操作不能在 sort_area_size 中完成,就会用到 temp 表空间。Oracle 9i 中如果 workarea_size_policy=auto 时,排序在 pga 内进行,通常pga_aggregate_target 的 1/20 可以用来进行 disk sort;如果workarea_size_policy=manual 时,排序需要的内存由 sort_area_size 决定。在执行 order by/group by/distinct/union/create index/index rebuild/minus 等操作时,如果在 pga 或 sort_area_size
6、中不能完成,排序将在临时表空间进行(disk sort)。临时表空间主要作用就是完成系统中的 disk sort。六、Oracle 有哪些用户?其默认口令和权限是什么?(容易)当新建一个数据库时,Oracle 将创建几个默认数据库用户模式,如 SYS、SYSTEM 和SCOTT。SYS 用户是 Oracle 中的超级用户,它的默认口令是 change_on_install。数据库中数据字典的所有表和视图都存储在 SYS 模式中。SYSTEM 用户也有管理员权限,它的默认口令是 manager。该用户创建显示管理信息的表和视图,以及 Oracle 工具所使用的内部表和视图。SCOTT 用户是一个
7、示范帐户,其默认口令为 tiger,此帐户包含 4 个示范表。七、怎样查看哪些用户拥有SYSDBA、SYSOPER权限?(中等)conn sys/change_on_installselect * from V_$PWFILE_USERS; 八、请简述 SQL 语言的组成、作用及其常用命令。 (容易)SQL 语言分为数据定义语言(DDL) 、数据操纵语言(DML)和数据控制语言(DCL) 。DDL 用于定义 SQL 模式、基本表、视图和索引的创建和撤消操作。常用命令有:CREATE、ALTER、DROP。DML 用于数据的插入、修改、删除和查询。常用命令有:INSERT、UPDATE、DELE
8、TE、SELECT。DCL 用于对基本表的授权、完整性规则的描述和事务的控制等。常用的命令有:GRANT、REVOKE、COMMIT、SAVEPOINT、ROLLBACK。九、数据库正常启动所经历的状态有哪几种 ? (中等)STARTUP NOMOUNT 数据库实例启动 STARTUP MOUNT 数据库装载 STARTUP OPEN 数据库打开十、varchar2,char 两种数据类型有什么区别,如果数据表某字段输入“ABC“后储存,该字段数据类型分别为 varchar2(10),char(10)存储字节长度以及内容有何区别?(中等)varchar2 数据类型与 char 数据类型的区别:
9、1、char 数据类型的列长度是 1-2000 个字节,如果未指明大小,则默认其大小为 1 个字节。varchar2 数据类型的列长度是 1-4000 个字节,定义该数据类型时,应指定其大小。2、char 数据类型如果用户输入的值小于指定的长度,数据库用空格填充至固定长度。而对于 varchar2 数据类型,如果用户输入的值小于指定的长度,则其长度为用户输入的值长度。如果数据表某字段输入“ABC”后储存,该字段数据类型为 varchar2(10) ,其存储字节长度为 3,内容为“ABC” 。如果数据表某字段输入“ABC”后储存,该字段数据类型为 char(10) ,其存储字节长度为 10,内容
10、为“ABC ” (七个空格) 。十一、已知客户表 a(id name address) 登陆流水表 b(id time) 购物流水表c(id time productid productnum) (1)求每个客户的最新登陆时间 time,姓名 name,客户 id?(2)查最新登陆并且已经购买商品的客户 id,name,登陆的时间 time(一条 sql 语句) (难)(1)求每个客户的最新登陆时间 time,姓名 name,客户 id select a.id,a.name,d.time as timefrom a left join (select id,max(time) as time
11、from b group by id) d on a.id =d.id ;(2) 查最新登陆并且已经购买商品的客户 id,name,登陆的时间 timeselect a.id,a.name,d.time as timefrom a,(select id,max(time) as time from b group by id) d where a.id =d.id and exists (select * from c where id = a.id);十二、已知学生表 student 中有班级 classid,学号 id,成绩 grade (1)计算各个班的平均成绩 (2)查找比该班平均成绩
12、高的学生的班级 classid,学号 id,成绩 grade (难)(1)计算各个班的平均成绩 select classid,avg(grade) from student group by classid;(2)查找比该班平均成绩高的学生的班级 classid,学号 id,成绩 gradeselect classid, id, grade from (select classid,id,grade,avg(grade) over (partition by classid order by classid, id) as avg_grade from student ) where grad
13、e avg_grade;十三、绑定变量是什么?绑定变量有什么优缺点? (中等)绑定变量是相对文本变量来讲的,所谓文本变量是指在 SQL 直接书写查询条件,这样的 SQL 在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value 在运行时传递,然后绑定执行。优点是减少硬解析,降低 CPU 的争用,节省shared_pool ;缺点是不能使用 histogram,sql 优化比较困难。十四、请叙述事务的概念及其性质。 (难)事务是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位,相当于操作系统环境中的“进程”概念。
14、事务以 BEGIN TRANSACTION 语句开始,以 COMMIT 语句或 ROLLBACK 语句结束。事务必须有四个性质:(1) 原子性:一个事务中所有对数据库操作是一个不可分割的操作序列。事务要么完事地被全部执行,要么什么也不做。(2) 一致性:一个事务独立执行的结果将保证数据库的一致性,即数据不会因事务的执行而遭受破坏。(3) 隔离性:在并发事务被执行时,系统应保证与这些事务先后单独执行时的结果一样,此时达到了隔离性要求。(4) 持久性:一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中。十五、请叙述锁定的概念及其优点。 (中等)锁定是数据库用来控制共享资源并发访
15、问的机制。锁定的优点:(1) 一致性:一次只允许一个用户修改数据,从而提供统一的数据。(2) 完整性:向所有用户提供正确的数据。如果一个用户进行了更改并保存,那么所做的更改反映给所有用户。(3) 并发性:允许多个用户访问同一数据。十六、两段锁协议规定所有事务要遵守哪些规则?(中等)(1) 在对任何数据进行读写操作之前,事务首先要获得对该数据的锁定。(2) 在释放一个锁之后,事务不再获得任何其它锁定。所谓两段,就是每个事务分成前后两个阶段:增生阶段和收缩阶段。增生阶段:也称为扩展阶段或申请锁阶段。在增生阶段中,事务可申请锁,但不能解除任何已取得的锁。收缩阶段:也称为释放锁阶段。在收缩阶段中,事务
16、可释放锁,但是不能申请新锁。十七、请叙述表分区的概念及其优点。 (容易)表分区允许用户把一个表中的所有行分为几个部分,并将这些部分存储在不同的位置。被分区的表称为分区表,分成的每一部分称为分区。对于包含大量数据的表来说,分区很有用。表分区有以下优点:(1)改善表的查询性能,在对表进行分区后,用户执行 SQL 查询时可以只访问表中的特定分区而非整个表。(2)表更容易管理,因为分区表的数据存储在多个部分中,按分区加载和删除数据比在表中加载和删除更容易。(3)便于备份和恢复,可以独立地备份和恢复每个分区。(4)提高数据安全性,将不同的分区分布在不同的磁盘,可以减少所有分区的数据同时损坏的可能性。十八
17、、Oracle 提供的表分区有哪几种?请叙述他们的含义。 (容易)Oracle 提供的表分区有:(1)范围分区:范围分区根据表的某个列或一组列的值范围,决定将该数据存储在哪个分区上。(2)散列分区:散列分区通过在分区键值上执行一个散列函数来决定数据的物理位置。(3)复合分区:复合分区是范围分区和散列分区的结合。在创建复合分区时,先根据范围对数据进行分区,然后在这些分区内创建散列子分区。(4)列表分区:列表分区允许用户明确地控制行到分区的映射。列表分区允许按自然方式对无序和不相关的数据集进行分组和组织。十九、请阐述同议词的作用。你认为什么情况下要使用同义词?(中等)同义词是数据库对象的一个别名。
18、同义词的作用有:简化 SQL 语句,隐藏对象的名称和所有者,为分布式数据库的远程对象提供了位置透明性,提供对对象的公共访问。当一个用户访问另一个用户的数据库对象时,可以通过使用同义词,而无需指定模式前缀,就可以实现此用户对其它模式的数据库对象的访问。这些对象可以是表、视图、序列、过程、函数和程序包,甚至是其它同义词。二十、什么是序列?在表中如何使用序列?(容易)序列是用来生成唯一、连续的整数的数据库对象。在表中使用序列:(1)创建序列:CREATE SEQUENCE sequence_name START WITH startnum INCREMENT BY step;(2)创建表时使用序列:
19、CREATETABLE table_name(uid smallint not null, .);(3)插入数据时使用序列:INSERT INTO table_name VALUES(sequence_name.NEXTVAL, .);二十一、什么是视图,它与表的区别是什么?(容易)在 SQL 中,外模式一级数据结构的基本单位是视图,视图是从若干基本表和(或)其他视图构造出来的表。我们创建一个视图时,只是把其视图的定义存放在数据字典中,而不存储视图对应的数据,因此,视图被称为“虚表” ,这是它与表的主要区别。二十二、Oracle 支持的索引有哪几种?(容易)(1)唯一索引(2)组合索引(3)位
20、图索引(4)反向索引(5)基于函数的索引二十三、请解释每种索引,并写出其语法。 (难)1、唯一索引可以确保在定义索引的列中,表的任意两行的值都不相同,Oracle 自动为表的主键列创建唯一索引。其语法为:CREATE UNIQUE INDEX index_name ON table_name(column_name);2、组合索引是在表中的多个列上创建的索引,可以提高检索数据的速度。其语法为:CREATE INDEX index_name ON table_name(column_name);3、反向键索引通常建立在一些值连续增长的列上,可以提高读取的性能。其语法为:CREATE INDEX
21、index_name ON table_name(column_name) REVERSE;4、位图索引适用于低基数列,也就是不同值的数目比表的行数少的列。其语法为:CREATE BITMAP INDEX index_name ON table_name(column_name);5、基于函数的索引是指基于一个或多个列上的函数或表达式创建的索引,便于 WHERE 子句中包含函数或表达式以计算查询时使用。其语法为:CREATE INDEX index_name ON table_name(表达式或函数);二十四、sqlplus 和 sqlplus worksheet 以及 isqlplus 三者
22、之间的主要区别是什么?(中等)sqlplus 是命令行方式的工具,sqlplus worksheet 则带有窗口风格,它们都是客户端;而 isqlplus 是 B/S 结构的,9i 及以后的版本中有,可以通过标准浏览器方式来使用,无论你身在何处,只要相应的 oracle 服务启动即可。二十五、请你简单叙述一下 PL/SQL 语言。 (容易)PL/SQL 是一种块结构的语言,它将一组语句放在一个块中。构成 PL/SQL 程序的基本单元是逻辑块(如过程、函数或匿名块) ,每个逻辑块对应要解决的问题或子问题。PL/SQL 块共分为 3 个部分,分别为声明部分、可执行部分和异常处理部分。二十六、属性数
23、据类型有哪几种?如何使用?(容易)属性数据类型包括两种,分别是%TYPE 和%ROWTYPE。1、%TYPE 将某种数据类型的变量或列提供给其他变量。其语法格式为:var1 table_name.column_name%TYPE;其中声明了变量 var1,它的数据类型与 table_name 表中的 column_name 字段的数据类型相同。2、%ROWTYPE 提供一种表示表中的某行的记录类型。其语法格式为:var1 table_name%ROWTYPE;其中声明了变量 var1,可以用来存储从 table_name 表中提取的一个记录。二十七、用游标机制协调 SQL 的集合处理方式所用的
24、 SQL 语句有哪些?(容易)与游标有关的 SQL 语句有下列四个:(1) 游标定义语句(DECLARE)(2) 游标打开语句(OPEN)(3) 游标推进语句(FETCH)(4) 游标关闭语句(CLOSE)二十八、隐式游标和显式游标的区别是什么?(容易)隐式游标在执行 SQL 语句时由 Oracle 自动生成,用户不能控制隐式游标。隐式游标用于检索一行。显式游标由用户显式声明,用户对显式游标有完全控制权。显式游标用于返回多行的查询。二十九、请描述显式游标的属性及其作用。 (容易)显示游标有以下 4 种属性,分别为:(1)ISOPEN:如果游标已打开,则返回 true,否则返回 false。(2
25、)FOUND:如果成功处理了最后一行,则返回 true。(3)NOTFOUND:如果提取最后一行失败,则返回 true。(4)ROWCOUNT:返回处理的行数。三十、过程和函数的区别是什么?(容易)过程与函数都是执行某些操作的子程序,它是执行特定任务的模块。两者非常类似,只是函数的主要特性是它必须返回一个值,因此,有个 RETURN 子句,该子句在函数规范中指示变量值的数据类型。三十一、怎样区分程序包中的公有项和私有项?(中等)项是指子程序、类型、变量和常量。声明为公有的项可以在程序包之外使用,声明为私有的项不能在程序包之外使用。公有项通常是在程序包规格说明中声明、在程序包主体中定义的,而私有
26、项只能在程序包主体中声明和定义。公有项可以用于全局目的,而私有项只能用于局部目的,只能在程序包内使用。三十二、请解释什么是触发器?它与过程的区别是什么?(容易)触发器是当特定事件出现时自动执行的代码块。其与过程的区别在于:过程是由用户或应用程序甚至是触发器显式调用的,而触发器是由 Oracle 根据发生的事件而隐式激活的,它不能被直接调用执行。三十三、请简述 Oracle 触发器的类型及其运行时机。 (中等)Oracle 触发器分为 DML 触发器、模式(DDL 或用户事件)触发器和数据库级触发器。(1) DML 触发器:当 DML 语句在表中发生时执行。DML 语句包括以下 3 种类型:A、
27、 语句级触发器:无论受触发语句影响的行数是多少,都只激活一次。B、 行级触发器:每当触发器语句影响表时就会激活行级触发器,行级触发器在被修改的每一行上执行一次。C、 INSTEAD OF 触发器:允许用户修改不能使用 DML 语句修改的视图。INSTEAD OF 触发器只可用于视图,不可用于表。(2) 模式(DDL 或用户事件)触发器:在数据库模式中执行 DDL 语句时激活。(3) 数据库(系统事件)触发器:在发生 LOGOFF(退出) 、LOGON(登录) 、STARTUP(打开) 、SHUTDOWN(关闭)数据库和 SERVERERROR(生成错误消息)等系统事件时执行。三十四、请举例说明
28、 Oracle 故障的类型。 (难)Oracle 的故障类型分为语句故障、用户进程故障、实例故障和介质故障。(1) 语句故障:在执行 SQL 语句过程中发生的逻辑故障可导致语句故障。如用户编写的 SQL 语句无效,就会发生逻辑故障。(2) 用户进程故障:当用户程序出错而无法访问 Oracle 数据库时,就会发生用户进程故障。如异常断开或终止进程都会导致用户进程故障。(3) 实例故障:当 Oracle 的数据库实例由于硬件或软件问题而无法运行时,就会发生实例故障。硬件问题包括意外断电,而软件问题可能是服务器操作系统崩溃。(4) 介质故障:是当一个数据库文件、文件的部分或磁盘不能读或不能写时出现的
29、故障。例如,硬盘磁头损坏会导致数据库文件完全破坏。三十五、介质故障是如何发生的?(难)在写入或读取数据库操作所需的文件时,可能会出错。这些错误称为介质故障或磁盘故障。例如,磁头崩溃会导致存储在数据库中的文件完全损坏。发生介质故障以后,对控制文件和日志文件执行的数据库操作取决于这些文件是否已通过复用保护起来。复用是一个文件存储在其他几个磁盘上的过程,如果其中一个磁盘发生介质故障,则可从其他的磁盘中获取该文件。三十六、归档是什么含义(容易)关于归档日志:Oracle 要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。其对数据库备份和恢复有下列用处:数据库后备以
30、及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。数据库可运行在两种不同方式下:NOARCHIVELOG 方式或 ARCHIVELOG 方式数据库在 NOARCHIVELOG 方式下使用时,不能进行在线日志的归档,如果数据库在 ARCHIVELOG 方式下运行,可实施在线日志的归档。三十七、解释无归档日志方式(中等)无归档日志方式可以防止数据库出现实例故障,但无法避免磁盘或介质故障。对于从实例故障恢复,只有最近对一组联机日志文件中的数据库所做的修改才有效。对数据库采用无归档日志方式将禁用联机日
31、志文件的归档。在此模式下,用户需定期进行数据库备份,但无法进行联机备份。只有在数据库关闭时进行的完全备份才可用于恢复在无归档日志方式下操作的数据库。三十八、解释冷备份和热备份的不同点以及各自的优点(中等)热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。 (因为不必将 archive log 写入硬盘)三十九、如果一个表在
32、 2004-08-04 10:30:00 被 drop,在有完善的归档和备份的情况下,如何恢复?(难)手工拷贝回所有备份的数据文件startup mount; sql alter database recover automatic until time 2004-08-04:10:30:00; alter database open resetlogs;四十、表 A(含 a、b、c 三个字段)有 n(n10000)条记录,现在想每次从 A 表中取出 10 条记录(不足 10 的全部取出),要求每次查询从上次查询的最后一条开始取 10 条.记录集按时间排序。 (中等)select A.a,A.
33、b,A.cfrom (select row_number() over(order by c) num,a,b,cfrom 表 A)Awhere num startnumand num 5)四十五、已知关系模式:S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号, CNAME 为课程名,CTEACHER 为任课教师SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩1. 找出没有选修过“李明”老师讲授课程的所有学生姓名2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩3
34、. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩 (难)1.Select SNAME FROM SWhere NOT EXISTS(Select * FROM SC,CWhere SC.CNO=C.CNO AND CNAME=李明 AND SC.SNO=S.SNO)2.Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)FROM S,SC,(Select SNOFROM SCWhere
35、 SCGRADE=2)A Where S.SNO=A.SNO AND SC.SNO=A.SNOGROUP BY S.SNO,S.SNAME3.Select S.SNO,S.SNAMEFROM S,(Select SC.SNOFROM SC,CWhere SC.CNO=C.CNOAND C.CNAME IN(1,2)GROUP BY SNOHAVING COUNT(DISTINCT CNO)=2)SC Where S.SNO=SC.SNO4.Select S.SNO,S.SNAMEFROM S,(Select SC1.SNOFROM SC SC1,C C1,SC SC2,C C2Where SC
36、1.CNO=C1.CNO AND C1.NAME=1AND SC2.CNO=C2.CNO AND C2.NAME=2AND SC1.SCGRADESC2.SCGRADE)SC Where S.SNO=SC.SNO 5.Select S.SNO,S.SNAME,SC.1 号课成绩,SC.2 号课成绩FROM S,(Select SC1.SNO,1 号课成绩=SC1.SCGRADE,2 号课成绩=SC2.SCGRADEFROM SC SC1,C C1,SC SC2,C C2Where SC1.CNO=C1.CNO AND C1.NAME=1AND SC2.CNO=C2.CNO AND C2.NAM
37、E=2AND SC1.SCGRADESC2.SCGRADE)SC Where S.SNO=SC.SNO四十六、编写一个简单的 Oracle 存储过程,输出参数必须有一个是结果集。 (中等)CREATE OR REPLACE package pkg_getrecord ISTYPE myrctype IS REF CURSOR;END pkg_getrecord;/CREATE OR REPLACE PROCEDURE p_ret_rs (r_cursor OUT pkg_getrecord.myrctype)ISBEGINOPEN r_cursor FOR SELECT * FROM t;EX
38、CEPTION WHEN OTHERS THENROLLBACK;RAISE;END p_ret_rs;/四十七、Oracle 数据库表存在伪列 rowid,请利用 rowid 编写一个 SQL 语句,从以下记录中找到唯一记录,并将其 flag 列更新为 YNo name sex flag1 张三 1 N1 张三 1 N1 张三 1 N (中等)UPDATE t SET flag = Y WHERE rowid = (SELECT min(rowid) FROM t t2 WHERE t.no = t2.no AND t.name = t2.name AND t.sex = t2.sex);四
39、十八、Oracle 中,需要在查询语句中把空值( NULL)输出为 0,如何处理?(中等)select nvl(c1,0) from t1;四十九、为表空间 TEMP 增加 10M 空间,请写出实现方法。 (假定数据文件在d:oracleoradata 中) (中等)有两种方法,一种是为表空间增加数据文件alter tablespaceusers add datafile“d:oracleoradatauser002.dbf“ size 10m;另一种方法是增加表空间原有数据文件尺寸:alter database datafile “c:oracleoradatausers.dbf“ resi
40、ze 10m;五十、编写一个触发器,将登录时间、用户和登录数据库记录在表 conn_log 中。 (难)DROP TABLE conn_log;CREATE TABLE conn_log(timestamp DATE,username VARCHAR2(30),database_name VARCHAR2(50);CREATE OR REPLACE TRIGGER LogConnects_RecordAFTER LOGON ON DATABASEBEGININSERT INTO conn_logVALUES(SYSDATE,SYS.LOGIN_USER,SYS.DATABASE_NAME);END LogConnects_Record;