- 浏览: 1361802 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
第一章 开发成功的Oracle应用
1.1我的方法
以数据库为中心
#如果可能尽量用一条sql完成工作
#如果无法用一条sql完成,就通过pl/sql实现
#如果PL/SQl也无法完成(因为他缺少一些特性,比如列出目录中的文件),可以试试java 存储过程
1.2黑盒方法
构建数据库应用的使用,最重要的软件就是数据库.
数据库是一个工具,无所什么工具,如果使用不当都会带来灾难。
位图索引:
位图索引一个键指向多行,如果更新一个位图索引键,那么这个键指向的数百条记录会与你实际更新的那一行都被有效锁定。(位图索引更适合不被频繁更新的低基数的列)
项目80%---90%的调优都是在应用级完成的,而不是在数据库级。
1.3开发数据应用的正确(不正确)方法
1.3.1 了解ORACLE体系结构
在Oracle中使用一个连接
在oracle中无论你想执行1个查询还是100个查询,都希望打开至多一个的连接.而sql server对想要执行的每条并发语句都打开一个数据库连接.
在非Datacenter版本的Windows中,windows的单进程体系结构会限制Oracle数据库服务器中只能使用大约1.75GB的RAM.
使用绑定变量
Oracle将已解析,已编译的SQL连同其他内容存储在共享池(Shared pool)中,这是SGA(System Global Area)中一个非常重要的共享内存结构.
重用已解析的查询计划 --- 软解析
解析包含有硬编码变量的语句 --- 硬解析
1.3.2 理解并发控制
实现锁定
Oracle锁定策略的总结:
#Oracle只在修改时才对数据加行级锁.正常情况下不会升级到块级锁或表级锁.
#如果只是读数据,Oracle绝不会对数据锁定.不会因为简单的读操作在数据行上的锁定.
#写入器不会阻塞读取器.读不会被写阻塞.
#写入器想写某行数据,但另一个写入器已经锁定了这行数据,此时该写入器才会被阻塞..
读取器绝对不会阻塞写入器.
防止丢失更新
使用select for update锁定数据行,把并行的操作控制成串行的.
1.3.3 多版本
$读一致查询:对于一个时间点,查询会产生一致的结果.
$非阻塞查询:查询不会被写入器阻塞.
多版本和闪回
Oracle会保证打开的结果集肯定是以下两个时间点之一的当前结果集:
$游标打开时的时间点.这是READ COMMITTED隔离模式的默认行为,该模式是默认的 事务级别.
$查询所属事务开始的时间点.这是READ ONLY和SERIALIZABLE隔离级别中的默认行为.
读一致性和非阻塞读
Oracle使用的事务机制:只要你修改数据,Oracle就会创建撤销(undo) 条目.这些undo条目写至undo段(撤销段,undo segment) .如果事务失败,需要撤销,Oracle就会从这个回滚段读取“之前”的映象,并恢复数据,除了使用回滚段数据撤销事务外,Oracle还会用它撤销读取快时对块所作的修改,使之恢复到查询开始前的时间点。
1.3.4 数据库独立性?
在oracle中null既不等于null,也非不等于null。而在SQL Server和Sybase中NULL等于NULL。
$DDL操作会阻碍可扩缩性
$DDL操作的速度往往不快
$DDL操作会提交事务
$PL/SQL的动态SQL没有静态SQL速度快。
标准的影响
SQL92标准的层次
#入门级
#过渡级
#中间级
动态SQL
级联DELECT以保证引用完整性
DATE和TIME数据类型
域
变长字符串
CASE表达式
数据类型之间的CAST函数
#完备级
连接管理
BIT串数据类型
可延伸的完整性约束
FROM子句中的导出表
CHECK子句中的子查询
临时表
防御式编程
生成唯一键
Oracle SEQUENCE数据库对象
Informix SERIAL数据类型
SYBASE & SQL Server IDENTITY类型。
Insert into t (pk,…) values (t_seq.NEXTVAL,…)
特性和功能
自治事务(autonomous transaction)可以实现父事务回滚,而审计记录依然保留。
简单地解决问题
确保一个用户在数据库中只有一个会话
Create profile one_session limit sessions_per_user 1
Alter user user_name profile one_session
Alter system set resource_limit=true
开放性
不管你使用什么数据库,都应该充分的加以利用。
1.3.5 “怎样能让应用运行的更快”
游标共享可能会改变应用的行为,不如直接使用绑定变量。
体系结构概述
2.1 定义数据库和实例
#数据库(database):物理操作系统文件或磁盘的集合。
#实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。
(一个实例在其生命周期内,至多只能装载和打开一个数据库。)
2.2 SGA和后台进程
2.3 连接ORACLE
专用服务器(dedicated server)
共享服务器(shared server)
2.3.1 专用服务器
在用户登录时,oracle总会为用户创建一个新的进程。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。
2.3.2 共享服务器
Oracle使用了一个或一组称为调度器(dispatcher,分派器)的进程,客户进程通过网络与一个调度器进程通信。调度器把客户请求放入SGA的请求队列,第一个空闲的共享服务器会得到这个请求,并进行处理,完成这个命令后,共享服务器会把响应放在原调度器的响应队列中。调度器一直在监视这个队列,如果有结构,就会把结构传给客户。
2.3.3 TCP/IP连接的基本原理
专用服务器连接:监听器会为连接创建一个专用服务器,这个进程继承了监听器建立的链接。
共享服务器连接:接收到连接请求后,监听器会从可用的调度器池中选择一个调度器进程。监听器会向客户返回连接信息,客户与信息中的调度器建立连接。
1.1我的方法
以数据库为中心
#如果可能尽量用一条sql完成工作
#如果无法用一条sql完成,就通过pl/sql实现
#如果PL/SQl也无法完成(因为他缺少一些特性,比如列出目录中的文件),可以试试java 存储过程
1.2黑盒方法
构建数据库应用的使用,最重要的软件就是数据库.
数据库是一个工具,无所什么工具,如果使用不当都会带来灾难。
位图索引:
位图索引一个键指向多行,如果更新一个位图索引键,那么这个键指向的数百条记录会与你实际更新的那一行都被有效锁定。(位图索引更适合不被频繁更新的低基数的列)
项目80%---90%的调优都是在应用级完成的,而不是在数据库级。
1.3开发数据应用的正确(不正确)方法
1.3.1 了解ORACLE体系结构
在Oracle中使用一个连接
在oracle中无论你想执行1个查询还是100个查询,都希望打开至多一个的连接.而sql server对想要执行的每条并发语句都打开一个数据库连接.
在非Datacenter版本的Windows中,windows的单进程体系结构会限制Oracle数据库服务器中只能使用大约1.75GB的RAM.
使用绑定变量
Oracle将已解析,已编译的SQL连同其他内容存储在共享池(Shared pool)中,这是SGA(System Global Area)中一个非常重要的共享内存结构.
重用已解析的查询计划 --- 软解析
解析包含有硬编码变量的语句 --- 硬解析
1.3.2 理解并发控制
实现锁定
Oracle锁定策略的总结:
#Oracle只在修改时才对数据加行级锁.正常情况下不会升级到块级锁或表级锁.
#如果只是读数据,Oracle绝不会对数据锁定.不会因为简单的读操作在数据行上的锁定.
#写入器不会阻塞读取器.读不会被写阻塞.
#写入器想写某行数据,但另一个写入器已经锁定了这行数据,此时该写入器才会被阻塞..
读取器绝对不会阻塞写入器.
防止丢失更新
使用select for update锁定数据行,把并行的操作控制成串行的.
1.3.3 多版本
$读一致查询:对于一个时间点,查询会产生一致的结果.
$非阻塞查询:查询不会被写入器阻塞.
多版本和闪回
Oracle会保证打开的结果集肯定是以下两个时间点之一的当前结果集:
$游标打开时的时间点.这是READ COMMITTED隔离模式的默认行为,该模式是默认的 事务级别.
$查询所属事务开始的时间点.这是READ ONLY和SERIALIZABLE隔离级别中的默认行为.
读一致性和非阻塞读
Oracle使用的事务机制:只要你修改数据,Oracle就会创建撤销(undo) 条目.这些undo条目写至undo段(撤销段,undo segment) .如果事务失败,需要撤销,Oracle就会从这个回滚段读取“之前”的映象,并恢复数据,除了使用回滚段数据撤销事务外,Oracle还会用它撤销读取快时对块所作的修改,使之恢复到查询开始前的时间点。
1.3.4 数据库独立性?
在oracle中null既不等于null,也非不等于null。而在SQL Server和Sybase中NULL等于NULL。
$DDL操作会阻碍可扩缩性
$DDL操作的速度往往不快
$DDL操作会提交事务
$PL/SQL的动态SQL没有静态SQL速度快。
标准的影响
SQL92标准的层次
#入门级
#过渡级
#中间级
动态SQL
级联DELECT以保证引用完整性
DATE和TIME数据类型
域
变长字符串
CASE表达式
数据类型之间的CAST函数
#完备级
连接管理
BIT串数据类型
可延伸的完整性约束
FROM子句中的导出表
CHECK子句中的子查询
临时表
防御式编程
生成唯一键
Oracle SEQUENCE数据库对象
Informix SERIAL数据类型
SYBASE & SQL Server IDENTITY类型。
Insert into t (pk,…) values (t_seq.NEXTVAL,…)
特性和功能
自治事务(autonomous transaction)可以实现父事务回滚,而审计记录依然保留。
简单地解决问题
确保一个用户在数据库中只有一个会话
Create profile one_session limit sessions_per_user 1
Alter user user_name profile one_session
Alter system set resource_limit=true
开放性
不管你使用什么数据库,都应该充分的加以利用。
1.3.5 “怎样能让应用运行的更快”
游标共享可能会改变应用的行为,不如直接使用绑定变量。
体系结构概述
2.1 定义数据库和实例
#数据库(database):物理操作系统文件或磁盘的集合。
#实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。
(一个实例在其生命周期内,至多只能装载和打开一个数据库。)
2.2 SGA和后台进程
2.3 连接ORACLE
专用服务器(dedicated server)
共享服务器(shared server)
2.3.1 专用服务器
在用户登录时,oracle总会为用户创建一个新的进程。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。
2.3.2 共享服务器
Oracle使用了一个或一组称为调度器(dispatcher,分派器)的进程,客户进程通过网络与一个调度器进程通信。调度器把客户请求放入SGA的请求队列,第一个空闲的共享服务器会得到这个请求,并进行处理,完成这个命令后,共享服务器会把响应放在原调度器的响应队列中。调度器一直在监视这个队列,如果有结构,就会把结构传给客户。
2.3.3 TCP/IP连接的基本原理
专用服务器连接:监听器会为连接创建一个专用服务器,这个进程继承了监听器建立的链接。
共享服务器连接:接收到连接请求后,监听器会从可用的调度器池中选择一个调度器进程。监听器会向客户返回连接信息,客户与信息中的调度器建立连接。
发表评论
-
exp和imp,oracle9i导出导入数据,数据库备份,创建用户,删除用户
2009-04-16 21:57 3656执行下面这句,是创建用户 create user testkk ... -
Oracle批量创建用户和导入导出的脚本
2008-12-26 10:36 2561-- 在cmd下执行 SELECT 'exp ' || ... -
DBMS_SESSION.SET_CONTEXT的使用及无效权限问题的解决
2008-12-26 10:34 3142ORA-01031: insufficient privile ... -
sys用户使用@连接符提示无效权限的错误ORA-01031:
2008-12-26 10:30 2854问题:有同事反映,新安装的数据库使用 conn sys/ora ... -
Oracle创建主键时处理重复数据的程序
2008-12-26 10:29 2278/**************************** ... -
Oracle10g安装过程中"无法确定主机的IP地址时产生该异常错误" :解决办法
2008-08-23 08:40 45811. Oracle10g安装过程中出现“无 ... -
Oracle to_date用法
2008-06-26 15:29 3539Oracle to_date用法 日期格式参数 含义说明 D ... -
Java学习常用网站收集
2008-05-14 17:22 3311有网友说Java学习需要官方网站,想一下,发现有些框架的官方网 ... -
ORACLE数据库命名编码规范
2008-05-13 22:37 2264我在“管理”的论坛找到了答案,谁还有更多的,请指教!!! * ... -
ADO&ADO.NET 读取 Oracle 数据集
2008-05-13 22:22 2316使用 ADO.NET 访问 Oracle 9i 存储过程 ht ... -
通过批处理文件启动Oracle服务
2008-05-13 22:16 2195自己家里的机子配置不高,所有Oracle服务都是手动启动、关闭 ... -
Oracle常用及非常用函数
2008-05-12 17:11 5865感于总有些网友提出一 ... -
Oracle 9i的闪回查询概述
2008-05-11 23:59 2557Oracle 9i的闪回查询概述 ... -
使用分析单
2008-05-11 23:41 1110分析函数计算基于行组的值,并可以用来实现rownum伪列表述的 ... -
使用伪列Rownum
2008-05-11 23:31 1632对员工表进行排序,之后显示工资最多的前3名。 这么简单的问题想 ... -
oracle-merge用法详解
2008-05-11 22:28 2259Oracle9i引入了MERGE命令,你能够在一个SQL语句中 ... -
Oracle 数据字典(2)
2008-05-11 19:21 1540创建表的SQL语句如下-- 创建数据表create table ... -
Oracle 数据字典(1)
2008-05-11 19:14 1987Oracle数据库字典介绍 Oracle数据字典是有表和 ... -
AFTER DELETE Trigger
2008-05-11 07:33 3419An AFTER DELETE Trigger means t ... -
Oracle中常见数据类型转换
2008-05-11 07:28 1699To | From | CH ...
相关推荐
"Oracle9i&10g编程艺术脚本"这个主题主要涵盖了这两代产品中的SQL语言、PL/SQL编程以及相关的数据库管理技巧。 1. SQL基础:SQL(结构化查询语言)是用于管理和处理关系数据库的标准语言。在Oracle9i和10g中,你...
本资源包"Oracle+9i&10g编程艺术.rar"聚焦于Oracle 9i和10g这两个版本,涵盖了数据库的设计、开发、管理和优化等多个方面。下面将对这两个版本的Oracle数据库进行详细的解析,并探讨其编程艺术。 Oracle 9i,全称为...
《Oracle 9i&10g 编程艺术》是一本专为数据库开发人员精心编写的经典技术书籍,它深入浅出地介绍了Oracle 9i和10g这两个版本的编程技术和最佳实践。Oracle数据库是全球广泛使用的数据库管理系统之一,尤其在企业级...
《Oracle9i&10g编程艺术》一书聚焦于Oracle数据库编程的深入解析,旨在为读者提供构建高效、稳定的应用程序所需的理论基础和技术实践。本书不仅覆盖了Oracle数据库的基础架构,还深入探讨了数据库编程的艺术,是...
《Oracle 9i & 10g编程艺术:深入数据库体系结构》是一本深受数据库管理员和开发者喜爱的经典著作。这本书全面地介绍了Oracle数据库的核心技术,包括数据库架构、SQL编程以及性能优化等方面的知识,旨在帮助读者深入...
《Oracle9i&10g;编程艺术》的读书笔记,针对每一章节的重点内容进行总结
这本书详细介绍了Oracle 9i和10g版本的数据库架构、编程技术和解决方案,对于深入理解Oracle数据库系统具有极高的价值。 在Oracle数据库中,9i(9th Interface)和10g(Grid Computing)是两个重要的里程碑版本。9i...
《Oracle 9i&10g编程艺术》是一本深入探讨Oracle数据库系统编程技术的专著,涵盖了这两个重要版本的数据库管理系统。Oracle 9i和10g在数据库技术领域具有里程碑式的意义,它们引入了许多创新特性,提升了数据库的...
### 《Oracle9i&10g编程艺术》学习心得 #### 一、前言 在深入探讨《Oracle9i&10g编程艺术》这本书的内容之前,有必要先对该书及作者进行简要介绍。该书由Thomas Kyte撰写,他是Oracle领域的权威专家之一,以其深厚...
《Oracle9i&10g编程艺术》是一本专为Oracle数据库开发者和管理员精心编写的指南,涵盖了这两个重要版本的数据库管理系统的关键技术和实践。Oracle9i和10g是Oracle数据库发展过程中的重要里程碑,它们引入了许多创新...
《Oracle 9i&10g编程艺术》是一本针对初学者的专业教程,旨在帮助读者逐步掌握Oracle数据库的使用和开发技巧。这本书深入浅出地介绍了Oracle 9i和10g版本的主要功能和特性,涵盖了数据库管理、SQL语言、PL/SQL编程...
《Oracle 9i&10g编程艺术:深入数据库体系结构》是一本专注于解析Oracle数据库核心技术的专著,尤其适合数据库管理员(DBA)、开发人员和高级用户阅读。该书通过对Oracle 9i和10g版本的深度剖析,揭示了数据库内部...
"Oracle 9i &10g编程艺术脚本"是一个集合,包含了这两个版本相关的各种脚本,旨在帮助用户更好地理解和掌握Oracle数据库的编程技巧。 1. **Oracle PL/SQL编程**: PL/SQL是Oracle数据库的内置编程语言,用于创建存储...
学习Oracle 的不妨一看 Oracle9i&10g编程艺术(第二章)