ORACLE(!)

合集下载

oracle常用函数使用大全Oracle除法(转)

oracle常用函数使用大全Oracle除法(转)

oracle常⽤函数使⽤⼤全Oracle除法(转)/chenmeng2192089/article/details/9155625⼀、运算符算术运算符:+ - * / 可以在select 语句中使⽤连接运算符:|| select deptno|| dname from dept;⽐较运算符:> >= = != < <= like between is null in逻辑运算符:not and or集合运算符: intersect ,union, union all, minus要求:对应集合的列数和数据类型相同查询中不能包含long 列列的标签是第⼀个集合的标签使⽤order by时,必须使⽤位置序号,不能使⽤列名例:集合运算符的使⽤:intersect ,union, union all, minusselect * from emp intersect select * from emp where deptno=10 ;select * from emp minus select * from emp where deptno=10;select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复⾏select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重复⾏⼆.ORACLE⽇期时间函数⼤全TO_DATE格式(以时间:2007-11-02 13:45:25为例)Year:yy two digits 两位年显⽰值:07yyy three digits 三位年显⽰值:007yyyy four digits 四位年显⽰值:2007Month:mm number 两位⽉显⽰值:11mon abbreviated 字符集表⽰显⽰值:11⽉,若是英⽂版,显⽰novmonth spelled out 字符集表⽰显⽰值:11⽉,若是英⽂版,显⽰novemberDay:dd number 当⽉第⼏天显⽰值:02ddd number 当年第⼏天显⽰值:02dy abbreviated 当周第⼏天简写显⽰值:星期五,若是英⽂版,显⽰friday spelled out 当周第⼏天全写显⽰值:星期五,若是英⽂版,显⽰fridayddspth spelled out, ordinal twelfthHour:hh two digits 12⼩时进制显⽰值:01hh24 two digits 24⼩时进制显⽰值:13Minute:mi two digits 60进制显⽰值:45Second:ss two digits 60进制显⽰值:25其它Q digit 季度显⽰值:4WW digit 当年第⼏周显⽰值:44W digit 当⽉第⼏周显⽰值:124⼩时格式下时间范围为: 0:00:00 - 23:59:59....12⼩时格式下时间范围为: 1:00:00 - 12:59:59 ....1. ⽇期和字符转换函数⽤法(to_date,to_char)select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //⽇期转化为字符串select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的⽉select to_char(sysdate,'dd') as nowDay from dual; //获取时间的⽇select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//2. select to_char( to_date(222,'J'),'Jsp') from dual显⽰Two Hundred Twenty-Two3.求某天是星期⼏select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;星期⼀select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;monday设置⽇期语⾔ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4. 两个⽇期间的天数select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;5. 时间为null的⽤法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual;注意要⽤TO_DATE(null)6.⽉份差a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')那么12⽉31号中午12点之后和12⽉1号的12点之前是不包含在这个范围之内的。

数据库oracle知识点(自己整理的,可能部分有点小问题)11

数据库oracle知识点(自己整理的,可能部分有点小问题)11

1 oracle服务器由( oracle实例)和oracle数据库组成;2 下面哪个不是必需的后台进程(D)A SMONB LGWRC CKPTD ARCO3 用户进行增、删、改commit后,该记录存储的位置(备注:没有switch logfile)(A)A 联机日志文档B 归档日志文件C 数据文件D 联机日志文件和归档日志文件4 当oracle创建一个服务器进程的同时要为该服务器进程分配一个内存区,该内存区称为(程序全局区)5 简单阐述以下三种文件里面包含的内容?(控制文件、重做日志文件、数据文件)。

控制文件:包含维护和校验数据库一致性所需的信息重做日志文件:包含当系统崩溃后进行恢复所需记录的变化信息数据文件:包含数据库中真正的数据(以上答案仅供参考)6 以下说法错误的是(C)A PGA是一个私有的内存区,不能共享,且只属于一个进程B oracle实例是一种访问数据库的机制,它由内存结构和一些后台进程组成C oracle数据库物理存储结构是由控制文件,归档日志文件,数据文件三部分组成D 数据未被写到数据文件中,这些数据缓冲区被标为脏缓冲区7 获取参数SGA_MAX_SIZE需要利用的数据字典是( v$parameter )8 如果没有正常退出Oracle得情况下重新启动了所用的PC,由(B)负责它的清理工作A SMONB PMONC DBWRD LGWR9以下什么文件能确保Oracle系统在遇到数据文件丢失或损坏后可以完全恢复数据库中的数据?(C)A 联机日志文件B 数据文件C 归档日志文件D 控制文件10以下show parameter ( db_block_size)可以查看数据库块大小.11以下哪条命令可以显示emp表的表结构(D)A show empB select * from emp 查询表内容C show parameter v$empD desc emp显示表结构12使用任何方法创建一个数据库,Oracle都会自动创建两个超级用户system和(sys),它们也被称为数据库管理员用户13 SQL*Plus作为sysdba连接数据库的命令是:(conn / as sysdba)14请简单描述OEM(Oracle企业管理器)是什么OEM是一个功能强大而且操作简单的图形化数据库管理员工具。

