### Oracle编程开发面试题解析 #### 1. 实例与数据库的关系;表空间和数据文件的关系 - **实例与数据库的关系**: - **实例**(Instance):指Oracle数据库在运行状态下的软件部分,主要由共享内存结构(SGA)和一系列后台进程组成。这些后台进程负责管理实例的各种功能,如数据缓冲、事务处理等。 - **数据库**(Database):是指存储在磁盘上的数据文件、控制文件、重做日志文件等一系列物理文件的集合。它是数据库的数据存储部分。 - **关系**:一个实例对应于一个数据库,并对其进行管理和操作。一个数据库可以被多个实例装载,但一个实例在同一时刻只能装载一个数据库。 - **表空间和数据文件的关系**: - **表空间**(Tablespace):是一种逻辑存储单元,用于组织数据库中的数据。它是由一个或多个数据文件组成的集合。 - **数据文件**(Datafile):是表空间在物理存储层面上的表现形式,即表空间中的数据实际存储在数据文件中。 - **关系**:一个表空间可以包含一个或多个数据文件,而每个数据文件只属于一个表空间。数据文件中存储的数据块构成了表空间的内容。 #### 2. 同义词的作用及应用场景 - **同义词**(Synonyms):是一种数据库对象的别名,用于简化对数据库对象的引用。它可以被用来隐藏对象的真实名称和所有者信息,从而提高安全性。 - **作用**: - 提高安全性:通过使用同义词,可以避免应用程序直接访问真实的数据库对象,从而限制了对敏感数据的访问。 - 方便开发:同义词可以让开发者无需关心具体的数据库对象名,简化了程序的开发和维护工作。 - 提高灵活性:当数据库结构发生变化时,只需要修改同义词的指向,而不必修改大量依赖这些对象的应用程序代码。 - **应用场景**: - 当需要隐藏数据库对象的真实名称和所有者信息时,例如对外部系统提供接口。 - 当希望简化应用程序中的数据库对象访问时,例如在多用户环境中。 #### 3. VARCHAR2 和 CHAR 数据类型的差异 - **VARCHAR2**:是一种可变长度字符类型,根据实际存储的数据长度占用空间,最多可存储的最大长度由定义时指定。 - **CHAR**:是一种固定长度的字符类型,无论实际存储的数据长度如何,都会按照定义时指定的长度占用空间。 - **差异示例**:假设字段中存储的是“ABC”,对于`VARCHAR2(10)`类型,存储的实际内容就是“ABC”,占用3个字节的空间;而对于`CHAR(10)`类型,虽然实际存储的内容也是“ABC”,但由于定义长度为10,因此会额外用7个空格填充,占用总共10个字节的空间。 #### 4. 变量声明解析 - **v_book_row**:表示声明了一个变量`v_book_row`,其数据类型为`book`表的行类型(RowType),可以用来存储`book`表中的一整行数据。 - **v_book_code**:表示声明了一个变量`v_book_code`,其数据类型与`book`表中的`bank_code`列相同,即`CHAR(2)`类型,可以用来存储`bank_code`列的数据。 #### 5. TNSNAMES.ORA 和 LISTENER.ORA 文件的作用 - **TNSNAMES.ORA**:是Oracle客户端配置文件之一,用于定义数据库服务名及其网络连接参数,包括主机名、端口号等信息。 - **LISTENER.ORA**:是Oracle监听器配置文件,用于定义监听器的服务名、监听地址、端口等配置信息,确保客户端能够正确地连接到数据库服务器。 #### 6. 存储过程异常处理 - **输出结果**: - 如果`<语句1>`出错,将会输出“错误1”。 - 如果`<语句2>`出错,在`<语句1>`正常执行的情况下,将会输出“错误3”。 #### 7. SQL查询未出现在另一个表中的记录 - **方法**: - 使用`NOT IN`子句: ```sql SELECT * FROM 作者 WHERE author_code NOT IN (SELECT author_code FROM 获奖名单); ``` - 使用`NOT EXISTS`子句: ```sql SELECT * FROM 作者 WHERE NOT EXISTS (SELECT 1 FROM 获奖名单 WHERE 获奖名单.author_code = 作者.author_code); ``` - 使用外部连接: ```sql SELECT * FROM 作者 a LEFT JOIN 获奖名单 b ON a.author_code = b.author_code WHERE b.author_code IS NULL; ``` - **性能分析**:通常情况下,使用`NOT EXISTS`子句的方法性能更好,因为它只需要找到第一个匹配的记录即可停止搜索,而`NOT IN`可能需要扫描整个子查询的结果集。 #### 8. 归档日志模式与非归档日志模式的区别 - **归档日志模式**:在这种模式下,当重做日志文件填满时,Oracle数据库会自动将其归档到指定的位置。这种模式支持完全的数据库恢复,包括点恢复和时间点恢复。 - **非归档日志模式**:在这种模式下,当重做日志文件填满时,它们会被覆盖,而不是归档。这种模式仅支持数据库恢复到最近一次完整备份的状态,无法进行点恢复。 #### 9. 使用ROWID更新记录 - **SQL语句**: ```sql UPDATE METER SET FLAG = 'Y' WHERE ROWID = (SELECT ROWID FROM METER WHERE USER_NO = '1000009' AND ASSST_NO = '10A0001' AND MONTH = '2004-7-1' LIMIT 1); ``` #### 10. 函数改写为存储过程 - **存储过程**: ```sql CREATE OR REPLACE PROCEDURE two_number(p_one NUMBER, p_two NUMBER, p_result OUT NUMBER) AS BEGIN p_result := p_one * p_two; END; ``` #### 11. 冷备份的步骤和备份内容 - **步骤**: 1. 将数据库置于备份模式(SHUTDOWN IMMEDIATE)。 2. 备份所有数据文件、控制文件和重做日志文件。 3. 将数据库恢复到正常模式(STARTUP)。 - **备份内容**:主要包括数据文件、控制文件、联机和归档的重做日志文件等。
剩余6页未读,继续阅读
- 粉丝: 8
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页