⑴ oracle是用什么语言是sql语言吗
不一样的。
Oracle数据库内核是用c编写的,但是,大部分代码是在数据库中执行的,使用PL/SQL和Java(使用嵌入在内核中的jvm)开发。外围工具(SQLDeveloper,grid控件)主要使用Java。
MySQL是用C和c++编写的。它的SQL解析器是用yacc编写的,但是它使用一个定制的词法分析器。MySQL可以在很多系统平台上工作。
(1)oraclesql编写规范扩展阅读:
Oracle文件结构:
数据库的物理存储结构由多种物理文件组成,主要包括数据文件、控制文件、重做日志文件、归档日志文件、参数文件、密码文件、警告文件等。
1.控制文件:存储诸如实例、数据文件和日志文件等信息的二进制文件。改变系统设置control_files='path'。VCONTROLFILE美元。
2.数据文件:存储数据。DBF后缀。一个语句:一个表空间用于多个数据文件,一个数据文件用于一个表空间。Dba_data_files/v$丢失。
3.日志文件:重做日志文件和Archivelog文件。记录数据库修改信息。ALTER系统切换日志文件;。V$日志。
4.参数文件:记录基本参数。Spfilepfile。
5.警告文件:显示参数background_mp_dest——使用共享服务器连接。
6.跟踪文件:显示参数user_mp_dest——使用专用服务器连接。
⑵ 关于oracle PLSQL
PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。
PL/SQL的优点
从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。
PL/SQL的优点如下:
. PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。
. PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型
. PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。
. 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。
. PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的
. 对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。
PL/SQL块结构
PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分:
声明部分(Declaration section)
声明部分包含了变量和常量的数据类型和初始值。这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。
执行部分(Executable section)
执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。
异常处理部分(Exception section)
这一部分是可选的,在这一部分中处理异常或错误,对异常处理的详细讨论我们在后面进行。
PL/SQL块语法
[DECLARE]
---declaration statements
BEGIN
---executable statements
[EXCEPTION]
---exception statements
END
PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由--标示。
PL/SQL块的命名和匿名
PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。匿名程序块可以用在服务器端也可以用在客户端。
命名程序块可以出现在其他PL/SQL程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。
PL/SQL程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:
. 函数
. 过程
. 包
. 触发器
函数
函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。定义函数的语法如下:
FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]
过程
存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:
PROCEDURE name [(parameter[,parameter,...])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]
包(package)
包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。
包由两个部分组成:规范和包主体(body),规范描述变量、常量、游标、和子程序,包体完全定义子程序和游标。
触发器(trigger)
触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。
变量和常量
变量存放在内存中以获得值,能被PL/SQL块引用。你可以把变量想象成一个可储藏东西的容器,容器内的东西是可以改变的。
声明变量
变量一般都在PL/SQL块的声明部分声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理部分使用变量,那么变量必须首先在声明部分进行声明。
声明变量的语法如下:
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]
注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。
给变量赋值
给变量赋值有两种方式:
. 直接给变量赋值
X:=200;
Y=Y+(X*20);
. 通过SQL SELECT INTO 或FETCH INTO给变量赋值
SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;
常量
常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。常量和变量都可被定义为SQL和用户定义的数据类型。
ZERO_VALUE CONSTANT NUMBER:=0;
这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。
标量(scalar)数据类型
标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:
. number
. character
. date/time
. boolean
表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。
表1 Scalar Types:Numeric
Datatype
Range
Subtypes
description
BINARY_INTEGER
-214748-2147483647
NATURAL
NATURAL
NPOSITIVE
POSITIVEN
SIGNTYPE
用于存储单字节整数。
要求存储长度低于NUMBER值。
用于限制范围的子类型(SUBTYPE):
NATURAL:用于非负数
POSITIVE:只用于正数
NATURALN:只用于非负数和非NULL值
POSITIVEN:只用于正数,不能用于NULL值
SIGNTYPE:只有值:-1、0或1.
NUMBER
1.0E-130-9.99E125
DEC
DECIMAL
DOUBLE
PRECISION
FLOAT
INTEGERIC
INT
NUMERIC
REAL
SMALLINT
存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:
number[([,])]。
缺省的精度是38,scale是0.
PLS_INTEGER
-2147483647-2147483647
与BINARY_INTEGER基本相同,但采用机器运算时,PLS_INTEGER提供更好的性能 。
表2 字符数据类型
datatype
rang
subtype
description
CHAR
最大长度32767字节
CHARACTER
存储定长字符串,如果长度没有确定,缺省是1
LONG
最大长度2147483647字节
存储可变长度字符串
RAW
最大长度32767字节
用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,RAW数据不在字符集之间进行转换。
LONGRAW
最大长度2147483647
与LONG数据类型相似,同样他也不能在字符集之间进行转换。
ROWID
18个字节
与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。
VARCHAR2
最大长度32767字节
STRINGVARCHAR
与VARCHAR数据类型相似,存储可变长度的字符串。声明方法与VARCHAR相同
表3 DATE和BOOLEAN
datatype
range
description
BOOLEAN
TRUE/FALSE
存储逻辑值TRUE或FALSE,无参数
DATE
01/01/4712 BC
存储固定长的日期和时间值,日期值中包含时间
⑶ SQLServer 和 Oracle 有什么区别
ORACLE与SQL SERVER的区别
体系结构
ORACLE的文件体系结构为:
数据文件 .DBF (真实数据)
日志文件 .RDO
控制文件 .CTL
参数文件 .ORA
SQL SERVER的文件体系结构为:
.MDF (数据字典)
.NDF (数据文件)
.LDF (日志文件)
ORACLE存储结构:
在ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子),可控制块确定块本身何时有,何时没有足够的空间接受新信息(对块的存储情况的分析机制)
这样可降低数据行连接与行迁移的可能性。块的大小可设置(OLTP块和DSS块)
在ORACLE中,将连续的块组成区,可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数
在ORACLEl里表可以分为多个段,段由多个区组成,每个段可指定分配在哪个表空间里(段的类型分为:数据段、索引段、回滚段、临时段、CASH段。ORACLE里还可对表进行分区,可按照用户定义的业务规则、条件或规范,物理的分开磁盘上的数据。
这样大大降低了磁盘争用的可能性。
ORACLE有七个基本表空间:
SYSTEM表空间(存放数据字典和数据管理自身所需的信息)
RBS回滚表空间
TEMP临时表空间
TOOLS交互式表空间
USERS用户默认表空间
INDX索引表空间
DBSYS福数据表空间
不同的数据分别放在不同的表空间(数据字典与真实数据分开存放),在ORACLE里基表(存储系统参数信息)是加密存储,任何人都无法访问。只能通过用户可视视图查看。
SQL SERVER 存储结构
以页为最小分配单位,每个页为8K(不可控制,缺乏对页的存储情况的分析机制),
可将8个连续的页的组成一个‘扩展’,以进一步减少分配时所耗用的资源。(分配缺乏灵活性),在SQL SERVER里数据以表的方式存放,而表是存放在数据库里。
SQL SERVER有五个基本数据库:
master(数据字典)
mode(存放样版)
tempdb(临时数据库)
msdb(存放调度信息和日志信息)
pubs(示例数据库)
真实数据与数据字典存放在一起。对系统参数信息无安全机制。
ORACLE登入管理:
SYSTEM/MANAGER (初始帐户)
SYS/CHANGE_ON_NSTALL
INSTALL/ORACLE(安装帐户)
SCOTT/TIGER(示例数据库,测试用)
在ORACLE里默认只有三个系统用户,ORACLE是通过用户登入。
SQL SERVER登入管理:
SQL SERVER身份验证
WINDOWS 身份验证
在SQL SERVER里是通过WINDOWS用户帐户或是用SQL SERVER身份验证连接数据库的。
SQL不是一种语言,而是对ORACLE数据库传输指令的一种方式。
SQL中NULL既不是字符也不是数字,它是缺省数据。ORACLE提供了NVL函数来解决。
ORACLE中的字符串连接为 string1‖string2 ,SQL中为string1+string2.
集合操作:在SQL中只有UNION(并操作),ORACLE中包含MINUS(差操作)、
INTERECT(交操作)、UNION(并操作)。
索引:SQL的索引分为聚集索引和非聚集索引,还包括全文索引;
ORACLE的索引包括:B+树索引,Bitmap位图索引,函数索引,反序索引,
主键索引,散列索引,本地索引。
ORACLE的数据类型比较复杂,有基本数据类型,衍生型,列对象型,表对象型,结构体型;SQL中的数据比较简单,只有一些简单的基本数据类型无法提供事务操作。
在SQL中如果一个事务从开始执行到结束时了错了,它就会回滚到开始之前;
在ORACLE中它采用的是定点回滚,就是该事务函数化和精确错误定位,用savepoint标记保存点,用Rollback标记回滚错误的保存点。
在SQL中循环只有WHILE一种这用起来不灵活,在ORACLE中有多种循环(LOOP循环、WHILE循环、FOR循环)。
在SQL中游标的使用比较复杂,不能同时打开一个以上的游标,因为它只有一个全局变量@@Fast_statues而且声明游标也麻烦,关闭游标时也不清除内存的;ORACLE中游标是以提高速度全部统一的单项游标,可以允许多用户异步读取,而且声明比较简单,就一句declare cursor游标名 is select 语句就可以了。
容错机制:SQL中的错误机制比较复杂,没有提供错误描述;ORACLE中容错类型有三种,一个是预定义错误,一个是非预定义错误,一个是用户自定义,其中在自定义错误中它有两个是在SQL中不有的,那就是SQLCODE 错误号、SQLERRM错误描述。
文件体系结构:SQL中有.MDF(主要数据文件)、.NDF(扩展文件,可以有多个)、
.LDF(日志文件,可以有多个,存放在联机重做日志数据,这里的日志文件有一个缺点就是如果日志文件已填小巧玲珑的话,SQL将自动停止运行并等待人工干预,所以要经常监控日志的情况保证系统的稳定运行)。ORACLE中有.DBF(主要数据文件)、.RDO(日志文件,用来做灾难性的数据备份)、.CTL(控制文件,将数据库的物理文件映射到了数据字典中的逻辑表空间和连机重做日志文件上去,确保数据的一致性)、.ORA(参数文件)。
. SQL只能是本机备份本机的数据库,无法联机备份,而且备份压缩很低,占用了大量空间;ORACLE提供了7种备份机制,具有联机备份功能,有志门的备份机子。
Oracle的日志默认有3个,先写入1号日志,满了后再写入2号日志,2号满了再写入3号日志,3号满了后Oracle将自动备分1号日志的内容,然后清空后写入新的日志信息,且Oracle的日志有多路复用功能,我们可以为日志创建多个镜像,把相同的日志信息同时写入多个日志文件中,这样可以防止磁盘损坏造成的数据丢失。
SQL Server对每个数据库只能分配一个日志文件。且当日志填满后,日志将停止工作,等待人工干预,而无法自动重用。
Oracle的控制文件记录了数据库文件的物理位置和有效性,在每次打开Oracle系统都将自动对数据进行验证,查看其有效性,防止数据的丢失,这体现了Oracle对数据管理的严密性。
SQL Server无此安全机制,只用在使用到了数据库的信息后,系统才去查找数据是否存在。
Oracle的参数文件init.ora是可调的,既我们可以根据数据库的规模调整Oracle对系统资源的使用情况,以达到最合理的资源分配,让Oracle达到最佳的性能。
SQL Server的配置参数是内定的不可调整,它对系统资源的分配是固定的,不受拥护控制,因此无法同时处理大量用户的需求,这限制了它只能作为中,小型数据库。
Oracle以块为最小存储单位,以区为单位分配空间,用户可以根据需要自己定义块的大小,且区可以按等额或递增进行分配,这可以大大减少系统的I/O操作提高数据库的性能。
SQL Server中以页为单位或使用扩展类型以8页为一单位进行空间分配而无法人工干预,当遇到频繁存储或大数据量存储时,系统将频繁进行I/O操作使工作效率低下。
Oracle中的SQL语句书写规范且提供了完整的函数和数据类型。Oracle提供了健全的错误机制,用户可以轻松的获得错误位置和错误原因而加以修改。用户还可以自己定义所须的错误类型,用以检查逻辑错误。Oracle中对数据类型的转换和游标的定义也十分方便。因此,我们对代码的书写和维护也比SQL Server方便许多。
SQL Server使用类C语言,不易维护和查看代码。SQL Server包含的数据类型太少,无法定义结构体,数组,对象。SQL Server无法定义流程机制,类型转换也极不方便,SQL Server中对游标定义十分复杂,且当用户定义的多个游标同时打开时系统却只有一个游标变量,这是SQL SERVER中一个严重的缺陷。
ORACLE中用户可以根据数据需要在创建块时定义填充因子(空闲空间的百分比)和复用因子(当块的存储数据所占的空间下降到这个百分比之下时,块才重新标记为可用)。用户可以根据记录变化频率和数据量的大小设置合适的填充因子和空闲因子。
SQL SERVER只有填充因子,而它的定义与ORACLE刚好相反,它定义的是剩余可用空间的百分比。而SQL SERVER中没有复用因子,当页中数据低于填充因子,但剩余的空间已经不可能再插入新的数据,但页还是标记为可用的,当系统要写入新数据都要访问这个页而浪费时间,这种页称为废页,将使系统插入新数据时浪费大量时间查找可用的页。
ORACLE在创建表时用户可以精确定义数据存放的表空间,甚至可以把一张表分开存放在多个表空间中,这样可以将数据量庞大的表按某些字段分开存放,这将给查询带来极高的效率。
⑷ Oracle管理员用户是什么
Oracle管理员用户是数据库管理员,是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称;
DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。
在国外,也有公司把DBA称作数据库工程师(Database Engineer),两者的工作内容基本相同,都是保证数据库服务7*24小时的稳定高效运转,但是需要区分一下DBA和数据库开发工程师(Database Developer):
1) 数据库开发工程师的主要职责是设计和开发数据库管理系统和数据库应用软件系统,侧重于软件研发;
2) DBA的主要职责是运维和管理数据库管理系统,侧重于运维管理。
(4)oraclesql编写规范扩展阅读:
DBA负责了业务数据库从设计、测试到部署交付的全生命周期管理,各个阶段的职责包括:
1. 产品发布前
这个阶段DBA的职责是数据库准入,主要包括:
1)产品的业务熟悉;
2)产品数据库设计评审:包括架构的合理性评估,存储容量和性能是否满足需求,是否需要缓存,是否需要冗余备份等,同时需要提供数据库schema设计的合理性建议以使产品能够满足上线发布并稳定运行的基本要求;
3)资源评估,包括所需的服务器资源、网络资源以及资源的分布等,同时把关产品对资源预算申请的合理性,控制服务成本;
4)资源就位,将申请的服务器及基础环境/域名准备就位。
⑸ 如何写SQL语句,对于日期字段赋值,如我要在GXSJ字段是赋上2011-02-11
sql server :update tb set GXSJ='2011-02-11'; MYSQL也可以这样
理由是因为'2011-02-11'是规范的日期格式
oracle 有点特别,一般保险写法是这样的:
update tb set GXSJ=to_date('2011-02-11','YYYY-mm-dd');
⑹ oracle一行数据根据固定规则求多行,如下例,如何写SQL
创建数据表,数据
createtabletest
(idint,
namevarchar2(10),
ageint,
begin_timedate,
end_timedate);
insertintotestvalues(1,'明',10,to_date('2018-05-01','yyyy-mm-dd'),to_date('2018-05-03','yyyy-mm-dd'));
insertintotestvalues(2,'刚',15,to_date('2018-05-01','yyyy-mm-dd'),to_date('2018-05-05','yyyy-mm-dd'));
insertintotestvalues(3,'强',20,to_date('2018-05-01','yyyy-mm-dd'),to_date('2018-05-10','yyyy-mm-dd'));
commit;
执行:
withtas
((SelectTO_DATE('2018-05-0100:00:00','YYYY-MM-DDHH24:MI:SS')+rownum-1As日期
FromDual
ConnectByRownum<TO_DATE('2018-05-3023:59:59','YYYY-MM-DDHH24:MI:SS')-TO_DATE('2018-05-0100:00:00','YYYY-MM-DDHH24:MI:SS')+1))
selecta.id,a.name,a.age,t.日期fromtesta,twheret.日期betweena.begin_timeanda.end_time
结果:
另外,你自己的日期的表里,弄4月份数据干啥?你test表里的日期明明都是5月的
⑺ 大家写SQL语句,使用oracle语法还是SQL99语法呢
每种DBMS都基本遵循SQL规范,但同时又有他们自己的方言,这都是要遵守的。
⑻ Oracle完全学习手册的图书目录
第一篇 Oracle基础篇
第1章 Oracle关系数据库 1
1.1 关系数据模型 1
1.1.1 二维表 1
1.1.2 关系术语 2
1.1.3 关系数据模型的特点 3
1.2 关系数据库 4
1.2.1 关系操作 4
1.2.2 关系的完整性 4
1.3 关系数据库规范化理论 6
1.3.1 函数依赖 6
1.3.2 范式理论 7
1.4 数据库设计 8
1.4.1 实体-关系模型 9
1.4.2 E-R图的绘制 9
1.4.3 将E-R数据模型转化为关系模式 10
1.5 Oracle应用系统结构 11
1.5.1 单磁盘独立主机结构 11
1.5.2 多磁盘独立主机结构 11
1.5.3 多数据库独立主机结构 12
1.5.4 Oracle客户/服务器系统结构 12
1.5.5 Oracle浏览器/服务器系统结构 13
1.5.6 Oracle分布式数据库系统结构 14
1.6 安装Oracle 11g 15
1.6.1 在Windows环境下的安装过程 15
1.6.2 查看Oracle系统 21
1.7 创建数据库 21
1.8 Oracle默认用户 26
1.9 使用OEM 27
第2章 Oracle体系结构概述 31
2.1 物理存储结构 31
2.1.1 数据文件 31
2.1.2 控制文件 33
2.1.3 重做日志文件 34
2.1.4 其他文件 35
2.2 逻辑存储结构 35
2.2.1 表空间 36
2.2.2 段 36
2.2.3 区 37
2.2.4 块 37
2.3 Oracle进程结构 38
2.3.1 进程结构概述 39
2.3.2 DBWn进程 39
2.3.3 LGWR进程 41
2.3.4 CKPT进程 41
2.3.5 SMON进程 42
2.3.6 PMON进程 42
2.3.7 ARCn进程 42
2.3.8 RECO进程 43
2.3.9 LCKn进程 43
2.3.10 Dnnn进程 43
2.3.11 SNPn进程 44
2.4 Oracle内存结构 44
2.4.1 内存结构概述 44
2.4.2 系统全局区 45
2.4.3 程序全局区 46
2.4.4 排序区 46
2.4.5 大池 47
2.4.6 Java池 47
2.5 数据字典 47
2.5.1 Oracle数据字典介绍 47
2.5.2 Oracle常用数据字典 48
第3章 使用SQL*Plus 51
3.1 SQL*Plus的主要功能 51
3.2 SQL*Plus连接数据库 51
3.2.1 启动SQL*Plus 51
3.2.2 从命令行启动SQL*Plus 53
3.2.3 断开数据库连接 54
3.3 查看表结构 54
3.4 编辑SQL语句 55
3.5 保存、检索并运行文件 56
3.6 使用SQL*Plus格式化查询结果 58
3.6.1 格式化列 58
3.6.2 设置页面大小 59
3.6.3 设置行大小 60
3.6.4 清除列格式 60
3.7 使用变量 61
3.7.1 临时变量 61
3.7.2 已定义变量 63
3.8 创建简单报表 65
3.8.1 在脚本中使用临时变量 65
3.8.2 在脚本中使用已定义变量 66
3.8.3 向脚本中的变量传递值 66
3.8.4 添加页眉和页脚 67
3.8.5 计算小计 68
第4章 表空间 70
4.1 管理基本表空间 70
4.1.1 表空间管理类型 70
4.1.2 创建基本表空间 72
4.1.3 修改表空间 79
4.2 临时表空间 85
4.2.1 创建临时表空间 85
4.2.2 修改临时表空间 86
4.2.3 临时表空间组 87
4.3 大文件表空间 88
4.4 非标准数据块表空间 90
4.5 撤销表空间 91
4.5.1 管理撤销表空间的方式 91
4.5.2 创建和管理撤销表空间 92
第5章 管理控制文件与日志文件 97
5.1 管理控制文件 97
5.1.1 控制文件的概述 97
5.1.2 创建控制文件 98
5.1.3 管理与维护控制文件 101
5.1.4 查询控制文件信息 104
5.2 管理日志文件 105
5.2.1 日志文件的概述 105
5.2.2 创建日志文件组及其成员 106
5.2.3 管理日志文件组及其成员 107
5.2.4 查看日志文件信息 110
5.3 管理归档日志 111
5.3.1 归档日志的概述 111
5.3.2 设置数据库模式 112
5.3.3 设置归档目标 113
5.3.4 设置归档进程的跟踪级别 114
5.3.5 查看归档日志信息 115
第6章 表 117
6.1 创建表 117
6.1.1 创建表的策略 117
6.1.2 使用SQL语句创建表 118
6.1.3 指定表空间 123
6.1.4 指定存储参数 124
6.1.5 设置数据块管理参数 125
6.1.6 指定重做日志 127
6.1.7 指定缓存 128
6.1.8 通过OEM创建表 129
6.2 修改表 131
6.2.1 增加和删除列 131
6.2.2 更新列 133
6.2.3 重命名表 135
6.2.4 改变表的存储表空间和存储
参数 136
6.2.5 删除表定义 137
6.3 完整性约束 137
6.3.1 约束的分类和定义 138
6.3.2 NOT NULL约束 138
6.3.3 PRIMARY KEY约束 140
6.3.4 UNIQUE约束 142
6.3.5 CHECK约束 143
6.3.6 FOREIGN KEY约束 144
6.3.7 禁止和激活约束 147
6.3.8 验证约束 149
6.3.9 延迟约束 150
6.3.10 查询约束信息 151
6.4 分析表 152
第二篇 操作Oracle篇
第7章 SQL基础 157
7.1 SQL语言概述 157
7.1.1 SQL语言特点 157
7.1.2 SQL语言分类 158
7.1.3 SQL语句的编写规则 158
7.2 使用SELECT检索数据 159
7.2.1 使用FROM子句指定表 159
7.2.2 使用SELECT(必要元素)
指定列 160
7.2.3 使用WHERE子句指定行 160
7.2.4 使用ORDER BY子句
对行进行排序 164
7.2.5 使用GROUP BY子句
对行进行分组 166
7.2.6 使用HAVING子句过滤行组 167
7.2.7 组合使用WHERE、GROUP BY和HAVING子句 167
7.2.8 使用DISTINCT来检索
唯一的表列值 167
7.2.9 使用算术运算符 168
7.3 使用DML语句 169
7.3.1 使用INSERT语句插入表数据 169
7.3.2 使用UPDATE语句更新表数据 170
7.3.3 使用DELETE语句删除表数据 170
7.3.4 使用MERGE语句修改表数据 171
7.4 表的连接查询 173
7.4.1 简单连接 173
7.4.2 内连接 174
7.4.3 外连接 175
7.4.4 自连接 176
7.5 数据库事务 177
7.5.1 事务的提交和回滚 177
7.5.2 事务的开始与结束 178
7.5.3 设置保存点 179
7.5.4 事务的ACID特性 180
7.5.5 并发事务 180
7.5.6 事务锁 182
7.5.7 事务隔离级别 183
第8章 使用简单函数 185
8.1 使用单行函数 185
8.1.1 字符函数 185
8.1.2 数字函数 188
8.1.3 转换函数 190
8.1.4 正则表达式函数 192
8.2 使用聚合函数 195
8.3 日期时间处理函数 197
8.3.1 使用TO_CHAR()和TO_DATE()
转换时间值 198
8.3.2 使用时间值函数 199
第9章 子查询 202
9.1 子查询的类型 202
9.2 编写单行子查询 202
9.2.1 在WHERE子句中使用子查询 203
9.2.2 使用其他单行操作符 203
9.2.3 在HAVING子句中使用子查询 204
9.2.4 在FROM子句中使用子查询 205
9.2.5 常见查询错误 206
9.3 编写多行子查询 207
9.4 编写多列子查询 209
9.5 编写关联子查询 210
9.5.1 使用关联子查询 210
9.5.2 在关联子查询中使用EXISTS
和NOT EXISTS 211
9.6 编写嵌套子查询 212
9.7 编写包含子查询的UPDATE
和DELETE语句 213
第10章 高级查询 215
10.1 使用集合操作符 215
10.2 使用TRANSLATE()函数 218
10.3 使用DECODE()函数 219
10.4 使用CASE表达式 220
10.4.1 使用简单CASE表达式 220
10.4.2 使用搜索CASE表达式 221
10.5 层次化查询 222
10.5.1 示例数据 222
10.5.2 使用CONNECT BY和START WITH子句 223
10.5.3 使用伪列LEVEL 224
10.5.4 格式化层次化查询的结果 225
10.5.5 从非根节点开始遍历 226
10.5.6 在START WITH子句
中使用子查询 226
10.5.7 从下向上遍历树 227
10.5.8 从层次化查询中删除节点
和分支 227
10.5.9 在层次化查询中加入其他条件 228
10.6 使用扩展的GROUP BY子句 229
10.6.1 使用ROLLUP子句 229
10.6.2 使用CUBE子句 230
10.6.3 使用GROUPING()函数 231
10.6.4 使用GROUPING SETS子句 233
10.6.5 使用GROUPING_ID()函数 233
10.6.6 使用GROUP_ID()函数 236
第11章 PL/SQL基础 238
11.1 PL/SQL概述 238
11.1.1 PL/SQL语言特点 238
11.1.2 PL/SQL代码编写规则 238
11.2 PL/SQL结构 239
11.2.1 PL/SQL程序块 239
11.2.2 变量和类型 240
11.2.3 运算符与表达式 242
11.2.4 PL/SQL的注释 242
11.3 编写控制结构 243
11.3.1 条件分支语句 243
11.3.2 循环语句 245
11.3.3 GOTO和NULL 248
11.4 复合变量 249
11.4.1 %TYPE变量 249
11.4.2 %ROWTYPE变量 250
11.4.3 PL/SQL记录 251
11.5 PL/SQL集合 252
11.5.1 索引表 252
11.5.2 嵌套表 254
11.5.3 变长数组 256
11.5.4 PL/SQL记录表 258
11.5.5 集合方法 259
11.6 游标 262
11.6.1 游标基本操作 263
11.6.2 游标属性 264
11.6.3 参数化游标和隐式游标 266
11.6.4 使用游标更新或删除数据 267
11.6.5 游标FOR循环 268
11.6.6 使用游标变量 269
11.7 异常处理 271
11.7.1 预定义异常 271
11.7.2 用户自定义异常 274
11.7.3 异常函数 275
第12章 PL/SQL高级应用 277
12.1 存储过程 277
12.1.1 过程的基本操作 277
12.1.2 过程的参数传递 279
12.1.3 过程的参数模式 280
12.1.4 参数的默认值 282
12.2 函数 283
12.2.1 函数的基本操作 283
12.2.2 建立带参函数 285
12.3 程序包 287
12.3.1 包的基本操作 288
12.3.2 系统预定义包 289
12.3.3 私有过程和函数 290
12.3.4 使用包重载 291
12.3.5 使用包构造过程 293
12.4 触发器 296
12.4.1 触发器的类型 296
12.4.2 触发器的基本操作 297
12.4.3 语句触发器 298
12.4.4 触发器的新值和旧值 300
12.4.5 行触发器 301
12.4.6 INSTEAD OF触发器 304
12.4.7 系统事件触发器 305
第三篇 Oracle进阶篇
第13章 用户权限与安全 309
13.1 管理用户 309
13.1.1 创建用户 309
13.1.2 修改用户 312
13.1.3 删除用户 314
13.1.4 查看用户会话信息 314
13.2 用户配置文件 316
13.2.1 资源限制参数 316
13.2.2 口令限制参数 317
13.2.3 创建用户配置文件 318
13.2.4 管理配置文件 320
13.2.5 通过OEM管理配置文件 321
13.3 权限 323
13.3.1 权限的概述 323
13.3.2 系统权限 325
13.3.3 对象权限 328
13.3.4 查看权限信息 331
13.4 角色 333
13.4.1 角色的概述 333
13.4.2 系统预定义角色 333
13.4.3 创建角色 335
13.4.4 修改用户的默认角色 336
13.4.5 禁用和启用角色 337
13.4.6 修改角色 338
13.4.7 删除角色 338
13.4.8 查看角色信息 339
13.4.9 通过OEM管理角色 340
第14章 数据库审计 343
14.1 审计概述 343
14.1.1 审计及其作用 343
14.1.2 审计类型 344
14.1.3 启动数据库审计 345
14.2 语句审计 346
14.2.1 语句审计概述 346
14.2.2 使用语句审计 348
14.3 权限审计 349
14.4 对象审计 350
14.4.1 对象审计概述 350
14.4.2 使用对象审计 351
14.5 审计信息查询 353
14.6 细粒度的审计 355
第15章 其他模式对象 358
15.1 索引 358
15.1.1 索引类型 358
15.1.2 指定索引选项 361
15.1.3 创建B树索引 363
15.1.4 创建位图索引 364
15.1.5 创建反向键索引 364
15.1.6 创建基于函数的索引 365
15.1.7 管理索引 365
15.2 索引组织表 368
15.2.1 索引组织表与标准表 368
15.2.2 溢出存储 369
15.3 临时表 370
15.3.1 临时表的特点 370
15.3.2 临时表的类别 371
15.3.3 创建与使用临时表 371
15.4 外部表 373
15.4.1 创建外部表 373
15.4.2 处理外部表错误 375
15.5 分区表与分区索引 379
15.5.1 分区概述 379
15.5.2 创建分区表 380
15.5.3 建立分区表索引 384
15.5.4 管理分区表 386
15.6 簇与簇表 389
15.6.1 创建簇和簇表 389
15.6.2 创建簇索引 391
15.6.3 管理簇 391
15.7 视图 393
15.7.1 创建视图 393
15.7.2 可更新的视图 396
15.7.3 删除视图 399
15.8 序列 399
15.8.1 创建序列 399
15.8.2 修改序列 402
15.8.3 删除序列 402
15.9 同义词 403
第16章 数据库对象类型 404
16.1 对象类型简介 404
16.2 创建对象类型 404
16.2.1 创建简单对象类型 405
16.2.2 创建带有函数的对象类型 406
16.3 获取对象类型信息 408
16.4 在数据库表中使用对象类型 409
16.4.1 列对象 409
16.4.2 对象表 411
16.4.3 对象标识符和对象引用 414
16.4.4 比较对象值 417
16.5 在PL/SQL中使用对象类型 419
第17章 大对象 424
17.1 大对象(LOB)简介 424
17.2 包含大对象的表 425
17.2.1 包含CLOB数据列的表 425
17.2.2 包含BLOB数据列的表 426
17.2.3 包含BFILE数据列的表 427
17.3 在PL/SQL中使用大对象 429
17.3.1 APPEND() 429
17.3.2 CLOSE() 431
17.3.3 COMPARE() 432
17.3.4 COPY() 433
17.3.5 CREATETEMPORARY() 434
17.3.6 ERASE() 435
17.3.7 FILECLOSEALL() 436
17.3.8 FILEEXISTS() 436
17.3.9 FILEGETNAME() 437
17.3.10 FREETEMPORARY() 438
17.3.11 GETCHUNKSIZE() 439
17.3.12 GET_STORAGE_LIMIT() 439
17.3.13 GETLENGTH() 439
17.3.14 INSTR() 440
17.3.15 ISOPEN() 441
17.3.16 ISTEMPORARY() 441
17.3.17 LOADBLOBFROMFILE() 442
17.3.18 LOADCLOBFROMFILE() 442
17.3.19 OPEN() 444
17.3.20 READ() 445
17.3.21 SUBSTR() 446
17.3.22 TRIM() 447
17.3.23 WRITE() 447
17.3.24 WRITEAPPEND() 448
17.4 LONG和LONG RAW类型 448
17.4.1 包含LONG或LONG RAW
数据列的表 448
17.4.2 将LONG和LONG RAW数据列转
换为LOB 449
第18章 Oracle SQL语句优化 451
18.1 一般的SQL优化技巧 451
18.1.1 避免使用“*”替代所有列 451
18.1.2 用TRUNCATE代替DELETE 452
18.1.3 在确保完整性的情况下多用
COMMIT语句 453
18.1.4 减少表的查询次数 453
18.1.5 用EXISTS替代IN 453
18.1.6 用WHERE替代HAVING 454
18.1.7 使用“<=”替代“< 455
18.2 表的连接 456
18.2.1 选择FROM表的顺序 456
18.2.2 WHERE子句的连接顺序 456
18.2.3 使用表的别名 457
18.3 有效使用索引 458
18.3.1 使用索引的基本事项 458
18.3.2 避免对索引列使用NOT
关键字 458
18.3.3 避免对唯一索引列使用
IS (NOT) NULL 459
18.3.4 选择复合索引主列 459
18.3.5 监视索引是否被使用 460
第四篇 备份与恢复篇
第19章 用户管理的备份与恢复 461
19.1 数据库备份与恢复 461
19.1.1 数据库备份 461
19.1.2 数据库恢复 464
19.2 用户管理的备份 465
19.2.1 备份命令 466
19.2.2 完全数据库脱机备份 466
19.2.3 部分数据库脱机备份 468
19.2.4 部分数据库联机备份 469
19.2.5 备份控制文件 471
19.2.6 验证备份数据 472
19.3 用户管理的完全恢复 473
19.3.1 用户管理的完全恢复机制 473
19.3.2 非归档模式下的数据库恢复 475
19.3.3 归档模式下的数据文件恢复 477
19.3.4 在MOUNT状态下对
SYSTEM表空间恢复 478
19.3.5 在OPEN状态下对数据文件
进行恢复 480
19.3.6 在OPEN状态中恢复未备份的
数据文件 482
19.3.7 恢复控制文件 483
19.4 用户管理的不完全恢复 486
19.4.1 不完全恢复机制 486
19.4.2 基于时间的恢复 488
19.4.3 基于更改的恢复 492
19.4.4 基于撤销的恢复 496
第20章 使用RMAN工具 499
20.1 RMAN简介 499
20.1.1 RMAN的特点 499
20.1.2 RMAN组件 500
20.1.3 保存RMAN资料档案库 503
20.1.4 配置RMAN 504
20.1.5 RMAN的基本操作 509
20.2 RMAN备份 512
20.2.1 RMAN备份类型 512
20.2.2 BACKUP命令 514
20.2.3 增量备份 516
20.2.4 备份数据库 517
20.2.5 多重备份 521
20.2.6 镜像复制 522
20.3 RMAN恢复 523
20.3.1 RMAN恢复机制 524
20.3.2 数据库非归档恢复 525
20.3.3 数据库归档恢复 527
20.3.4 块介质恢复 528
20.3.5 移动数据文件到新的位置 529
20.3.6 基于时间的不完全恢复 530
20.3.7 基于撤销的不完全恢复 531
20.3.8 基于更改的不完全恢复 532
20.4 其他操作 533
20.4.1 数据字典 533
20.4.2 LIST命令 534
20.4.3 SHOW命令 536
20.4.4 REPORT命令 536
第21章 数据加载与传输 538
21.1 Data Pump工具 538
21.1.1 Data Pump工具的特点 538
21.1.2 与数据泵相关的数据字典视图 539
21.1.3 使用Data Pump工具前的准备 539
21.2 Data Pump Export工具 540
21.2.1 Data Pump Export选项 540
21.2.2 使用Data Pump Export 543
21.3 Data Pump Import工具 547
21.3.1 Data Pump Import选项 547
21.3.2 使用Data Pump Import 550
21.4 表空间的传输 553
21.5 SQL*Loader 556
21.5.1 SQL*Loader概述 556
21.5.2 数据加载实例 557
第22章 Oracle闪回技术 561
22.1 闪回技术概述 561
22.2 闪回表(Flashback Table) 562
22.2.1 闪回表概述 562
22.2.2 使用闪回表 563
22.3 闪回删除(Flashback Drop) 565
22.3.1 回收站概述 565
22.3.2 使用闪回删除 567
22.3.3 管理回收站 568
22.4 闪回版本查询(Flashback
Version Query) 571
22.4.1 闪回版本查询概述 571
22.4.2 使用闪回版本查询 572
22.5 闪回事务查询(Flashback Transaction Query) 573
22.5.1 闪回事务查询概述 574
22.5.2 使用闪回事务查询 575
22.6 闪回数据库(Flashback Database) 576
22.6.1 闪回数据库概述 576
22.6.2 使用闪回数据库 579
22.7 闪回数据归档(Flashback Data
Archive) 581
22.7.1 闪回数据归档概述 581
22.7.2 创建与管理闪回数据归档区 582
22.7.3 使用闪回数据归档 583
22.7.4 清除闪回数据归档区数据 587
第五篇 综合应用篇
第23章 酒店管理系统 589
23.1 系统分析与设计 589
23.1.1 需求分析 589
23.1.2 系统功能设计 590
23.2 数据库设计 590
23.2.1 创建数据表 590
23.2.2 视图设计 594
23.2.3 主键自增设计 595
23.3 公共模块设计 595
23.3.1 编写数据库连接类 595
23.3.2 封装常用的操作数据库的方法 597
23.3.3 DAO公共类 599
23.4 系统登录模块设计 600
23.4.1 设计登录窗体 601
23.4.2 用户名下拉菜单的实现 602
23.4.3 【登录】按钮的事件处理 602
23.5 用户管理模块设计 604
23.5.1 添加用户 604
23.5.2 删除用户 606
23.5.3 修改密码 607
23.6 收银结账模块设计 609
23.6.1 开单功能实现 609
23.6.2 签单功能实现 611
23.6.3 结账功能实现 612
第24章 个人论坛 615
24.1 系统分析与设计 615
24.1.1 需求分析 615
24.1.2 系统设计 615
24.2 数据库设计 616
24.2.1 用户表 616
24.2.2 版块表 617
24.2.3 帖子表 617
24.2.4 回复表 618
24.3 数据模型公共类 619
24.3.1 用户类 619
24.3.2 帖子和回复父类 619
24.3.3 帖子类 620
24.4 Dao实现 621
24.4.1 连接数据库 621
24.4.2 UserDao实现 623
24.4.3 BoardDao实现 625
24.4.4 ReplyDao实现 627
24.5 Web层实现 631
24.5.1 登录 631
24.5.2 主界面 633
24.5.3 帖子列表 635
24.5.4 回复帖子 637
24.5.5 修改回复 639
24.5.6 删除回复 640
第25章 日志管理模块 642
25.1 准备工作 642
25.1.1 安装Oracle客户端 642
25.1.2 配置客户端实例 646
25.1.3 使用Oracle Net Manager
查看配置 650
25.1.4 使用工具测试连接 653
25.1.5 使用.NET程序测试连接 655
25.1.6 使用图形界面测试 658
25.2 数据库设计 660
25.2.1 创建表 660
25.2.2 创建主键和触发器 661
25.3 通用模块 662
25.3.1 编写数据库类 662
25.3.2 制作模板 664
25.4 实现首页 667
25.4.1 制作页面布局 667
25.4.2 编写实现代码 670
25.4.3 显示日志分类 673
25.4.4 显示最新日志 675
25.5 日志分类管理 676
25.5.1 查看分类 676
25.5.2 修改分类 678
25.5.3 删除分类 680
25.5.4 添加分类 680
25.6 日志管理 681
25.6.1 查看日志列表 681
25.6.2 查看日志正文 682
25.6.3 管理日志列表 684
25.6.4 添加日志 685
25.6.5 修改日志 688
第26章 留言本 690
26.1 准备工作 690
26.1.1 创建Net服务名 690
26.1.2 安装扩展 692
26.1.3 测试连接 693
26.2 数据库设计 695
26.3 功能实现 695
26.3.1 显示留言 695
26.3.2 发表留言 698
26.3.3 回复留言 701
26.3.4 删除留言 703
⑼ Oracle开发艺术的目 录
第1章 大话数据库编程规范 1
1.1 编程规范概述 1
1.2 书写规范 2
1.2.1 大小写风格 2
1.2.2 缩进风格 2
1.2.3 空格及换行 3
1.2.4 其他 4
1.3 命名规范 4
1.3.1 表和字段命名规范 4
1.3.2 其他对象命名 5
1.4 变量命名 7
1.5 注释规范 8
1.6 语法规范 9
1.7 脚本规范 12
规则1.7.1 13
规则1.7.2 13
规则1.7.3 13
第2章 Oracle开发常用工具及使用 14
2.1 AWR工具与性能优化 14
2.1.1 AWR介绍 14
2.1.2 AWR的安装与配置 15
2.1.3 AWR报表使用 15
2.1.4 分析AWR报表基本思路 17
2.1.5 案例 17
2.2 SQL_TRACE事件 24
2.2.1 SQL_TRACE/事件是什么 24
2.2.2 总体流程介绍 24
2.2.3 SQL_TRACE事件具体使用方法 24
2.2.4 案例分析 28
2.2.5 小结 32
2.3 计时和剖析工具 32
2.3.1 PLSQL_PROFILER概述 34
2.3.2 剖析举例 37
2.3.3 安全性 45
第3章 探索MERGE方法 46
3.1 MERGE是什么 46
3.2 Oracle 10g中MERGE的完善 48
3.2.1 UPDATE和INSERT动作可只出现其一 48
3.2.2 可对MERGE语句加条件 48
3.2.3 可用DELETE子句清除行 49
3.2.4 可采用无条件方式INSERT 49
3.3 MERGE误区探索 49
3.3.1 无法在源表中获得一组稳定的行 49
3.3.2 DELETE子句的WHERE顺序必须在最后 51
3.3.3 DELETE 子句只可以删除目标表,而无法删除源表 52
3.3.4 更新同一张表的数据,需担心USING的空值 53
3.4 MERGE的巧妙运用 54
第4章 神秘的NULL和令人讨厌的CHAR 58
4.1 神秘的NULL 59
4.1.1 NULL概述 59
4.1.2 NULL与函数 64
4.1.3 NULL与索引 79
4.1.4 NULL与SQL 87
4.1.5 NULL与PL/SQL 97
4.1.6 再谈NULL和空字符串区别 101
4.1.7 NULL总结 101
4.2 令人讨厌的CHAR 102
4.2.1 CHAR与VARCHAR2基础 102
4.2.2 CHAR与SQL 105
4.2.3 CHAR与绑定变量 109
4.2.4 CHAR与PL/SQL 111
4.2.5 CHAR总结 112
第5章 报表开发之扩展GROUP BY 113
5.1 扩展GROUP BY概述 113
5.2 ROLLUP 114
5.2.1 UNION ALL实现ROLLUP功能 114
5.2.2 ROLLUP分组 116
5.2.3 部分ROLLUP分组 120
5.2.4 ROLLUP总结 121
5.3 CUBE 121
5.3.1 CUBE分组 121
5.3.2 部分CUBE分组 123
5.3.3 CUBE总结 124
5.4 GROUPING SETS实现小计 124
5.4.1 GROUPING SETS分组 124
5.4.2 部分GROUPING SETS分组 126
5.4.3 CUBE、ROLLUP作为GROUPING SETS的参数 126
5.4.4 GROUPING SETS总结 128
5.5 组合列分组、连接分组、重复列分组 128
5.5.1 组合列分组 130
5.5.2 连接分组 132
5.5.3 重复列分组 134
5.5.4 组合列分组、连接分组、重复列分组总结 134
5.6 3个扩展分组函数:GROUPING、GROUPING_ID、GROUP_ID 135
5.6.1 GROUPING函数 135
5.6.2 GROUPING_ID函数 138
5.6.3 GROUP_ID函数 142
5.6.4 扩展GROUP BY函数总结 144
5.7 扩展分组综合实例 144
第6章 探索Oracle自动类型转换 149
6.1 为什么不建议使用自动类型转换 150
6.2 自动类型转换规则 156
6.3 自动类型转换常见错误 166
第7章 Where in list问题解析 169
7.1 问题引入:动态SQL构造 170
7.2 使用正则表达式解决 172
7.3 使用常规字符串函数及动态视图 173
7.4 使用集合构造伪表 176
7.5 Where in list性能问题 178
7.6 Where in list问题总结 188
第8章 例说数据库表设计和大量数据处理方法 189
8.1 根据业务需求规划表结构 189
8.2 主键的确定 195
8.3 表的拆分、合并及数据的规范和反规范化 199
8.4 数据类型的选择 199
8.5 表的分区 203
8.6 表的压缩 203
8.7 抽取数据 205
8.7.1 利用SQL*PLUS的SPOOL功能 205
8.7.2 利用UTL_FILE 207
8.7.3 利用第三方工具 207
8.8 转换数据 207
8.8.1 数据的增删改 208
8.8.2 数据汇总 211
8.9 加载数据 227
8.9.1 利用SQLLDR加载 227
8.9.2 利用外部表加载 229
8.9.3 利用数据库链接加载 233
8.9.4 利用分区交换技术加载 234
8.10 逻辑导入/导出数据 240
第9章 数据审核 242
9.1 审核的分类 242
9.2 列审核设计 243
9.2.1 直接使用SQL语句 245
9.2.2 提高审核效率 248
9.2.3 管理审核关系 254
9.2.4 单个列的复杂审核 257
9.3 行审核设计 258
9.3.1 重码的审核 259
9.3.2 直接使用SQL语句 260
9.3.3 管理审核关系 261
9.3.4 行间包含四则运算的审核思路 266
9.3.5 更复杂的行间审核思路 267
9.4 小结 267
第10章 趣谈Oracle分析函数 269
10.1 概述 269
10.2 函数语法 270
10.3 函数列表 276
10.4 函数用法 277
10.4.1 最常见的分析函数应用场景 279
10.4.2 ROWS的具体用法 280
10.4.3 RANGE的具体用法 281
10.4.4 KEEP的用法 283
10.5 函数功能详解 284
10.5.1 统计函数 284
10.5.2 排序函数 285
10.5.3 数据分布函数 287
10.5.4 统计分析函数 289
10.6 分析函数在BI及统计上的应用 290
10.6.1 现状分析 290
10.6.2 发展分析 297
10.7 自定义聚集函数 298
10.7.1 自定义聚集函数接口简介 298
10.7.2 应用场景一:字符串聚集 299
10.7.3 应用场景二:指数移动平均线 301
第11章 Oracle层次查询 305
11.1 概述 305
11.2 样例数据 306
11.3 CONNECT BY和START WITH查询 306
11.3.1 概述 306
11.3.2 基本语法 306
11.3.3 样例 308
11.4 SYS_CONNECT_BY_PATH函数 313
11.5 WMSYS.WM_CONCAT非公开函数 314
第12章 号段选取应用 316
12.1 问题的提出 316
12.2 相关基础知识 317
12.2.1 伪列rownum和level 317
12.2.2 利用层次查询构造连续的数 317
12.2.3 用lead和lag获得相邻行的字段值 318
12.3 解决问题 320
12.3.1 已知号码求号段 320
12.3.2 根据号段求出包含的数 324
12.3.3 求缺失的号 326
12.3.4 求尚未使用的号段 330
12.4 小结 334
第13章 分析SQL执行计划的关注点 335
13.1 返回行与逻辑读的比率 335
13.2 聚合查询 338
13.3 返回行的数量 341
13.4 Oracle预测行准确与否 342
13.5 Predicate Information 346
13.6 动态采样 348
13.7 谁是主要矛盾 349
第14章 Oracle开发误区探索 352
14.1 避免对列运算 352
14.2 消除隐式转换 354
14.3 关注空格 354
14.4 存储过程与权限 355
14.5 提防DDL提交事务 357
14.6 Insert into 错误 359
14.7 关于or 360
14.8 sequence中的cache 361
14.9 树形查询易错处 364
14.10 小心保留字 367
14.11 函数索引陷阱 371
14.12 外连接陷阱 374
14.13 标量子查询 375
第15章 提升PL/SQL开发性能漫谈 378
15.1 重视解析 378
15.1.1 触发器尽量考虑内部代码过程封装 378
15.1.2 避免动态SQL 380
15.1.3 OLTP系统中尽量使用绑定变量 382
15.2 关注调用 384
15.2.1 减少对sysdate的调用 384
15.2.2 避免对mod函数的调用 385
15.2.3 设法减少表扫描次数 386
15.2.4 避免SQL中的函数调用 391
15.3 简洁为王 395
15.3.1 尽量用简单SQL替代PL/SQL逻辑 395
15.3.2 避免不必要的排序 397
15.3.3 利用Oracle现有功能 399
15.4 细致入微 400
15.4.1 使用pls_integer类型 400
15.4.2 避免数据类型转换 400
15.4.3 IF的顺序有讲究 402
15.4.4 设计开发对列是否为空慎重决定 404
15.4.5 分布式应用开发不可不知的HINT(driving_site) 407
第16章 管道函数的学习与实战应用 410
16.1 管道函数编写要点 410
16.2 功能描述及案例 411
16.2.1 可直接用TABLE()操作符方式输出结果集 411
16.2.2 结果集可作为表来使用,直接和其他表相关联 411
16.2.3 实现实时跟踪 412
16.3 管道函数注意点 414
16.3.1 清楚管道函数只是表函数的一种 414
16.3.2 管道函数与DML 415
16.3.3 管道函数集合的限制 416
16.3.4 与管道函数相关的异常NO_DATA_NEEDED 417
第17章 巧用锁特性避免重复启动同一程序 420
17.1 基本技巧介绍 420
17.2 原理介绍 422
17.3 程序代码 423
17.4 测试 426
17.5 需要注意的点 427
第18章 11g R2 新特性之递归with编程精粹 428
18.1 上下级关系 429
18.2 构造数列 435
18.3 排列组合问题 441
18.4 沿路径计算 457
18.5 国际SQL挑战赛 473
第19章 不可能的任务?超越Oracle 479
19.1 为何选择cube 480
19.1.1 cube简介 480
19.1.2 cube优势 480
19.1.3 测试环境 481
19.2 newkid的设计思路和优化步骤 482
19.2.1 一次扫描求出16种分组 482
19.2.2 一次扫描求出1种分组,并基于此再一次扫描求出其余分组 484
19.2.3 一次扫描求出1种分组,并基于此再多次分层累计求出其余分组 485
19.2.4 变量长度和类型的优化 487
19.3 为何选择OCI 488
19.3.1 汇总算法的翻译和改进 488
19.3.2 输入和输出的实现和改进 489
19.3.3 不要忽视物理存储对数据库操作的影响 490
19.3.4 不成功的优化教训 490
19.4 总结 493
第20章 动态SQL扩展 494
20.1 动态SQL用途和应用场景 494
20.2 EXECUTE IMMEDIATE语法 495
20.2.1 执行DDL、DCL语句 495
20.2.2 构造通用SQL处理 496
20.2.3 执行复杂业务逻辑查询 498
20.2.4 绑定变量 502
20.2.5 BULK COLLECT动态SQL 505
20.3 使用DBMS_SQL包 507
20.3.1 DBMS_SQL函数和过程说明 507
20.3.2 DBMS_SQL执行步骤 508
20.3.3 DBMS_SQL应用场景 509
20.3.4 DBMS_SQL与EXECUTE IMMEDIATE比较 509
后记 511
⑽ 数据库管理员工作的基本职责说明
数据库管理员负责各系统数据的灾备工作,研究事务所的数据和信息安全。下面是我整理的数据库管理员工作的基本职责说明。
数据库管理员工作的基本职责说明1
职责
1、负责数据库管理系统的运维管理,完成数据库安装、监控、备份、测试、恢复等基本工作,从而保证数据库管理系统的稳定性、安全性和高性能;
2、监视监控数据库的警告日志,定期做备份审查、归档和删除;
3、监控数据库的日常会话情况,及时发现异常会话进程并积极采取有效处理措施予以解决,从而避免对业务运营造成影响;
4、监控数据库的碎片和剩余表空间情况,及时掌握表空间的扩展速度以及剩余空间分布情况,根据变化动态调整数据库的存储方案以优化资源使用;若有需要提前做出存储介质扩容的方案规划和未来存储需求计划;
5、关注数据库管理系统SQL Server版本的升级信息和与SQL Server相关的漏洞补丁信息,在测试环境中确认不会对业务运营造成影响的前提下实施生产环境下的SQL Server版本升级和补丁补漏,并对整个升级补漏过程进行监控和日志审查,确认升级补漏真正成功完成;
6、制定数据库备份计划,制定灾难恢复计划中的数据恢复相关要求并定期演练,确保灾难出现时能对数据库数据进行有效恢复;
7、对数据库的备份策略要根据业务要求和实际情况进行更改,对数据库的日常备份作业执行进行监控和状态确认,对数据库的备份数据进行验证和介质存放管理,与数据库的设计厂商保持联络和维持技术沟通;
8、制定数据库用户管理要求,建立数据库底层结果和访问模型,制定数据库性能监控标准和指标;对通过数据库管理系统进行的任何针对数据库对象的更改进行统一管理;
9、使用SQL语句对数据库进行管理维护和性能优化;
10、当发现不同用户需求之间互相抵触进而造成进程死锁时,进行处理的同时协助相关人员协调用户需求,配合应用系统的数据库设计人员对系统资源进行合理分配;
11、负责数据库管理系统的管理用户批准和其对应的管理权限设置,采取措施防止数据库被未经授权的访问和破坏;
12、协助有关部门配合相关岗位完成U9系统的项目实施和应用升级、治木软件系统的项目实施和应用升级;
13、完成信息部经理交代的有关任务,协助公司各部门完成相关的工作;
任职要求
1、本科以上学历,计算机相关专业,具备专业的计算机应用知识,年龄不限,性别不限,有SQL Server认证者(MCSA)优先;
2、熟悉SQL Server数据库平台下的数据备份/数据恢复,了解数据库性能监控和优化,掌握SQL代码编写,对数据库安全性有一定认识,理解数据库设计,理解索引设计、索引维护和查询引擎, 懂得容量监控与规划;
3、思维清晰,具备优秀的沟通理解能力;逻辑推算及动手能力强,有独档一面的工作能力,且能承受较大的工作压力;
数据库管理员工作的基本职责说明2
职责:
1.负责数据库的安装配置及升级改造,性能监控及优化,故障诊断和排除,数据迁移,数据库备份、复制、镜像等容灾方案的制定和实施,以及数据库的安全管理、帐户权限管理;
2.维护线上业务核心数据库的7*24安全、稳定运行;
3.负责数据库的架构规划、评估、实施,实现高可用、可扩展架构;
4.熟悉MySQL的运行机制和体系架构, 精通/熟悉SQL,熟悉数据库设计与优化;
5.对数据库新增内容进行数据分析和挖掘;
任职要求:
1.熟悉数据库管理工具,如Navicat等轻量化管理工具;
2.熟练使用MySql,Oracle等数据库相关工具;
3.参与MYSQL脚本管理、SQL Advisor、数据质量管理等工具与平台的开发与实现;
4.至少熟悉java或Python中的一种开发语言
数据库管理员工作的基本职责说明3
职责:
1、负责公司数据库日常运行监控、管理和性能分析,并进行故障处理和优化。
2、快速处理解决数据库系统运行中出现的故障和问题,保证业务数据安全、可用;
3、负责Oracle数据库的日常运行维护、备份恢复、升级优化、扩容迁移和安全管理工作;
4、为架构/开发团队提供Oracle数据库相关的技术支持服务,包括对象设计、SQL编写规范制定、指导、审核等;
5、负责Oracle数据库平台架构和高可用方案的规划设计工作,并通过分析业务发展趋势,做出相应的容量规划;
6、负责Oracle数据库的业务数据分析与挖掘、性能分析与系统优化、问题跟踪与管理;
7、负责系统软、硬件的部署、监控以及调优,包括 JVM 的调优、中间件调优、底层硬件设备的优化;
8、撰写并维护工作相关的数据库设计文档;
任职要求:
1、计算机或者相关专业本科毕业,5年以上ORACLE数据库维护和优化经验;
2、有大型在线交易系统和企业应用系统(例如:ERP、SRM、WMS等)数据库规划设计和优化经验;
3、熟练安装搭建数据库服务器及集群系统、双机热备,包括SQL Server和Oracle;
4、精通 Oracle数据库原理和运行机制,具有丰富的管理与调优经验;
5、精通RAC、Data Guard、OGG配置管理以及故障排除;
6、熟悉linux ,AIX环境下数据库运行维护;熟悉VERITAS SF文件系统;
7、精通Oracle数据库11g/12c分库,分表,SQL解析,数据路由等。
8、为人正直,工作责任心强,良好的沟通和为人处事的能力、良好的团队合作精神;
9、持有OCP证书;
10、拥有Ansible、python经验者或拥有OCM等证书者优先考虑。
数据库管理员工作的基本职责说明4
职责:
1、负责公司数据库架构规划、容量规划、系统调优;
2、负责数据库日常运维、故障处理,备份恢复、性能调优及补丁升级等;
3、规划、设计、评审和优化数据库设计方案;
4、配合研发制定数据库技术方案,分库分表策略,数据迁移方案 ;
5、指导开发人员完成数据库建模、数据库索引优化,数据库操作语句优化;
任职要求:
1、计算机相关专业本科及以上学历;
2、五年以上DBA相关经验;
3、精通MySQL数据库的在Linux下的安装布署、开发维护、管理及性能调优;
4、熟悉MySQL存储引擎InnoDB、能够进行SQL语句和读写分离的优化分析/设计,并具有高并发下读写分离维护经验。;
5、熟悉MySQL事务和锁,能进行锁分析和分析优化;
6、熟悉其他至少两种关系型数据库SQL Server/Oracle/Postgresql;
7、熟悉ETL概念及过程,有一定的存储过程或ETL相关的开发经验;
8、熟悉Linux,熟悉脚本编写,有自动化经验;掌握至少一门脚本语言(Shell、Python、Perl);
9、熟悉java开发优先考虑。
10、熟悉NoSql优先考虑。
数据库管理员工作的基本职责说明5
职责:
1、负责系统数据库(Oracle、Mysql为主)的数据库规划、部署、优化、故障排查;日常运维及管理工作;
2、负责数据库的存储规划管理,协助系统规划设计、防火墙等网络安全设备的安装调试、故障排除、安装、配置、升级与迁移;
3、负责公司项目数据备份策略制定、实施等相关信息安全工作;
4、负责制定和实施数据库备份恢复策略;
5、负责数据库监控,性能检查和优化工作;
6、负责诊断、故障检测和解决任何数据库相关的问题,配合其他数据库相关管理和维护工作。
7、配合开发人员及其他项目组开展日常技术支持、故障排查、系统日常维护
任职资格:
1、熟悉数据库结构设计,对系统架构和数据库理论有较好的理解;
2、熟悉Oracle或Mysql数据库体系结构和性能优化;
3、熟悉SQL优化原理,具备较好的SQL优化能力;
4、熟悉一种或者多种主流的UNIX/LINUX系统;