Oracle常用命令大全(很有用,做笔记)

Oracle常用命令大全(很有用,做笔记)

Oracle常⽤命令⼤全(很有⽤,做笔记)⼀、ORACLE的启动和关闭1、在单机环境下要想启动或关闭ORACLE系统必须⾸先切换到ORACLE⽤户,如下su - oraclea、启动ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>startupSVRMGR>quitb、关闭ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>shutdownSVRMGR>quit启动oracle9i数据库命令:$ sqlplus /nologSQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> connect / as sysdbaConnected to an idle instance.SQL> startup^CSQL> startupORACLE instance started.2、在双机环境下要想启动或关闭ORACLE系统必须⾸先切换到root⽤户,如下su - roota、启动ORACLE系统hareg -y oracleb、关闭ORACLE系统hareg -n oracleOracle数据库有哪⼏种启动⽅式说明:有以下⼏种启动⽅式:1、startup nomount⾮安装启动,这种⽅式启动下可执⾏:重建控制⽂件、重建数据库读取init.ora⽂件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora⽂件。

2、startup mount dbname安装启动,这种⽅式启动下可执⾏:数据库⽇志归档、数据库介质恢复、使数据⽂件联机或脱机,重新定位数据⽂件、重做⽇志⽂件。

oracle错误代码大全(超详细)

oracle错误代码大全(超详细)

oracle错误代码⼤全(超详细)ORA-00001: 违反唯⼀约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最⼤会话数ORA-00019: 超出最⼤会话许可数ORA-00020: 超出最⼤进程数 ()ORA-00021: 会话附属于其它某些进程;⽆法转换会话ORA-00022: ⽆效的会话 ID;访问被拒绝ORA-00023: 会话引⽤进程私⽤内存;⽆法分离会话ORA-00024: 单⼀进程模式下不允许从多个进程注册ORA-00025: ⽆法分配ORA-00026: 丢失或⽆效的会话 IDORA-00027: ⽆法删去当前会话ORA-00028: 您的会话⼰被删去ORA-00029: 会话不是⽤户会话ORA-00030: ⽤户会话 ID 不存在。

