还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据库入门教程Oracle欢迎参加数据库入门教程!本课程旨在帮助初学者快速掌握数Oracle Oracle据库的基本概念、核心功能和实用技能无论您是数据库管理员、开发人员还是爱好者,这门课程都将为您打开技术世界的大门IT Oracle在接下来的学习中,我们将循序渐进地介绍从数据库基础知识到高级应用的全面内容,包括安装配置、编程、数据管理、性能优化等方面通过理论SQL与实践相结合的方式,帮助您建立扎实的技术基础Oracle让我们一起踏上数据库学习之旅,探索这个强大而灵活的企业级数据Oracle库管理系统!数据库基础概念数据库定义数据库管理系统DBMS数据库是按照数据结构来组织、存是用于创建、管理和操作数DBMS储和管理数据的仓库它能够高据库的软件系统它提供接口让用效、灵活地存储和访问各种数据,户和应用程序能够与数据库进行交并保证数据的完整性和安全性互,执行数据的存储、查询、更新和管理操作关系型数据库关系型数据库以表格形式存储数据,通过行和列的二维表结构组织数据,并通过关系外键将不同表连接起来它采用语言进行操作,代表有、SQL Oracle、等MySQL SQLServer理解数据库的基本概念是学习的第一步作为关系型数据库的代表,Oracle Oracle遵循关系模型的设计理念,同时又增加了许多企业级特性,使其成为大型应用系统首选的数据库平台数据库简介Oracle年创立1977Larry Ellison等人创建了Software DevelopmentLaboratories,随后更名为Oracle,开发了第一个商用SQL数据库至Oracle79i1992-2001年间,Oracle推出多个关键版本,奠定了企业级数据库的基础架构至Oracle10g19c引入网格计算、云计算和自治数据库等创新技术,巩固了市场领导地位现今及未来专注于云基础设施和自治数据库方向,不断增强AI和机器学习能力Oracle在全球数据库市场占据领导地位,尤其在大型企业和金融机构中应用广泛其核心优势包括高可靠性、强大的事务处理能力、优秀的安全机制和可扩展性,使其成为关键业务系统的首选数据库主要应用领域包括金融服务、电信、医疗、政府、制造业和零售业等,特别适合处理大规模交易数据和复杂业务逻辑的场景数据库的体系结构Oracle客户端层用户通过应用程序或客户端工具如SQL*Plus、Oracle SQL Developer发送请求并接收结果服务器层Oracle数据库服务器接收和处理SQL请求,管理数据访问和存储,确保数据完整性和安全性存储层实际存储数据的物理文件,包括数据文件、控制文件、重做日志文件等在三层架构中,表示层前端负责用户界面和数据展示;应用层中间层实现业务逻辑和数据处理;数据库层后端负责数据存储和管理这种架构提高了系统的可扩展性和灵活性,允许各层独立升级和扩展Oracle的客户端/服务器结构使得多个用户可以同时连接到同一数据库,共享数据资源服务器端集中管理数据,确保数据一致性和安全性,同时优化查询性能,为客户端提供高效的数据访问服务逻辑结构与物理结构数据库最顶层的完整数据组织单元1表空间数据库的逻辑划分,存储相关对象段特定数据库对象如表、索引的存储空间区连续分配的一组数据块块Oracle最小的存储单元Oracle数据库的逻辑结构和物理结构是两个独立但相互关联的层面逻辑结构描述了数据如何在用户视角下组织,而物理结构关注数据在操作系统文件中的实际存储方式在物理层面,数据库由操作系统文件组成,包括数据文件、控制文件、重做日志文件等一个表空间由一个或多个数据文件组成,一个数据库由多个表空间组成这种设计实现了逻辑数据管理与物理存储的分离,提高了数据管理的灵活性实例与数据库Oracle数据库实例物理存储结构的集合,包括运行中的数据库进程和内存结构,包括数据文件系统全局区域•.dbf•SGA控制文件程序全局区域•.ctl•PGA•重做日志文件.log•后台进程•参数文件init.ora/spfile•服务器进程归档日志文件和其他辅助文件•实例是动态的,在数据库启动时创建,提供对数据库文件的访问服务数据库是静态的物理存储,保存着所有的数据和元数据系统全局区是实例中的共享内存区域,包括数据缓冲区、共享池、大型池、池和流池等组件为所有用户会话提供SGA OracleJava SGA共享资源,对数据库性能至关重要程序全局区是分配给每个服务器进程的专用内存区域,用于排序操作和会话信息与不同,不是共享的,而是为每个进程PGA SGAPGA独立分配的内存区域存储层介绍Oracle数据文件控制文件.dbf.ctl存储实际数据的文件,每个表空间小型二进制文件,包含数据库物理由一个或多个数据文件组成数据结构的信息,如数据库名称、创建文件的大小可以固定或自动扩展,时间、文件位置、检查点信息等包含表、索引等对象的数据一旦控制文件对数据库运行至关重要,创建,数据文件就与特定数据库关通常会维护多个副本以提高可靠联,不能在不同数据库间共享性重做日志文件.log记录数据库所有更改的日志文件,用于数据恢复和维护数据一致性使Oracle用循环方式写入日志文件,至少需要两个日志文件组以确保在一个组被归档时,另一个组可以继续记录操作除了上述核心文件外,还包括参数文件初始化参数、密码文件远程管理认Oracle证、归档日志文件已填满的重做日志副本等辅助文件,共同构成完整的存储系统服务与进程OraclePMON SMONCKPT进程监视器,清理失败的进系统监视器,负责实例恢复检查点进程,更新控制文件程资源并恢复会话和临时段清理和数据文件头DBWn数据库写入器,将缓冲区中的脏数据写入磁盘Oracle数据库使用多种进程协同工作,分为后台进程和服务器进程两大类后台进程由实例自动启动,维护数据库正常运行;服务器进程则为客户端提供连接服务,执行SQL命令并返回结果除了上述核心进程外,还有日志写入器LGWR负责写入重做日志、归档进程ARCn创建归档日志、恢复进程RECO处理分布式事务等这些进程相互协作,共同确保数据库的可靠运行和数据完整性安装入门Oracle需求评估根据应用需求和业务规模,选择合适的版本和配置考虑处理能力、存储容Oracle量和高可用性需求,确定硬件配置和系统架构环境准备确认硬件和操作系统满足最低要求,准备必要的系统资源和系统权限创建用户和组,配置操作系统参数,如共享内存和信号量等Oracle安装规划规划数据库文件的存放位置,确定主目录、数据文件目录和恢复区Oracle域准备响应文件或安装时的配置选项,以简化安装过程提供多种版本以满足不同需求适合大型企业应用,提供全面Oracle EnterpriseEdition功能;适合中小型企业;是免费版本,功能受限但足Standard EditionExpress Edition够学习和小型应用使用主流安装环境包括、特别是和和各种版Windows LinuxOracle LinuxRed HatUNIX本对于生产环境,推荐使用作为部署平台,它提供更好的性能和稳定性Linux安装与启动Oracle常用工具介绍Oracle是最基本的命令行工具,提供执行和的界面,支持脚本执行和交互式操作尽管界面简单,但功能强SQL*Plus OracleSQL PL/SQL大,可以执行管理任务、查询和修改数据、运行报表等,是和开发人员的必备工具DBA是的图形化管理工具,提供数据库监控、性能管理、空间管理、用户管理等全面功能Oracle EnterpriseManagerOEM Oracle是面向开发人员的,支持和开发、数据库对象管理和数据导入导出其他常用工具还包括备SQLDeveloperIDE SQL PL/SQL RMAN份恢复、数据迁移和数据复制等Data PumpGoldenGate基本操作SQL*Plus登录连接sqlplus username/password@service执行命令SQL、PL/SQL或SQL*Plus命令脚本操作@script.sql或START script.sql退出系统EXIT或QUIT命令SQL*Plus支持多种连接方法,包括本地连接sqlplus/as sysdba和远程连接指定主机、端口和服务名连接后,命令提示符会显示当前用户名,表示准备接收命令常用基本命令包括CONNECT切换用户、DESCRIBE查看对象结构、SHOW显示环境设置、SPOOL输出到文件等SQL*Plus还可以执行系统命令通过HOST或!、运行脚本文件、设置格式化选项以及获取帮助信息HELP命令环境设置SQL*Plus设置每行显示字符数SET LINESIZE100设置每页显示行数SET PAGESIZE50启用输出SET SERVEROUTPUTON DBMS_OUTPUT显示命令执行时间SET TIMINGON设置列显示格式COLUMN name FORMAT a15定义替代变量DEFINE var=value提供了丰富的环境设置选项,帮助用户定制输出格式和交互行为这些设置可SQL*Plus以临时生效,也可以通过登录脚本如或持久化,每次登录自动应glogin.sql login.sql用常用环境命令包括设置会话参数、定义列格式、创建变量和SETCOLUMNDEFINE显示提示信息等通过这些命令,可以优化输出格式,提高工作效率例如,PROMPT可以设置结果的显示宽度、标题格式,控制日期和数字的显示方式,甚至创建交SELECT互式脚本用户与权限管理初步用户创建授予权限CREATE USERusername IDENTIFIEDBYGRANT privilegesTO usernamepassword收回权限角色管理REVOKE privilegesFROM username CREATE ROLErolename在Oracle中,用户是一个数据库帐户,拥有自己的模式schema用于存储数据库对象创建用户后,需要显式授予权限,该用户才能执行操作Oracle采用最小权限原则,默认情况下新用户几乎没有任何权限常用系统权限包括CREATE SESSION连接数据库、CREATE TABLE创建表等对象权限则针对特定对象授予,如SELECT、INSERT、UPDATE和DELETE等预定义角色如CONNECT和RESOURCE可以简化常见权限的分配,但在生产环境中应当谨慎使用,最好创建自定义角色以实现精细化的权限控制数据类型详解Oracle字符类型数值类型•CHARn固定长度字符串,最大2000字节•NUMBERp,s可变精度数字,p最大38位•VARCHAR2n可变长度字符串,最大4000字节•FLOAT浮点数,Binary_float和Binary_double•CLOB字符大对象,最大4GB•INTEGER NUMBER的子类型,无小数部分•NCHAR/NVARCHAR2国家字符集版本日期和时间类型其他类型•DATE日期和时间,精确到秒•BLOB二进制大对象,最大4GB•TIMESTAMP包含毫秒的时间戳•RAW二进制数据,最大2000字节•INTERVAL时间间隔•ROWID行地址•XML XML文档类型选择合适的数据类型对性能和存储效率至关重要例如,对于定长字符串,CHAR比VARCHAR2更高效;而对于可变长度字符串,VARCHAR2避免了空间浪费NUMBER类型高度灵活,可以通过精度和小数位数参数适应各种数值需求表的基本概念表结构主键外键表是关系数据库的基本存储结构,由行和主键是唯一标识表中每一行的一列或多列外键是在一个表中引用另一个表的主键的列组成每列定义了一个特定的数据类型的组合它确保数据的唯一性和完整性,列它建立表之间的关系,确保引用完整和约束,每行包含一条完整记录表名必不允许包含值,并自动创建索引以性,防止出现孤立记录外键可以指定级NULL须在模式内唯一,并遵循命名规则提高查询性能联操作,如级联删除或更新在中,表属于特定的用户模式,完整的表名格式为表可以是永久表存储在数据文件中、临时表会Oracleschema.table_name话或事务级别或外部表引用外部文件表的命名应当遵循规范,使用有意义的名称,避免保留字,并考虑命名一致性Oracle表的创建与修改创建表CREATE TABLE语句定义新表修改表ALTER TABLE添加/修改/删除列重命名RENAME或ALTER TABLERENAME删除表DROP TABLE永久删除表创建表时需要指定表名、列名、数据类型和约束条件可以通过包含子查询的CREATE TABLEAS语句基于查询结果创建表创建表时还可以指定存储参数、表空间和分区选项等高级特性,以优化性能和管理ALTER TABLE命令可以添加、修改或删除列,更改列的数据类型有限制,添加或删除约束,以及修改表的存储参数RENAME命令用于重命名表,而DROPTABLE则完全删除表结构和数据对于临时不需要但将来可能恢复的表,可以使用TRUNCATE清空数据但保留结构或将表移至回收站约束条件与完整性538主要约束类型标识符最大长度Oracle支持的核心约束类型数量约束名称的最大字符数100%完整性保障严格执行约束以确保数据质量Oracle提供五种基本约束类型主键PRIMARY KEY确保每行唯一性;唯一键UNIQUE允许多个NULL但禁止重复;非空NOT NULL确保列必须有值;外键FOREIGN KEY建立表间引用关系;检查CHECK验证列值符合特定条件这些约束可以在创建表时定义,也可以后续添加约束可以是列级直接跟随列定义或表级在所有列定义后指定命名约束使用CONSTRAINT关键字便于识别和管理,特别是在错误消息或维护时约束可以启用、禁用或设为延迟验证,以满足不同的数据加载和处理需求正确使用约束不仅保证数据完整性,还可以通过限制无效数据提高系统效率表空间与数据文件管理序列与同义词序列同义词Sequence Synonym序列是自动生成唯一数值的数据库对象,常用于创建主键值基本语法同义词提供数据库对象的别名,简化访问并隐藏底层结构基本语法CREATE SEQUENCEsequence_name CREATE[PUBLIC]SYNONYM synonym_nameSTART WITH1FOR[schema.]object_name;INCREMENT BY1NOCACHE同义词类型NOCYCLE;•私有同义词仅创建者可访问使用序列的方法•公共同义词所有用户可访问同义词可以简化访问其他模式的对象,并在实现变更时无需修改应用代码•sequence_name.NEXTVAL获取下一个值•sequence_name.CURRVAL获取当前值序列可以避免主键冲突,提高并发插入性能序列和同义词都是提高数据库使用便利性的辅助对象,但各自服务于不同目的序列解决自动编号问题,而同义词则提高了数据库对象访问的灵活性和透明性数据基本操作插入单行插入多行插入查询插入INSERT INTOtable INSERT ALL INSERTINTO tablecol1,col2VALUES INTO...VALUES...SELECT...FROM...val1,val2INTO...VALUES...SELECT...错误处理INSERT/*+IGNORE_ROW_ON_DUPKEY_INDEX*/INSERT语句用于向表中添加新行最基本的形式是指定目标表、列名和对应值如果插入的值包括所有列且顺序与表定义相同,可以省略列名插入时必须遵守表的约束条件,如数据类型、NOT NULL和唯一性等Oracle提供了多种高效的批量插入方法INSERTALL可以一次插入多行到同一个表或不同表;通过子查询的INSERT可以基于查询结果插入大量数据;直接路径插入/*+APPEND*/可以提高大批量插入的性能对于有唯一键冲突风险的情况,可以使用MERGE语句或特殊提示来处理插入/更新逻辑数据基本操作更新基本语法批量更新12UPDATE tablenameSET column1=value1,column2=value2可以一次更新符合WHERE条件的所有行,高效处理大量数据WHERE condition;子查询更新多表更新34UPDATE tableSET column=SELECT...FROM...WHERE...通过MERGE语句实现基于多表条件的复杂更新逻辑更新操作可以修改表中现有数据,通常通过WHERE子句限定要修改的行如果省略WHERE条件,将更新表中所有行,这可能导致意外的数据变更,因此应谨慎使用SET子句可以包含常量、表达式、子查询或DEFAULT关键字复杂更新可以利用子查询在SET子句中获取值,或在WHERE子句中确定目标行MERGE语句特别适合需要基于条件执行插入或更新的场景,如存在则更新,不存在则插入的逻辑值得注意的是,更新操作会受到触发器和约束的影响,可能导致预料外的结果或失败数据基本操作删除操作操作DELETE TRUNCATEDELETE是DML操作,逐行删除数据TRUNCATE是DDL操作,快速删除所有数据DELETE FROMtable_name TRUNCATETABLE table_name;WHERE condition;特点特点•不可回滚•可回滚•不触发触发器•触发触发器•不写入撤销信息•写入撤销undo信息•无WHERE条件•可以有WHERE条件•表级操作,性能较快•行级操作,可能性能较慢•自动释放存储空间适用场景有条件地删除少量数据,需要回滚能力或触发器执行•重置高水位标记适用场景删除表中所有数据,且不需要回滚能力除了DELETE和TRUNCATE外,还可以使用DROP TABLE完全删除表,包括结构和数据DROP是最彻底的删除方式,但在已启用回收站的数据库中,可以通过FLASHBACK TABLE恢复被删除的表单表查询基础SELECT指定要返回的列或表达式FROM指定数据来源的表或视图WHERE过滤条件,限定返回的行ORDER BY结果排序规则SELECT语句是SQL中最常用的命令,用于从数据库检索数据基本语法包括SELECT子句指定返回的列和FROM子句指定数据源SELECT子句可以包含列名、表达式、函数结果和常量,还可以使用星号*表示选择所有列WHERE子句用于过滤行,可以使用比较运算符=,,,=,=,!=、逻辑运算符AND,OR,NOT和特殊运算符BETWEEN,IN,LIKE,IS NULLORDER BY子句定义结果排序,可以按一个或多个列排序,指定ASC升序,默认或DESC降序其他常用子句包括GROUP BY分组、HAVING组过滤和FETCH FIRST/OFFSET分页多表查询与联接内联接左外联接只返回两表中匹配的行返回左表所有行,右表不匹配时为NULL全外联接右外联接返回两表所有行,不匹配时为NULL返回右表所有行,左表不匹配时为NULL联接Join操作用于组合多个表中的数据,基于它们之间的关系创建结果集联接通常基于外键关系,但也可以基于任意条件Oracle支持两种联接语法传统语法WHERE子句中指定条件和ANSI标准语法使用JOIN关键字,后者更清晰且推荐使用除了基本联接类型外,Oracle还支持自联接同一表联接自身、交叉联接笛卡尔积和自然联接基于同名列自动联接对于复杂查询,可以联接多个表,但应注意性能影响良好的联接优化包括使用适当的联接类型、确保联接列有索引、限制联接表的数量,以及在WHERE子句中添加必要过滤条件子查询与嵌套查询标量子查询相关子查询内联视图返回单个值的子查询,可以在表达式中使用,引用外部查询的子查询,每次外部查询处理一子句中的子查询,创建临时结果集作为FROM如、或子句只能返行时,内部查询都会执行一次适用于行级比主查询的数据源可以简化复杂查询逻辑,处SELECT WHEREHAVING回一行一列的结果,否则会报错较和复杂条件检查理分层数据,或实现分析功能子查询是嵌套在另一个查询中的语句,可以出现在、、和子句中子查询必须用括号括起来,通常在右SELECT SELECTFROM WHEREHAVING侧,作为数据或条件的来源使用、、、等运算符可以将子查询结果与外部查询条件关联匹配任何列表值;检查子查询是否返回行;满足任IN EXISTSANY ALLIN EXISTSANY一比较;满足所有比较子查询虽然强大,但可能影响性能,尤其是相关子查询在某些情况下,可以使用联接替代子查询以提高效率ALL聚合函数用法51000+基本聚合函数可分组行数Oracle支持的主要聚合函数数量GROUP BY可高效处理的分组数量0处理NULL聚合函数会自动忽略NULL值聚合函数对一组行执行计算并返回单个值Oracle提供的主要聚合函数包括COUNT计算行数COUNT*包括NULL,COUNTcolumn不包括NULL;SUM计算总和;AVG计算平均值;MAX查找最大值;MIN查找最小值这些函数通常与GROUP BY子句一起使用,按一个或多个列分组数据HAVING子句用于过滤分组结果,类似于WHERE过滤单行GROUP BY中可以使用表达式和位置引用,但不能使用列别名Oracle还提供高级聚合功能,如ROLLUP生成小计和总计、CUBE生成多维小计、GROUPING SETS自定义分组组合和分析函数如ROW_NUMBER、RANK、LEAD、LAG等,用于更复杂的数据分析需求视图的应用View创建视图CREATE[OR REPLACE]VIEW view_name ASSELECT...FROM...[WITH CHECKOPTION];使用视图与表类似,可以、、、有限制SELECT INSERTUPDATE DELETE修改与管理通过更新定义,通过删除OR REPLACEDROP VIEW视图是基于一个或多个表的存储查询,提供数据的逻辑表示,而非物理存储视图可以简化复杂查询、提供数据安全层、实现数据抽象和隐藏底层表结构使用视图可以控制用户只能看到表的特定列或行,从而实现列级和行级安全支持两类视图简单视图单表查询,无函数、分组或可以进行操OracleDISTINCT DML作;复杂视图多表、聚合或的操作受限可更新视图允许通过视图修改DISTINCT DML基表数据,确保通过视图的修改符合视图定义的条件还WITH CHECKOPTION Oracle支持物化视图,它会存储查询结果并可定期刷新,用于提高查询性能,特别是在数据仓库环境中索引详解Index树索引位图索引B标准索引类型,适用于大多数场景,支持等值适用于低基数列不同值少,节省空间但DML和范围查询性能较差文本索引函数索引支持全文检索功能,适用于包含大量文本的基于表达式或函数的索引,用于优化WHERE列子句中使用函数的查询索引是数据库中加速数据检索的对象,类似于书籍的索引自动为主键和唯一约束创建索引,也支持手动创建索引以提高查询性Oracle能创建索引的基本语法是,可以包含一个或多个列CREATE INDEXindex_name ONtable_namecolumn1,column2,...索引虽然提高查询速度,但会降低操作性能,并占用额外存储空间应该在高选择性列不同值比例DML INSERT/UPDATE/DELETE高、经常用于或条件的列、或中使用的列上创建索引相反,频繁更新的列或选择性低的列应避免JOIN WHEREORDERBYGROUP BY索引可以通过命令重建或维护索引,通过删除索引ALTER INDEXDROP INDEX序列与自动编号同义词与数据透明性私有同义词公共同义词只对创建者可见,适用于个人的对象对所有数据库用户可见,适用于全局访问简化创建语法CREATE访问的对象创建语法CREATESYNONYM synonym_name FORPUBLIC SYNONYMschema.object_name;synonym_name FORschema.object_name;跨数据库同义词可以引用远程数据库的对象,通过数据库链接实现创建语法CREATE SYNONYMsynonym_nameFORschema.object_name@dblink;同义词是数据库对象的别名,为表、视图、序列等提供了一个替代名称,实现了访问透明性同义词的主要优势在于简化对象访问无需指定模式名、隐藏底层对象的位置和名称,以及简化迁移和重构同义词特别适用于以下场景访问其他模式中的对象而无需前缀;为长名称对象创建简短别名;允许在不影响应用的情况下重组数据库对象;通过数据库链接访问远程数据库中的对象;在对象重命名或移动后维持向后兼容性同义词通过DROP SYNONYM命令删除,可以添加PUBLIC关键字删除公共同义词数据备份与恢复初识物理备份逻辑备份完整备份复制数据库物理文导出数据库对象和数备份整个数据库内容件,包括数据文件、据,如表、视图、存控制文件和日志文件储过程等增量备份只备份自上次备份以来变更的块数据备份是确保数据安全的关键策略,必须基于业务需求制定合适的备份计划Oracle提供多种备份机制,包括Recovery ManagerRMAN、Data Pump、用户管理的备份和Flashback技术备份策略应考虑恢复点目标RPO和恢复时间目标RTO,即能接受的数据丢失量和恢复所需的时间恢复流程通常包括确定故障类型、评估数据丢失情况、选择恢复策略、执行恢复过程和验证恢复结果Oracle支持完全恢复恢复所有已提交事务和不完全恢复恢复到特定时间点RMAN提供了最全面的备份恢复解决方案,支持增量备份、块级恢复和细粒度的表恢复选项,是大多数Oracle环境的首选工具用户及角色权限管理系统权限允许用户执行特定的数据库操作角色相关权限的集合,简化权限管理对象权限允许用户操作特定数据库对象的权限管理基于最小权限原则,即用户只获得执行任务所需的最低权限系统权限控制用户可以执行的操作类型如、OracleCREATE TABLECREATE,通过授予;对象权限控制用户对特定对象的操作如、,通过SESSION GRANTSYSTEM_PRIVILEGE TOUSER/ROLESELECT INSERTGRANT授予OBJECT_PRIVILEGE ONOBJECT TOUSER/ROLE角色是权限的命名集合,简化了权限管理,避免直接分配权限给用户提供了几个预定义角色基本连接权限、创建对Oracle CONNECTRESOURCE象权限和完全管理权限可以通过创建自定义角色,通过将权限分配给角色,然后将角色分配给用户命令用于DBACREATE ROLEGRANT REVOKE撤销已授予的权限或角色允许被授权者转授权限,允许被授权者转授对象权限WITH ADMINOPTION WITHGRANT OPTION编程初步PL/SQL声明部分定义变量、常量、游标等执行部分包含实际的执行语句异常处理部分处理程序执行过程中的错误是的专有程序语言,扩展了标准,增加了过程化编程特性它紧密集成在数据库中,可以高效PL/SQLProcedural Language/SQL OracleSQL Oracle处理语句,提供变量、条件语句、循环、异常处理等编程功能代码以块为单位组织,每个块可以包含声明部分、执行部分和异常处理部SQLPL/SQL分匿名块是没有名称的代码块,无法保存在数据库中,通常用于一次性执行的简单操作匿名块的基本结构如下可选,声明变量、PL/SQL DECLARE必需,开始执行部分、可选,异常处理和必需,结束块在中,可以直接编写并执行匿名块,用于测试代码或执BEGINEXCEPTIONENDSQL*Plus行简单任务与匿名块不同,存储过程和函数是命名的块,可以保存在数据库中并反复调用PL/SQL变量与数据类型标量类型复合类型•NUMBER数值,可带精度和小数位•记录RECORD不同类型字段的集合•CHAR固定长度字符串•集合TABLE索引表、VARRAY固定大•VARCHAR2可变长度字符串小数组、嵌套表•DATE日期时间值•LOB大对象类型CLOB/BLOB/NCLOB•BOOLEAN TRUE/FALSE/NULL引用类型•%TYPE基于变量或列的类型•%ROWTYPE基于行或游标的记录类型•REF CURSOR动态结果集引用在PL/SQL中,变量必须在声明部分定义,遵循IDENTIFIER[CONSTANT]DATATYPE[NOT NULL][:=EXPRESSION]格式变量名区分大小写,应使用有意义的名称变量可以接受NULL值除非声明为NOTNULL,可以设置初始值,也可以声明为常量CONSTANT关键字%TYPE和%ROWTYPE是PL/SQL的重要特性,可以创建基于现有对象的变量类型%TYPE引用单个列或变量的数据类型,增强可维护性;%ROWTYPE创建与整行或游标匹配的记录类型变量作用域定义了变量可访问的范围,包括块作用域只在定义块中可见和子程序作用域在子程序及嵌套块中可见外部块的变量可以在内部块中访问,除非内部块有同名变量控制结构与流程条件控制结构循环控制结构IF conditionTHEN--基本循环statements;LOOPELSIF conditionTHEN statements;statements;EXIT WHEN condition;ELSE END LOOP;statements;END IF;--WHILE循环WHILE conditionLOOPCASE selectorstatements;WHEN value1THEN result1;END LOOP;WHEN value2THEN result2;ELSE result_else;--FOR循环END CASE;FOR iIN
1..10LOOPstatements;END LOOP;PL/SQL提供了丰富的控制结构,用于实现各种编程逻辑条件语句包括IF-THEN-ELSIF-ELSE结构和CASE语句,用于基于条件执行不同代码块循环结构包括基本LOOP需要显式EXIT、WHILE LOOP先检查条件、FOR LOOP固定次数迭代和游标FOR LOOP遍历查询结果流程控制语句包括EXIT跳出当前循环、EXIT WHEN条件满足时跳出循环、CONTINUE跳过当前迭代继续下一次和CONTINUE WHEN条件满足时跳过标签可以用于标识循环,结合EXIT label或CONTINUE label使用,实现对特定循环的控制合理使用这些控制结构,可以编写出可读性强、逻辑清晰的PL/SQL程序游标基本用法Cursor声明游标1CURSOR cursor_name ISSELECT statement;打开游标OPEN cursor_name;获取数据FETCH cursor_name INTOvariable_list;关闭游标CLOSE cursor_name;游标是PL/SQL中处理查询结果集的重要机制,它是指向SELECT语句结果的指针Oracle支持两种类型的游标隐式游标由Oracle自动管理,用于单行SELECT和DML语句和显式游标由开发者定义和控制,用于多行查询除了基本的游标操作,游标还有几个属性可以检查其状态%FOUND是否找到行、%NOTFOUND是否未找到行、%ROWCOUNT已处理的行数和%ISOPEN游标是否打开游标FOR循环是处理查询结果的简洁方式,它自动打开游标、循环获取数据并关闭游标FOR recordIN cursor_name LOOPstatements;ENDLOOP;带参数的游标允许在使用时传入不同参数值,提高了游标的灵活性和可重用性CURSOR cursor_nameparamdatatype ISSELECT...WHERE...=param;存储过程与函数包的应用Package包规范包体Package SpecificationPackage Body包的公共接口,声明可以从包外访问的元素包的实现部分,包含•公共变量、常量、游标•规范中声明的过程和函数实现•过程和函数签名•私有变量、过程、函数•自定义类型和异常•初始化代码可选创建语法创建语法CREATE OR REPLACE PACKAGEpkg_nameCREATEOR REPLACEPACKAGE BODYpkg_nameAS AS--公共声明--私有声明END pkg_name;--实现代码END pkg_name;包是相关程序单元、变量和类型的集合,提供了模块化和封装的机制包的主要优势包括组织相关子程序;控制可访问性公共/私有;提高性能一次加载整个包;支持共享变量和持久状态;简化应用设计和维护使用包可以构建更结构化、可维护的应用程序调用包中的元素使用包名.元素名语法,如pkg_name.procedure_name包在首次引用时加载到SGA中,之后所有会话共享同一个副本,提高了内存使用效率Oracle提供了许多内置包,如DBMS_OUTPUT输出信息、DBMS_SQL动态SQL、UTL_FILE文件操作等,扩展了PL/SQL的功能范围可以通过DROP PACKAGE[BODY]pkg_name删除包或仅删除包体触发器简介Trigger触发器是响应特定数据库事件自动执行的块支持多种触发器类型触发器操作、触发器PL/SQL OracleDML INSERT/UPDATE/DELETEDDL命令、触发器用于视图中的操作、系统事件触发器数据库启动关闭和用户事件触发器登录注销触发CREATE/ALTER/DROPINSTEAD OFDML//器可以在事件前或事件后触发,可以在语句级每个语句一次或行级每受影响行一次执行BEFORE AFTERSQL创建触发器的基本语法是CREATE[ORREPLACE]TRIGGER trigger_name BEFORE|AFTER|INSTEAD OFevent ONobject[REFERENCING OLD在行级触发器中,和伪记录分别表示行的旧值和AS oldNEW ASnew][FOR EACHROW][WHENcondition]BEGIN statement;END;:OLD:NEW新值触发器广泛应用于数据验证、审计跟踪、自动值计算、复杂完整性约束、事件通知和表同步等场景可以通过命令DISABLE/ENABLE TRIGGER临时禁用启用触发器,通过删除触发器/DROP TRIGGER事务管理与控制特性事务控制命令隐式事务控制ACID事务的四个基本特性原子性Atomicity确保事Oracle提供了多个命令管理事务COMMIT结束除了显式控制外,某些操作会自动触发事务结束务中的所有操作要么全部完成,要么全部不完成;当前事务并使所有更改永久化;ROLLBACK撤销正常退出会隐式提交事务;异常退出或系统崩溃会一致性Consistency确保事务将数据库从一个一当前事务中的所有更改;SAVEPOINT name创建回滚未提交事务;DDL语句会自动提交之前的事务致状态转变为另一个一致状态;隔离性Isolation事务中的保存点;ROLLBACK TOname回滚到指自动提交;数据库关闭前会提交或回滚未完成事确保并发事务之间相互独立;持久性Durability定保存点;SET TRANSACTION设置事务属性,务确保事务一旦提交,其结果将永久保存如只读或隔离级别Oracle采用读一致性模型,确保查询返回事务开始时点的一致数据视图,不受并发事务影响这通过撤销undo段实现,记录数据的先前版本Oracle同时支持语句级和事务级读一致性,使查询可以看到事务开始时或语句开始时的数据状态锁机制与并发控制行级锁表级锁锁定表中的单行,允许并发访问其他行锁定整个表,限制并发访问但减少锁维护开销共享锁排他锁允许其他事务读取但不能修改数据,SELECT防止其他事务修改数据,UPDATE/DELETE操3FOR UPDATE获取作自动获取Oracle的锁机制自动管理事务间的并发访问,确保数据一致性和完整性Oracle主要采用行级锁定,只在需要时才获取表级锁,最大化并发性能DML语句INSERT/UPDATE/DELETE自动获取行的排他锁;SELECT语句通常不加锁,除非使用FOR UPDATE子句死锁发生在两个事务互相等待对方释放锁的情况,Oracle能自动检测并解决死锁,通常会回滚持有较少撤销数据的事务并发控制的其他相关概念包括等待超时通过设置等待时间限制、乐观锁使用版本号或时间戳检测冲突、悲观锁提前锁定资源防止冲突和SELECT FORUPDATE SKIPLOCKED跳过已锁定行继续处理了解锁机制有助于编写高效的并发应用程序,避免性能问题数据库安全机制密码安全审计功能资源控制Oracle提供多种密码安全机制,包括密码复Oracle审计允许跟踪和记录用户活动,包括通过用户配置文件Profile限制用户资源使杂度要求长度、字符类型、密码历史防止标准审计语句、权限和对象级别、细粒度用,如CPU时间、逻辑读取、并发会话数和重用、密码生命周期强制定期更改和账户审计特定条件和统一审计12c及更高版空闲时间等这不仅提高安全性,还防止个锁定多次失败尝试后通过配置验证函本审计记录可以存储在数据库表中或操别用户消耗过多资源,影响系统整体性能数,可以实施自定义密码策略作系统文件中,便于安全分析和合规报告数据库安全是一个多层次的概念,包括认证验证用户身份、授权控制访问权限、审计监控用户活动和加密保护敏感数据Oracle提供了全面的安全功能,从基本的用户/角色管理到高级的虚拟私有数据库VPD和标签安全OLSOracle12c引入了统一审计架构,简化了审计配置和管理,提供了更全面的审计能力加密选项包括透明数据加密TDE和安全传输加密网络加密其他安全特性还包括数据屏蔽隐藏敏感数据、实时应用安全和数据库防火墙等实施数据库安全应遵循最小权限原则,定期进行安全评估,并保持安全补丁更新数据库性能优化80%10x优化影响索引查询加速SQL数据库性能问题中SQL相关的比例合适索引可提升查询速度的倍数5-15%内存配置提升优化SGA/PGA可提高的平均性能数据库性能优化是一个系统性过程,涉及多个层面硬件CPU、内存、I/O子系统、操作系统内核参数、文件系统、数据库配置内存区域、参数设置、应用设计表结构、索引、SQL编写优化应采用科学方法确定基准、识别瓶颈、实施改进、验证效果,循环迭代SQL优化是最重要的性能改进领域常见技巧包括使用执行计划分析SQL执行路径;避免全表扫描和全索引扫描;编写高效的WHERE条件;减少排序和聚合操作;优化联接方式和顺序;控制返回数据量索引优化涉及选择合适列创建索引,考虑查询模式,避免过度索引Oracle提供了多种性能诊断工具,如AWR报告、ASH分析、ADDM建议和SQL监视器等,帮助识别和解决性能问题数据备份与恢复进阶配置RMAN设置备份策略和参数执行备份完整、增量和归档日志备份维护备份验证、删除过期备份恢复操作执行完全或不完全恢复Recovery ManagerRMAN是Oracle推荐的备份恢复工具,提供了完整、增量和差异备份功能,支持到块级别的恢复,并能自动管理备份集RMAN优势包括备份期间数据库可用、自动备份检验、高性能备份和恢复、增量备份节省空间和时间,以及与Oracle集成的元数据目录除了基本备份,RMAN还支持多种高级功能块变更跟踪加速增量备份、多通道备份并行处理提高性能、压缩备份节省存储空间、加密备份保护敏感数据、表空间时间点恢复TSPITR和表级恢复RMAN配置可以集中存储在恢复目录中,便于管理多个数据库的备份备份策略应根据RPO/RTO要求、可用存储、维护窗口和操作复杂度综合考虑,制定适合企业需求的方案高可用及灾备策略复制Oracle Data Guard RealApplication ClustersGoldenGateData Guard维护一个或多个备用数据库,作为RAC允许多个服务器实例同时访问一个共享数据Oracle GoldenGate提供实时、低延迟的数据复主数据库的副本它可以配置为物理备用完全库,提供负载均衡和故障转移能力当一个节点制,支持异构环境和复杂拓扑它可用于创建活副本或逻辑备用可查询,支持同步零数据丢失败时,其他节点可以接管工作负载,确保应用动-活动配置,实现零停机维护和迁移,或构建失或异步最小性能影响传输模式故障转移可连续可用RAC特别适合需要高可用性和可扩展数据集成和数据分发解决方案与Data Guard以手动执行或配置为自动,实现近乎无缝的灾难性的任务关键型应用不同,它可以复制部分数据,并支持跨平台操恢复作提供多种高可用性技术,可以根据业务需求和恢复目标组合使用和技术提供备份恢复和点时间恢复;Oracle RecoveryManagerRMAN Flashback和提供灾难恢复和数据保护;和服务网格提供本地高可用性;应用连续性功能可屏蔽故障对应用的影响DataGuardGoldenGate RAC操作数据库Java Oracle管理事务与资源执行操作SQL使用Connection.setAutoCommitfalse建立数据库连接使用Statement执行简单SQL;使用开始事务,commit提交,rollback回配置环境JDBC使用DriverManager.getConnection或PreparedStatement执行参数化查询,提滚使用try-with-resources或finally块添加Oracle JDBC驱动依赖,如DataSource创建连接推荐使用连接池如供更好的性能和安全性;使用确保资源正确关闭,防止资源泄露ojdbc
8.jar,并在项目中引入驱动类名通HikariCP、C3P0管理连接,以提高性能CallableStatement调用存储过程和函数常为oracle.jdbc.driver.OracleDriver,和可扩展性连接池避免频繁建立和关闭连查询结果通过ResultSet对象迭代处理JDBC URL格式为接的开销jdbc:oracle:thin:@host:port:sid或jdbc:oracle:thin:@//host:port/service_name除了基本JDBC操作,Java还可以使用高级特性批处理操作提高多语句执行效率;LOB处理支持大对象数据;Oracle对象和集合类型映射;结果集滚动和更新功能主流框架如SpringJDBC、MyBatis和JPA/Hibernate提供了更高层次的抽象,简化数据库操作,提高开发效率开发实践案例Oracle一个完整的员工管理系统实践案例可能包含以下对象和技术表设计员工、部门、职位、薪资历史;关系模型外键约束确保引用Oracle完整性;索引优化提高查询性能;视图简化复杂查询和增强安全性;存储过程和函数封装业务逻辑;触发器自动维护审计记录和历史数据;和包组织相关功能实施此系统时的最佳实践包括规范化表设计避免数据冗余;实施适当的错误处理和日志记录;使用绑定变量防止注入;实施行级安SQL全控制敏感数据访问;创建适当索引平衡查询性能和操作;利用高级特性如分区、物化视图优化大数据量处理;定期维护数据DML Oracle库统计信息确保查询优化器生成高效执行计划这些实践帮助构建高效、安全且可维护的数据库应用常见问题及解决建议ORA-00001唯一约束违反检查输入数据,确保唯一性ORA-00942表或视图不存在验证对象名和用户权限ORA-01017用户名/密码无效确认凭据正确,账户未锁定ORA-01555快照过旧增加UNDO表空间或减少事务时间ORA-04031内存不足调整SGA大小或优化SQLORA-12154TNS无法解析服务名检查网络配置和监听器状态性能问题是最常见的Oracle故障类型,解决方法包括识别瓶颈CPU、内存、I/O或锁;分析AWR/ASH报告确定高资源消耗的SQL;检查执行计划变化;验证统计信息是否过时;评估索引使用情况;检查等待事件以确定系统瓶颈;考虑参数调整和查询重写始终从数据收集开始,避免盲目调整其他常见问题包括空间管理表空间满、临时空间耗尽;锁和死锁查询v$lock和v$session识别;备份失败检查磁盘空间和权限;连接问题验证网络、监听器和认证开发高效的故障排除流程收集错误消息和警报日志;诊断根本原因;应用最小必要更改;验证解决方案;记录发现和解决方案以备将来参考保持系统及时打补丁和升级,可以预防许多常见问题课程总结与学习建议高级应用性能调优、高可用架构、安全加固开发技能PL/SQL编程、API开发、应用集成管理维护备份恢复、监控、故障排除基础知识4SQL、数据库结构、基本操作本课程涵盖了Oracle数据库的核心概念和基本操作,从体系结构和安装配置,到SQL操作、PL/SQL编程、数据管理和维护这些知识为您提供了扎实的Oracle技术基础,但真正掌握Oracle需要不断学习和实践后续学习建议按照明确路径巩固基础知识,提升管理维护能力,拓展开发技能,最后深入高级应用领域持续学习资源包括Oracle官方文档和白皮书;Oracle University课程和认证;技术社区如Oracle技术网和Stack Overflow;实践环境搭建和动手项目;参与用户组和技术会议数据库技术不断发展,关注Oracle新特性和最佳实践至关重要特别是Oracle Cloud和自治数据库等新技术,代表了未来发展方向希望这门课程能够启发您的学习兴趣,开启成功的Oracle技术之旅!。
个人认证
优秀文档
获得点赞 0