ORA-00031: 标记要删去的会话ORA-00032: ⽆效的会话移植⼝令ORA- 00033: 当前的会话具有空的移植⼝令ORA-00034: ⽆法在当前 PL/SQL 会话中ORA-00035: LICENSE_MAX_USERS 不能⼩于当前⽤户数ORA-00036: 超过递归SQL() 级的最⼤值ORA-00037: ⽆法转换到属于不同服务器组的会话ORA-00038: ⽆法创建会话: 服务器组属于其它⽤户ORA-00050: 获取⼊队时操作系统出错ORA-00051: 等待资源超时ORA-00052: 超出最⼤⼊队资源数 ()ORA-00053: 超出最⼤⼊队数ORA-00054: 资源正忙,要求指定 NOWAITORA-00055: 超出 DML 锁的最⼤数ORA-00056: 对象 '.' 上的 DDL 锁以不兼容模式挂起ORA-00057: 超出临时表锁的最⼤数ORA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库(⾮ )ORA-00059: 超出 DB_FILES 的最⼤值ORA-00060: 等待资源时检测到死锁ORA-00061: 另⼀个例程设置了不同的 DML_LOCKSORA-00062: ⽆法获得 DML 全表锁定;DML_LOCKS 为 0ORA-00063: 超出 LOG_FILES 的最⼤数ORA-00064: 对象过⼤以⾄⽆法分配在此 O/S (,)ORA-00065: FIXED_DATE 的初始化失败ORA-00066: LOG_FILES 为但需要成为才可兼容ORA-00067: 值对参数⽆效;⾄少必须为ORA-00068: 值对参数⽆效,必须在和之间ORA-00069: ⽆法获得锁定 -- 禁⽤了表锁定ORA-00070: 命令⽆效ORA-00071: 进程号必须介于 1 和之间ORA-00072: 进程""不活动ORA-00073: 命令介于和个参数之间时使⽤ORA-00074: 未指定进程ORA-00075: 在此例程未找到进程 ""ORA-00076: 未找到转储ORA-00077: 转储⽆效ORA-00078: ⽆法按名称转储变量ORA-00079: 未找到变量ORA-00080: 层次指定的全局区域⽆效ORA-00081: 地址范围 [,) 不可读ORA-00082: 的内存⼤⼩不在有效集合 [1], [2], [4] 之内ORA-00083: 警告: 可能损坏映射的 SGAORA-00084: 全局区域必须为 PGA, SGA 或 UGAORA-00085: 当前调⽤不存在ORA-00086: ⽤户调⽤不存在ORA-00087: 命令⽆法在远程例程上执⾏ORA-00088: 共享服务器⽆法执⾏命令ORA-00089: ORADEBUG 命令中⽆效的例程号ORA-00090: 未能将内存分配给群集数据库 ORADEBUG 命令ORA-00091: LARGE_POOL_SIZE ⾄少必须为ORA-00092: LARGE_POOL_SIZE 必须⼤于 LARGE_POOL_MIN_ALLOCORA-00093: 必须介于和之间ORA-00094: 要求整数值ORA-00096: 值对参数⽆效,它必须来⾃之间ORA-00097: 使⽤ Oracle SQL 特性不在 SQL92 级中ORA-00099: 等待资源时发⽣超时,可能是 PDML 死锁所致ORA-00100: 未找到数据ORA-00101: 系统参数 DISPATCHERS 的说明⽆效ORA-00102: 调度程序⽆法使⽤⽹络协议ORA-00103: ⽆效的⽹络协议;供调度程序备⽤ORA-00104: 检测到死锁;全部公⽤服务器已锁定等待资源ORA-00105: 未配置⽹络协议的调度机制ORA-00106: ⽆法在连接到调度程序时启动/关闭数据库ORA-00107: ⽆法连接到 ORACLE 监听器进程ORA-00108: ⽆法设置调度程序以同步进⾏连接ORA-00111: 由于服务器数⽬限制在 , 所以没有启动所有服务器ORA-00112: 仅能创建多达 (最多指定) 个调度程序ORA-00113: 协议名过长ORA-00114: 缺少系统参数 SERVICE_NAMES 的值ORA-00115: 连接被拒绝;调度程序连接表已满ORA-00116: SERVICE_NAMES 名过长ORA-00117: 系统参数 SERVICE_NAMES 的值超出范围ORA-00118: 系统参数 DISPATCHERS 的值超出范围ORA-00119: 系统参数的说明⽆效ORA-00120: 未启⽤或安装调度机制ORA-00121: 在缺少 DISPATCHERS 的情况下指定了 SHARED_SERVERS ORA-00122: ⽆法初始化⽹络配置ORA-00123: 空闲公⽤服务器终⽌ORA-00124: 在缺少 MAX_SHARED_SERVERS 的情况下指定了 DISPATCHERS ORA-00125: 连接被拒绝;⽆效的演⽰⽂稿ORA-00126: 连接被拒绝;⽆效的重复ORA-00127: 调度进程不存在ORA-00128: 此命令需要调度进程名ORA-00129: 监听程序地址验证失败 ''ORA-00130: 监听程序地址 '' ⽆效ORA-00131: ⽹络协议不⽀持注册 ''ORA-00132: 语法错误或⽆法解析的⽹络名称 ''ORA-00150: 重复的事务处理 IDORA-00151: ⽆效的事务处理 IDORA-00152: 当前会话与请求的会话不匹配ORA-00153: XA 库中的内部错误ORA-00154: 事务处理监视器中的协议错误ORA-00155: ⽆法在全局事务处理之外执⾏⼯作ORA-00160: 全局事务处理长度超出了最⼤值 ()ORA-00161: 事务处理的分⽀长度⾮法 (允许的最⼤长度为 )ORA-00162: 外部 dbid 的长度超出了最⼤值 ()ORA-00163: 内部数据库名长度超出了最⼤值 ()ORA-00164: 在分布式事务处理中不允许独⽴的事务处理ORA-00165: 不允许对远程操作进⾏可移植分布式⾃治转换ORA-00200: ⽆法创建控制⽂件ORA-00201: 控制⽂件版本与 ORACLE 版本不兼容ORA-00202: 控制⽂件: ''ORA-00203: 使⽤错误的控制⽂件ORA-00204: 读控制⽂件时出错 (块,# 块 )ORA-00205: 标识控制⽂件出错,有关详情,请检查警告⽇志ORA-00206: 写控制⽂件时出错 (块,# 块 )ORA-00207: 控制⽂件不能⽤于同⼀数据库ORA-00208: 控制⽂件的名称数超出限制ORA-00209: 控制⽂件块⼤⼩不匹配,有关详情,请检查警告⽇志ORA-00210: ⽆法打开指定的控制⽂件ORA-00211: 控制⽂件与先前的控制⽂件不匹配ORA-00212: 块⼤⼩低于要求的最⼩⼤⼩ ( 字节)ORA-00213: 不能重新使⽤控制⽂件;原⽂件⼤⼩为,还需ORA-00214: 控制⽂件 '' 版本与⽂件 '' 版本不⼀致ORA-00215: 必须⾄少存在⼀个控制⽂件ORA-00216: ⽆法重新调整从 8.0.2 移植的控制⽂件⼤⼩ORA-00217: 从 9.0.1 进⾏移植⽆法重新调整控制⽂件的⼤⼩ORA-00218: 控制⽂件的块⼤⼩与 DB_BLOCK_SIZE () 不匹配ORA-00219: 要求的控制⽂件⼤⼩超出了允许的最⼤值ORA-00220: 第⼀个例程未安装控制⽂件,有关详情,请检查警告⽇志ORA-00221: 写⼊控制⽂件出错ORA-00222: 操作将重新使⽤当前已安装控制⽂件的名称ORA-00223: 转换⽂件⽆效或版本不正确ORA-00224: 控制⽂件重设⼤⼩尝试使⽤⾮法记录类型 ()ORA-00225: 控制⽂件的预期⼤⼩与实际⼤⼩不同ORA-00226: 备⽤控制⽂件打开时不允许进⾏操作ORA-00227: 控制⽂件中检测到损坏的块: (块,# 块 )ORA-00228: 备⽤控制⽂件名长度超出了最⼤长度ORA-00229: 操作不允许: 已挂起快照控制⽂件⼊队ORA-00230: 操作不允许: ⽆法使⽤快照控制⽂件⼊队ORA-00231: 快照控制⽂件未命名ORA-00232: 快照控制⽂件不存在, 已损坏或⽆法读取ORA-00233: 控制⽂件副本已损坏或⽆法读取ORA-00234: 标识或打开快照或复制控制⽂件时出错ORA-00235: 控制⽂件固定表因并发更新⽽不⼀致ORA-00236: 快照操作不允许: 挂上的控制⽂件为备份⽂件ORA-00237: 快照操作不允许: 控制⽂件新近创建ORA-00238: 操作将重⽤属于数据库⼀部分的⽂件名ORA-00250: 未启动存档器ORA-00251: LOG_ARCHIVE_DUPLEX_DEST 不能是与字符串相同的⽬的地ORA-00252: ⽇志在线程上为空,⽆法存档ORA-00253: 字符限制在以内,归档⽬的字符串超出此限制ORA-00254: 存档控制字符串 '' 时出错ORA-00255: 存档⽇志 (线程 , 序列 # ) 时出错ORA-00256: ⽆法翻译归档⽬的字符串ORA-00257: 存档器错误。

Oracle中判断时间类型不为空(以及不等于符号的用法)

Oracle中判断时间类型不为空(以及不等于符号的用法)

Oracle中判断时间类型不为空(以及不等于符号的⽤法)
正常判断某类型不为空是!=,但是查了⼀下发现正常sql不等于尽量使⽤<>,时间类型的不为空需要⽤is not null
sql中有两种⽅式表⽰不等于,⼀种是"<>"(不含引号),另⼀种是"!="(不含引号),⽤法是⼀样的。

补充:
1、不等于:<>,!=,~= ,^= 这四个符号据说都可以在oracle中表⽰不等于,但是试了之后发现<> ,!= ,^=是可以的,~=不⾏,需要注意的是,只有<>是标准的sql语法,可以移植,其他的都是oracle平台的特性,移植性较差,所以开发中,尽量使⽤<>表⽰不等于。

2、等于:=不⽤多说,但是要进⾏null的等于判断时,须使⽤is null&nbsp;或is not null,null只能通过is null或者is not null来判断,其它操作符与null操作都是false。

3、例⼦,select * from bl_ip_dt where amount <> 800,这条语句查不出amount等于null 的记录,select * from bl_ip_dt where amount <> 800 or amount is null;才是可以的。

Oracle经典教程(推荐)

Oracle经典教程(推荐)

走进Oracle (2)1.Oracle简介 (4)2.Oracle安装 (5)3.Oracle客户端工具 (10)4.Oracle服务 (17)5.Oracle启动和关闭 (18)6.Oracle用户和权限 (19)7.本章总结 (22)8.本章练习 (23)SQL数据操作和查询 (26)1.SQL简介 (27)2.Oracle数据类型 (27)3.创建表和约束 (28)4.数据操纵语言(DML) (31)5.操作符 (36)6.高级查询 (37)7.本章总结 (45)8.本章练习 (46)子查询和常用函数 (49)1.子查询 (50)2.Oracle中的伪列 (52)3.Oracle函数 (55)4.本章总结 (64)5.本章练习 (65)表空间、数据库对象 (68)1.Oracle数据库对象 (69)2.同义词 (69)3.序列 (72)4.视图 (74)5.索引 (76)6.表空间 (78)7.本章总结 (82)8.本章练习 (83)PL/SQL程序设计 (86)1.PL/SQL简介 (87)2.PL/SQL块 (88)3.PL/SQL数据类型 (92)4.PL/SQL条件控制和循环控制 (94)5.PL/SQL中动态执行SQL语句 (104)6.PL/SQL的异常处理 (106)7.本章总结 (112)8.本章练习 (113)Oracle应用于.Net平台 (115)1.回顾 (116)2.使用连接Oracle (117)3.抽象工厂中加入Oracle (121)4.本章总结 (126)5.本章练习 (127)数据库导入导出 (129)1.Oracle导入导出 (130)2.EXP导出数据 (130)3.IMP导入 (133)4.常见问题 (134)第1章走进Oracle主要内容Oracle安装✓Oracle创建用户和角色✓客户端链接Oracle服务器1.Oracle简介在第一学期我们已经接触过关系型数据库SQL Server,对数据库、表、记录、表的增删改查操作等这些基本的概念已经了解。

数据库(Oracle)运维工作内容及常用脚本命令

数据库(Oracle)运维工作内容及常用脚本命令

数据库(Oracle)运维⼯作内容及常⽤脚本命令1、系统资源状况:--内存及CPU资源--linux,solaris,aixvmstat 5--说明:1)观察空闲内存的数量多少,以及空闲内存量是否稳定,如果不稳定就得想办法来解决,怎么解决还得看具体情况,⼀般可以通过调整相关内存参数来解决,各种操作系统输出指标、解释及内存调整参数及⽅法不完全⼀样;2)观察CPU资源利⽤情况,⾸先,需要观察CPU上运⾏的任务数,也就是vmstat输出中位于第⼀列上的指标,如果该指标持续⼤于CPU 核⼼数,应该引起注意;如果该指标持续⼤于CPU核⼼数的两倍,那么应该引起重视;如果持续为CPU核⼼数的多倍,系统⼀般会出现应⽤可感知的现象,必须⽴刻想办法解决。

当然,在观察该指标的同时,还要结合CPU利⽤率的指标情况,如:⽤户使⽤百分⽐,系统使⽤百分⽐,空闲百分⽐等指标,如果空闲百分⽐持续低于20%,应该引起注意;如果持续低于10%,应该引起重视;如果持续为0,系统⼀般会出现应⽤可感知的现象,应该⽴刻想办法解决问题;3)CPU⽤户使⽤百分⽐和系统使⽤百分⽐的⽐例,也是应该注意的。

⼀般来说,在⼀个状态正常的系统上,⽤户使⽤百分⽐应该⽐系统使⽤百分⽐⼤很多,⼏倍到⼗⼏倍甚⾄更⾼,如果系统使⽤百分⽐持续接近⽤户使⽤百分⽐,甚⾄⼤于⽤户使⽤百分⽐,说明系统的状态是不正常的,可能是硬件或者操作系统问题,也可能是应⽤问题。

有关vmstat输出中各指标及解释等,可以参照本⼈博客中相关⽂章:。

--IO状况--linux,solarisiostat -dx 5--aixiostat 5--说明:1)该命令主要⽤来观察系统存储设备的负载和性能状况,⾸先,需要观察系统各存储设备的繁忙程度,如果该繁忙程度指标持续超过80%,那么应该引起注意;如果持续超过90%,应该引起重视;如果持续100%,⼀般会出现应⽤感知的现象,应该⽴刻想办法解决问题; 2)其次,需要注意的是系统上各存储设备的IO能⼒,就是每秒钟各存储设备的输⼊、输出的数据量,这个和具体设备的硬件及配置有关,没有⼀个严格的标准,性能好点的能达到每秒上G,甚⾄⼏个G,差的只能到每秒⼏⼗兆甚⾄⼗⼏兆;3)最后,需要观察存储设备完成每次读写操作耗费的时间,这个也是和具体设备硬件和配置相关的,好的设备可能不到1毫秒,差的能到⼏⼗毫秒甚⾄上百毫秒;iostat的输出,在各种操作系统上的输出和解释也不尽相同,具体可以参照本⼈博客的相关⽂章:。

Oracle体系结构(共79张PPT)

Oracle体系结构(共79张PPT)

32
日期
第32页,共79页。
分析
在执行COMMIT操作时,后台进程LGWR要 开始工作,所以事务变化被记载到重做日志 中。因为只有在发出检查点时,才会将SCN 值写入控制文件和数据文件头部,所以控制 文件和数据文件的SCN值保持一致,并且存 放的是先前检查点的SCN值。
控制文件和数据文件的SCN值一致,与重做 日志不一致!
28
日期
第28页,共79页。
CKPT工作原理
当Oracle发出检查点时,系统会将检查点时刻的
SCN值写入到控制文件和数据文件头部,同时还会促
使DBWR进程将所有脏缓冲区写入到数据文件中。
29
日期
第29页,共79页。
检查点工作机制
在DBWR进程工作之前,LGWR进程首 先将重做日志缓冲区内容写入到重做日志文 件,即该时刻的SCN值会被写入重做日志。
Oracle使用的主要内存结构包括系统全局 区SGA和程序全局区PGA。
9
日期
第9页,共79页。
SGA区
日期
10 第10页,共79页。
数据高速缓存
保存最近从数据文件中读取的数据块。分为 脏缓存块、空闲缓存块和命中缓存块三类。
脏缓冲块:当执行INSERT、UPDATE以及 DELETE操作时,服务器进程修改数据高速 缓存的相应数据,此时缓冲区的内容与数据 文件中的内容不一致。
当CKPT进程工作的时候,会将当前时 刻的SCN值写入数据文件和控制文件。
在发出检查点时刻,数据文件、控制文 件和重做日志的SCN值完全一致。
30
日期
第30页,共79页。
系统恢复
当运行Oracle Server时,在访问数据 文件、控制文件和重做日志时,Oracle会定 期检查并比较每种文件的SCN值,确定文件 是否损坏、系统是否出现异常,最终确定系 统是否需要进行恢复。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Connect sys/change_on_install@Oracle AS SYSDBASET SERVEROUTPUT ONDECLAREMYSAL SCOTT.EMP.SAL%TYPE;CURSOR MYCUR IS SELECT * FROM SCOTT.EMPWHERE SAL > MYSAL;RECORD1 MYCUR%ROWTYPE;BEGINMYSAL:=500;OPEN MYCUR;FETCH MYCUR INTO RECORD1;DBMS_OUTPUT.PUT_LINE('工作证件:'||RECORD1.EMPNO); DBMS_OUTPUT.PUT_LINE('姓名:'||RECORD1.ENAME); DBMS_OUTPUT.PUT_LINE('职业:'||RECORD1.JOB);DBMS_OUTPUT.PUT_LINE('销售额:'||RECORD1.SAL); END;DECLAREabc NUMBER(3) :=0;STR1 V ARCHAR2(20);FLAG BOOLEAN;BEGINCOMMIT;END;Connect sys/change_on_install@Oracle AS SYSDBASET SERVEROUTPUT ONDECLARETYPE RECORD1 IS RECORD(SAL NUMBER,ENAME V ARCHAR2(10)); SRECORD RECORD1;BEGINSELECT SAL,ENAME INTO SRECORDFROM SCOTT.EMPWHERE SAL =800;DBMS_OUTPUT.PUT_LINE(SRECORD.ENAME); END;Connect sys/change_on_install@Oracle AS SYSDBASET SERVEROUTPUT ONDECLAREX1 INTEGER:=10;BEGINIF X1>0THENDBMS_OUTPUT.PUT_LINE('ASDFASDF');END IF;END;SET SERVEROUTPUT ONDECLAREX1 INTEGER:=1;X2 INTEGER:=5;X3 INTEGER:=-5;BEGINIF X1>X2 AND X1<X3THENDBMS_OUTPUT.PUT_LINE('AAAA');ELSIF X2>X3 AND X2<X1THENDBMS_OUTPUT.PUT_LINE('BBBB');ELSEDBMS_OUTPUT.PUT_LINE('CCCC');END IF;END;SET SERVEROUTPUT ONDECLAREX1 INTEGER:=0;X2 INTEGER:=10;X3 INTEGER:=0;BEGINLOOPX1:=X1+2;X3:=X3+1;IF X1=X2 THENEXIT;END IF;END LOOP;DBMS_OUTPUT.PUT_LINE('CCCC:'||TO_CHAR(X3)); END;SET SERVEROUTPUT ONDECLAREX1 INTEGER:=0;X2 INTEGER:=10;X3 INTEGER:=0;BEGINWHILE X1<X2 LOOPX1:=X1+2;X3:=X3+1;END LOOP;DBMS_OUTPUT.PUT_LINE('CCCC:'||TO_CHAR(X3)); END;SET SERVEROUTPUT ONDECLAREX1 INTEGER:=0;X2 INTEGER:=10;X3 INTEGER:=0;BEGINFOR I IN 1..5 LOOPX1:=X1+2;END LOOP;DBMS_OUTPUT.PUT_LINE('CCCC:'||TO_CHAR(X1)); END;游标:DECLAREX1 SCOTT.EMP.SAL%TYPE;CURSOR MYCUR IS SELECT * FROM SCOTT.EMP WHERE SAL<X1;BEGINX1:=200;OPEN MYCUR;END;SET SERVEROUTPUT ONDECLAREX1 SCOTT.EMP.SAL%TYPE;CURSOR MYCUR IS SELECT * FROM SCOTT.EMP WHERE SAL<X1;RECORD1 MYCUR%ROWTYPE;BEGINX1:=1000;OPEN MYCUR;FETCH MYCUR INTO RECORD1;DBMS_OUTPUT.PUT_LINE(RECORD1.EMPNO); END;Connect SYS/****@ORACLE AS SYSDBASET SERVEROUTPUT ONDECLAREX1 SCOTT.EMP.SAL%TYPE;CURSOR MYCUR IS SELECT * FROM SCOTT.EMP WHERE SAL<X1;RECORD1 MYCUR%ROWTYPE;BEGINX1:=10;OPEN MYCUR;FETCH MYCUR INTO RECORD1;IF MYCUR%FOUND THENDBMS_OUTPUT.PUT_LINE(RECORD1.EMPNO); ELSEDBMS_OUTPUT.PUT_LINE('没有数据');END IF;END;游标提取循环SET SERVEROUTPUT ONDECLARECURSOR MYCUR IS SELECT SAL FROM SCOTT.EMP WHERE SAL<1000;BEGINFOR I IN MYCUR LOOPDBMS_OUTPUT.PUT_LINE(I.SAL);END LOOP;EXCEPTION WHEN OTHERS THENNULL;END;过程:CREA TE OR REPLACE PROCEDURE PROCEDURE1 AS TEM SCOTT.EMP.SAL%TYPE;BEGINSELECT SAL INTO TEMFROM SCOTT.EMPWHERE EMPNO=7369;DBMS_OUTPUT.PUT_LINE(TO_CHAR(TEM)); END;SET SERVEROUTPUT ONBEGINSYS.PROCEDURE1;END;SET SERVEROUTPUT ONDECLAREA V ARCHAR2(30);B NV ARCHAR2(30):='CORNER? WHA T CORNER?'; BEGINA:=TO_CHAR(B);DBMS_OUTPUT.PUT_LINE(A);END;CREA TE OR REPLACE PROCEDURE PROCEDURE2( TEMPNO IN SCOTT.EMP.EMPNO%TYPE,NAME1 OUT SCOTT.EMP.ENAME%TYPE,JOB1 IN OUT SCOTT.EMP.JOB%TYPE)ASMYJOB SCOTT.EMP.JOB%TYPE;MYNAME SCOTT.EMP.ENAME%TYPE;BEGINSELECT JOB INTO MYJOBFROM SCOTT.EMPWHERE EMPNO=TEMPNO;SELECT ENAME INTO MYNAMEFROM SCOTT.EMPWHERE EMPNO=TEMPNO;NAME1:='姓名'||MYNAME;JOB1:='职业'||MYJOB;END;SET SERVEROUTPUT ONDECLAREMYNO SCOTT.EMP.EMPNO%TYPE;MYNAME1 SCOTT.EMP.ENAME%TYPE;MYJOB1 SCOTT.EMP.JOB%TYPE;BEGINMYNO:=7369;MYNAME1:='';MYJOB1:='';PROCEDURE2(MYNO,MYNAME1,MYJOB1);DBMS_OUTPUT.PUT_LINE(MYNO);DBMS_OUTPUT.PUT_LINE(MYNAME1);DBMS_OUTPUT.PUT_LINE(MYJOB1);END;SET SERVEROUTPUT ONDECLARESALARY_CODE V ARCHAR2(1);INV ALID_SALARY_CODE EXCEPTION; BEGINSALARY_CODE:='X';IF SALARY_CODE NOT IN('A','B','C') THEN RAISE INV ALID_SALARY_CODE;END IF;EXCEPTIONWHEN INV ALID_SALARY_CODE THEN DBMS_OUTPUT.PUT_LINE('无效无效无效'); END;PL/SQL举例:功能设计:数据表设计:create tablespace AAAdatafile 'e:\aaa.dbf'size 20m创建数据表CREA TE TABLE SYS.XSCJ( XH NUMBER(6) NOT NULL, XM V ARCHAR2(9) NOT NULL, XB V ARCHAR2(4) NOT NULL, GS NUMBER(3) NOT NULL, WY NUMBER(3) NOT NULL, ZZ NUMBER(3) NOT NULL, JSJ NUMBER(3) NOT NULL, TY NUMBER(3) NOT NULL, JS NUMBER(3) NOT NULL) TABLESPACE AAA;CREA TE TABLE SYS.RESULTT (XH NUMBER(6) NOT NULL,XM V ARCHAR2(9) NOT NULL,XB V ARCHAR2(4) NOT NULL,GS NUMBER(3) NOT NULL,WY NUMBER(3) NOT NULL,ZZ NUMBER(3) NOT NULL,JSJ NUMBER(3) NOT NULL,TY NUMBER(3) NOT NULL,JS NUMBER(3) NOT NULL,ZCJ NUMBER(3) NOT NULL,XSJB V ARCHAR2(4) NOT NULL)TABLESPACE AAA;录入数据INSERT INTO SYS.XSCJV ALUES(60001,'林冲','男',85,78,86,77,80,83);程序设计(1)过程CREA TE OR REPLACE PROCEDURE SYS.XSCJPROCESS( TEMPGS IN SYS.XSCJ.GS%TYPE,TEMPWY IN SYS.XSCJ.WY%TYPE,TEMPZZ IN SYS.XSCJ.ZZ%TYPE,TEMPJSJ IN SYS.XSCJ.JSJ%TYPE,TEMPTY IN SYS.XSCJ.TY%TYPE,TEMPJS IN SYS.XSCJ.JS%TYPE,TEMPZCJ1 IN SYS.RESULTT.ZCJ%TYPE,TEMPZCJ2 IN SYS.RESULTT.ZCJ%TYPE,TEMPZCJ3 IN SYS.RESULTT.ZCJ%TYPE,TEMPZCJ4 IN SYS.RESULTT.ZCJ%TYPE)AS XSCJRECORD SYS.XSCJ%ROWTYPE;XSZCJ SYS.RESULTT.ZCJ%TYPE;XSCJJB V ARCHAR2(4);CURSOR XSCURSOR IS SELECT * FROM SYS.XSCJ; ERRORMESSAGE EXCEPTION;BEGINOPEN XSCURSOR;IF XSCURSOR%NOTFOUND THENRAISE ERRORMESSAGE;END IF;LOOPFETCH XSCURSOR INTO XSCJRECORD;XSZCJ:=XSCJRECORD.GS+XSCJRECORD.WY+XSCJRECORD.ZZ+XSCJRECORD.JSJ+XS CJRECORD.TY+XSCJRECORD.JS;IF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ1) THENXSCJJB:='优';ELSEIF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ2) THENXSCJJB:='良';ELSEIF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ3) THENXSCJJB:='中';ELSEIF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ4) THENXSCJJB:='及格';ELSE XSCJJB:='差';END IF;EXIT WHEN XSCURSOR%NOTFOUND;INSERT INTO SYS.RESULTTV ALUES(XSCJRECORD.XH,XSCJRECORD.XM,XSCJRECORD.XB,XSCJRECORD.GS,XSC JRECORD.WY,XSCJRECORD.ZZ,XSCJRECORD.JSJ,XSCJRECORD.TY,XSCJRECORD.JS,XSZCJ,XSCJJB); END LOOP;CLOSE XSCURSOR;COMMIT;EXCEPTIONWHEN ERRORMESSAGE THENDBMS_OUTPUT.PUT_LINE(A);END;主程序:SET SERVEROUTPUT ONDECLAREKC1 NUMBER(3);KC2 NUMBER(3);KC3 NUMBER(3);KC4 NUMBER(3);KC5 NUMBER(3);KC6 NUMBER(3);ZF1 NUMBER(3);ZF2 NUMBER(3);ZF3 NUMBER(3);ZF4 NUMBER(3);BEGINKC1:=60;KC2:=60;KC3:=60;KC4:=60;KC5:=60;KC6:=60;ZF1:=510;ZF2:=460;ZF3:=410;ZF4:=360;SYS.XSCJPROCESS(KC1,KC2,KC3,KC4,KC5,KC6,ZF1,ZF2,ZF3,ZF4); END;CREA TE OR REPLACE PROCEDURE SYS.XSCJPROCESS(TEMPGS IN SYS.XSCJ.GS%TYPE,TEMPWY IN SYS.XSCJ.WY%TYPE,TEMPZZ IN SYS.XSCJ.ZZ%TYPE,TEMPJSJ IN SYS.XSCJ.JSJ%TYPE,TEMPTY IN SYS.XSCJ.TY%TYPE,TEMPJS IN SYS.XSCJ.JS%TYPE,TEMPZCJ1 IN SYS.RESULTT.ZCJ%TYPE,TEMPZCJ2 IN SYS.RESULTT.ZCJ%TYPE,TEMPZCJ3 IN SYS.RESULTT.ZCJ%TYPE,TEMPZCJ4 IN SYS.RESULTT.ZCJ%TYPE)ASXSCJRECORD SYS.XSCJ%ROWTYPE;XSZCJ SYS.RESULTT.ZCJ%TYPE;XSCJJB varchar2(4);CURSOR XSCURSOR ISSELECT * FROM SYS.XSCJ;ERRORMESSAGE EXCEPTION;BEGINOPEN XSCURSOR;IF XSCURSOR%NOTFOUND THENRAISE ERRORMESSAGE;END IF;LOOPFETCH XSCURSOR INTO XSCJRECORD;XSZCJ:=XSCJRECORD.GS+XSCJRECORD.WY+XSCJRECORD.ZZ+XSCJRECORD.JSJ+XS CJRECORD.TY+XSCJRECORD.JS;IF (XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ1)THENXSCJJB:='优';ELSIF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ2)THENXSCJJB:='';ELSIF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJgJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ3)THENXSCJJB:='';ELSIF(XSCJRECORD.GS>=TEMPGS ANDXSCJRECORD.WY>=TEMPWY ANDXSCJRECORD.ZZ>=TEMPZZ ANDXSCJRECORD.JSJ>=TEMPJSJ ANDXSCJRECORD.TY>=TEMPTY ANDXSCJRECORD.JS>=TEMPJS ANDXSZCJ>=TEMPZCJ4)THENXSCJJB:='';ELSE XSCJJB:='';END IF;EXIT WHEN XSCURSOR%NOTFOUND;INSERT INTO SYS.RESULTT(XH,XM,XB,GS,WY,ZZ,JSJ,TY,JS,ZCJ,XSJB)V ALUES(XSCJRECORD.XH,XSCJRECORD.XM,XSCJRECORD.XB,XSCJRECORD.GS,XSC JRECORD.WY,XSCJRECORD.ZZ,XSCJRECORD.JSJ,XSCJRECORD.TY,XSCJRECORDJS,XSZCJJB);END LOOP;CLOSE XSCURSOR;COMMIT;EXCEPTIONWHEN ERRORMESSAGE THENDBMS_OUTPUT.PUT.LINE( ) ; END;。

相关文档
最新文档