123
返回列表 发新帖
楼主: ninetailsfox

[参考文档] Adaptive Server Anywhere 7.0网上培训教材

[复制链接]
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442017金鸡报晓
日期:2017-01-10 15:33:11
21#
 楼主| 发表于 2007-11-13 23:09 | 只看该作者
Adaptive Server Anywhere 7.0网上培训教材


设置客户方


目标
§如何使用连接参数和连接字符串
§识别指定连接参数的方式
§识别用在连接参数中的关键字
§说明环境变量SQL CONNECT的功能
§解释嵌入式SQL应用如何建立连接
§解释ODBC应用如何建立连接
§识别ODBC的四个基本组成部分
§说明ODBC管理器可完成什么任务
§解释OLE DB应用如何建立连接
§识别Open Client/Open Server应用的要求
§监视连接



内容
§连接数据库
§建立数据库连接
§建立连接:处理过程
§利用ODBC连接数据库
§配置ODBC访问
§ODBC故障排除
§利用OLE DB连接数据库
§利用Open Client连接数据库
§监视Adaptive Server Anywhere连接

连接数据库 :

§客户应用必须建立对数据库的连接
§建立连接则为应用构成访问数据库的通道
§有五类连接:
嵌入式SQL
ODBC
OLE DB
Open Client
JDBC

建立数据库连接
§连接参数
§连接字符串


指定连接参数
§ODBC 数据源配置
§应用提示
§带有预定义参数值的文件
§固定代码参数
§SQLCONNECT 环境变量


优先次序
§当一个参数在多处被说明时,其优先次序为:
明显给出的连接字符串
SQLCONNECT
ODBC 数据源

连接字符串
§列出参数的设置 关键字=某个值
例如 "UID=dbaWD=sql;DBF=mydata.db"


连接字符串关键字  
§UID — 用户 ID
§PWD — 口令
§CON — 可选的连接名称;不可用于 ODBC
§ENG — 数据库引擎名
§DBN — 数据库名
§DBF — 数据库文件名
§DSN — 数据源名称;用于ODBC
§FileDSN — 数据源的文件名.
§DBS — 数据库开关
§LOG — 出错日志文件

连接字符串关键字
§AStop — 指明一个数据库在其最后一个连接关闭后是否自动停止
§Links — 指明应启动哪种通讯协议
§START — 启动数据库引擎

设置 SQLCONNECT
§提供连接参数的环境变量
§该设置值将覆盖ODBC数据源
§实例
SQLCONNECT=DSN#mydata,DBF#c:/sybase/ase/mydata.db


建立连接:
处理过程
§1. 应用调用接口库
§2. 应用把连接字符串传送给接口库
§3. 接口库装配这些连接参数
§4. 接口库寻找命名服务器
个人机
网络
启动服务器
§5. 接口库寻找命名数据库
检验运行着的数据库
启动新数据库


利用嵌入式SQL连接数据库
§使用CONNECT命令
§语法
CONNECT USING connection-string
§实例
CONNECT USING "UID=dbaWD=SQL;
ENG=mydata;DBN=mydata;
DBF=c:\sybase\Adaptive Server Anywhere\mydata.db"


利用ODBC连接数据库
§提供客户连接数据库的标准接口
§为许多DBMS(关系型或非关系型)提供开放的、可移植的标准API。


ODBC说明
§标准函数调用库
§标准数据访问语言
§标准出错代码集
§对DBMS进行连接和登录的标准方法
§标准数据类型表示


ODBC 组件
§应用
请求连接 改换ODBC环境 把SQL传递给数据源 定义结果集的存储类型 请求结果集 结束连接
§驱动管理
管理应用与驱动器之间的交互 确保函数调用的正确顺序 管理驱动器装载及卸载 把SQL传递给驱动器
§驱动器
与数据源交互 处理ODBC函数调用 把SQL嵌入到数据源中
§数据源
由其获得数据的数据(库)组件

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442017金鸡报晓
日期:2017-01-10 15:33:11
22#
 楼主| 发表于 2007-11-13 23:09 | 只看该作者
ODBC 一致性 :
§支持 ODBC 3.51
§全部核心特征
§全部Level 1特征,但除去: 异步执行 单个连接中的并行的多线索处理
§全部Level 2特征,但除去: hree-part 表和视图命名 异步执行各个语句 登录请求和SQL查询的超时


配置ODBC访问 :
应用调用库函数 Windows 95/98/ME and 2000/NT – wodbc32.lib Unix – dbodbc.lib

Windows 应用连接到 Microsoft ODBC manager

其它平台可以直接连到驱动器


ODBC管理器 :
用于增加、删去或修改数据源
自动与Adaptive Server Anywhere一起被安装



非Windows平台不支持管理器

处理过程
1. 连接所支持的输入库
2. 利用SQLDriverConnect 函数
3. 说明 szConnStrIn driver= parameter
§实例 szConnStrIn= "driver=/sybase/Adaptive Server Anywhere/dbodbc7.sc;dbf=/sybase/Adaptive Server Anywhere/mydata.db"



在ODBC管理器中追踪 :
追踪ODBC管理器所连接的调用
1. 启动ODBC管理器
2. 选择Tracing
3. 为该追踪指定输出文件
追踪文件有可能太大
仅在排错或测试期间采用

ODBC Test:

微软的 ODBC Test 可用于测试ODBC的驱动器
四大类功能:
Functions 是用来调用ODBC功能的菜单项
Function tools 是调用一组相关的ODBC功能的菜单项
Tools 是用于配置 ODBC Test的菜单项
Auto tests 是包含测试案例的DLL


利用OLE DB连接数据库:
利用COM为数据库和应用提供接口
§为每种数据源OLE DB分别提供:
为Sybase Adaptive Server Anywhere OLE DB提供
§Adaptive Server AnywhereProv 支持 OLE DB 2.5或以上版
为Microsoft OLE DB 提供
§使ODBC数据源能当作OLE DB数据源来看待  
§ADO (ActiveX Data Objects)编程
ADO 允许象Visual Basic这样的脚本语言来使用标准的数据访问对象模式

利用Open Client连接数据库:
§实现与Sybase产品的兼容性
§数据库应配置成与ASE兼容
§要求
TCP/IP
登记sql.ini或interface
Open Client 软件置于客户机


监视Adaptive Server Anywhere连接:
在Sybase Central的 All Connected Users 文件夹中的每个服务器和客户

小   结 :


1、定连接参数的手段可通过ODBC数据源配置,用户提示,包含预定义参数值的文件,一组固定的内置参数,或是SQL CONNECT变量。
2、建立数据库连接,客户应用必须首先找到数据库引擎或服务器。


3、嵌入式SQL应用利用连接字符串来连接数据库
4、Microsoft ODBC 说明是个调用级接口,它不需要SQL处理器或预编译器. 5、ODBC 的四个组件是:应用,驱动管理,驱动器和数据源.
6、当需要与Sybase产品兼容时,则应采用Open Client连接方式
(这点需要特别注意)

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442017金鸡报晓
日期:2017-01-10 15:33:11
23#
 楼主| 发表于 2007-11-13 23:10 | 只看该作者
Adaptive Server Anywhere 7.0网上培训教材


性能调优


目   标
§识别和讨论影响数据库性能的硬件和软件因素
§说明键及索引对数据库性能的影响
§树木如何权衡使用索引及派生数据
§说明存储过程 及触发器对数据库性能的影响
§说明查询优化器是如何工作的
§说明Adaptive Server Anywhere自我调协的特点
§识别在查询计划中出现的各种信息

内   容
§优化数据库性能
§权衡存储过程及触发器的使用
§从数据库设计着手改善性能
§查询设计
§查询优化器
§监视性能



优化数据库性能
§硬件和软件因素
§自底层向上来考虑
§监视和调协


硬件和软件因素
§网络资源
§硬件平台
§磁盘分片
§内存
§页尺寸
§不使用事务日志

页  分  配
§当数据行比数据库页面尺寸小时,它一定被存储在单个页面中。
若现有的页面不具有充分大的空间,则被分配一个新页面。
数据行的存储次序可能与其插入次序不同。
§当数据行比数据库页面尺寸大时,则把它劈开存储在连续的页面中。


数据行尺寸
§新行被分配在固定位置及初始化空间
不含数据的空值列未能分配到空间。
当利用 UPDATE 对空列赋值时,可能回导致数据行被劈开而跨页存放。
§此时因增加 I/O 而降低性能
§初次 INSERT 时,在每个都插入数据。
可以使用缺省值
通常不要包含空值列  
(这点对于ASE同样很重要 -- JAZY)

空间的重用
§Adaptive Server Anywhere回收删除了数据的空间
新数据可被插入到任何空闲页面中
会引起碎片
§对数据库进行卸载和重新装入
使现有数据紧凑化
数据行能被连续存储


网络调谐
§网络包尺寸
要与基础网络包匹配 利用通讯参数 CommBufferSize 来设置
§缺省为1024
§最小为 300
§最大为 16000
§设置的比基础网络包的尺寸稍微小一点效果最佳



存储过程
§在以下方面改善性能
减少网络交通量 处理能力提高
§在以下方面没有改善性能
零散的操作 不适当的网络/服务器  
§混合型的应用体系结构

触发器
§减少网络交通量
§要求更多的处理能力


从数据库设计着手改善性能 :

物理设计要考虑:
是联机事务(OLTP)应用?
是决策支持(DSS)应用?
至关重要的事务和查询是什么?
业务对性能的要求?
对彼此有冲突的要求如何权衡?



索 引 结 构
§由一系列数值型哈什(Hash)值组合
§对哈什值进行比较以确定数据行所处的位置
§缺省的哈什大小为 10 个字节
增大哈什值尺寸可减少对基础数据行的访问次数


组合索引的次序 :

§应针对不同应用来安排组合索引中各列的次序
§例如: 利用以下索引查找last_name:
CREATE INDEX lname_fname  ON employee emp_lname, emp_fname
利用以下索引查找 firs_name:
CREATE INDEX fname_lname  ON employee emp_fname, emp_lname
§每个表都可以建多个索引
§把重复值少的列放在组合索引的最前面对优化估算最有利

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442017金鸡报晓
日期:2017-01-10 15:33:11
24#
 楼主| 发表于 2007-11-13 23:10 | 只看该作者
编写能够利用索引的查询语句
§必须包含搜索变量 (sargs)
§搜索变量是无须查找基础数据只利用索引就可确定的条件
§以下语句组合索引的含搜索变量:
SELECT * FROM employee WHERE emp_id = 102
SELECT * FROM employee WHERE emp_fname LIKE 'Jo%'
§以下语句不含搜索变量:
SELECT * FROM employee WHERE emp_id !=102
SELECT * FROM employee WHERE emp_fname LIKE '%n'
§在 WHERE 子句中应包含组合索引的领头列


比较是否含搜索变量 :

以下包含:
§emp_id = 102
§emp_id IS NULL
§emp_id >; 200
§employee.emp_id =department.dept_head_id
§emp_id IN (102, 103, 104)
§emp_fname LIKE 'rob%'

以下不包含:
§emp_id !=102
§emp_id IS NOT NULL
§emp_id = 102 or emp_fname = 'Jane'
§employee.emp_id = employee.manager_id
§emp_id NOT IN (102, 103, 104)
§emp_fname LIKE '%bert'

设法把不含搜索变量转换为含搜索变量
§有些情况可通过重写 WHERE 子句来实现转换
§例如:
emp_id NOT IN (102, 103, 104)
emp_id < 102 and >; 104

(这些对于优化很有帮助--JAZY)

如何权衡
§DSS 与 OLTP  
§不同要求造成的资源冲突


查询设计
§笛卡儿积
在连接查询中若不包含 WHERE 子句则会发生笛卡儿积
如果对个n 表进行连接,你必须至少给出 n-1 个连接条件
§限制 搜索变量允许优化器去利用索引

查询优化器:
为执行一个查询识别最好的策略
基于开销最低的原则 I/O 和 CPU


依次估算:
I/O
表排序
索引
每个表仅能用到一个索引

语法独立性
§优化器采用查询语义
§它可能会改写你的查询语句
§在你的查询语句中修改谓语和表的安排次序,对查询优化器并不起作用。



控制资源的使用
§有可能找不到最有效的存取计划
§要对继续寻找更多的查询计划及执行当前计划二者所需开销进行
§比较
§对大的复杂的查询提供更多的资源


自我调谐
§相等约束
列值分布统计
§把数据库统计删掉以强迫它重新编译(更新统计值)
当数据库使用方式改变时
当数据大量变动时
DROP OPTIMIZER STATISTICS


优化处理过程
§1.对查询作语法分析转换
§2. Adaptive Server Anywhere 打开优化处理游标
§3. 把子查询展平为连接,去掉不必要的DISTINCT, 重写搜索变量。
§4. 评估连接次序和 GROUP BY 策略
§5. 利用统计和缺省去考察访问次序
§6. 在执行之后,更新数据库统计。


展平子查询
§嵌套子查询往往不如连接更为有效
§实例:
嵌套子查询不够有效:
SELECT * FROM sales_order o WHERE o.cust_id IN  (SELECT id FROM customer c WHERE c.state='NY’)
如下连接较有效:
SELECT sales_order.* FROM sales_order KEY JOIN customer WHERE customer.state='NY'



优化器评估
§估算将有多少行能满足此查询
§估算的依据是:
列统计
部分索引扫描
用户提供的值
缺省值


列统计
§查询每执行一次都被送入高速缓存
列值分布 LIKE 谓词的可选择性 相等谓词
§可保持15,000 个登记项 采用先进先出的调度策略


管理统计值
§对一个表的查询执行越频繁则其统计值就越精确
§以下情况可能要把统计值删掉
§ ( DROP OPTIMIZER STATISTICS):
对数据库做了大规模的修改
增加大量数据从根本上影响了数据的分布
§恢复统计的办法是:
执行一次数据库中的典型查询
利用脚本


部分索引扫描
§当没有统计可利用时被使用
§只扫描最开头二个索引层
§仅当搜索变量是处于该索引的最开头列时才有效


人工估算
§可人工提供估算值
§优化器会优先考虑采用它
§实例:
SELECT ship_date FROM sales_order_items WHERE (ship_date >; '1998/10/30', 1)
满足条件的行数为1%
§轻易不要在存储过程及触发器中采用!
因为信息无法更新


缺省的可选择性
比较                              百分比为:
     cola=colb                             0.035
       col=constant
       col IS NULL
       cola LIKE colb
       col !=constant
       Other LIKE or                              25
       EXISTS                                        50        
       Other equalities                          5
       Other inequalities                     25
       Other IS NULL or BETWEEN       6


由 Sybase Central启动性能监视器 :


1. 打开要监视的数据库的 Statistics 文件夹
2. 右击你想把它加入到 Performance Monitor 去的 Statistic
3. 点击 Add to Performance Monitor
4. 点击 Statistics Items
5. 注意:统计显示采用不同颜色的线条


利用 Windows NT 性能监视器
§1.打开 Administrative Tools 程序组
§2. 点击 Performance Monitor
§3. 选择 Edit &Ugrave; Add  
§4. 从Objec 列表中选中
Adaptive Server Anywhere  
§5. 从Counte 选择 统计
§6. 点击 Add
§7. 点击 Done
§注意:数据库必须在运行
      

小结
§影响数据库性能的因素包含硬件配置,磁盘和文件管理,以及数据库和查询语句的设计。
§使数据库性能下降的因素有不恰当的网络和服务器资源,硬盘过分的分片化,页面尺寸太小以及未使用事务日志。
§既使硬件和软件配置都很恰当,但如果数据库设计的不好也会影响性能。
§存储过程因减少网络交通量和把应用处理放在服务器一方而能改善性能。
§触发器可以减少网络交通量及处理,但是它要求功能较强的服务器。

(这节的很多概念和思想对于别的数据库产品也有很好的借鉴意义!-JAZY)

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442017金鸡报晓
日期:2017-01-10 15:33:11
25#
 楼主| 发表于 2007-11-13 23:10 | 只看该作者
Adaptive Server Anywhere 7.0网上培训教材


在数据库中使用Java

目标
§说明在数据库中如何使用Java
§说明Java怎样被储存在数据库中
§配置数据库可使用Java
§在数据库安装Java 类
§操纵 (select, insert, update, delete) 表中的Java 数据类型
§在SQL语句中使用Java 函数
§调用Java存储过程
§说明JDBC在 数据库访问中的作用

内容
§如何在数据库中使用Java?
§在数据库中储存Java
§把数据库设置为能使用Java
§SQL对Java的支持
§Java术语概述
§使用Java方法
§在存储过程中使用JDBC
§使用Java数据类型
§更新和删去表数据行
§使用Computed列


如何在数据库中使用Java?
§你可以三种不同的方式使用Java类:
作为函数
作为存储过程
作为复杂的数据类型


Java 环境
§Sybase Java 虚机(VM)
提供Java类的运行时环境
Sybase Java VM 是 JDK 1.1.8的一个子集
不是 Java的开发环境
应使用 PowerJ 或 Sun JDK 进行开发
§内置基本 Java 类

设置数据库能使用Java
§让数据库可使用Java
§安装用户类
§为Java配置内存


能使用 Java的数据库
§利用以下方式建立的数据库在缺省情况下都能 使用 Java
§ CREATE DATABASE 语句
   dbinit 命令行实用程序
   Sybase Central


让数据库能使用 Java


安装 Java 类
§你可把用户类安装为
单个类,或者JARs
§安装 Java 类,可使用
Sybase Central,或者 交互式 SQL

安装 Java 类
§使用交互式SQL安装类或JAR 安装
JAVA NEW FROM FILE 'path\\类Name.类';
§ 安装
JAVA NEW JAR 'jarname' FROMFILE 'path\\JarName.jar';



建立Java 类
§Adaptive Server Anywhere
不能完成Java 类的建立
在数据库安装了Java类之后可对其进行排错
§ 类的建立 应当使用标准的Java工具,比如 PowerJ 或 Sun Java SDK来编写和编译


为Java配置内存
§ Java VM 需要附加的 cache
使用 -c 命令行选项指定额外的cache
§Java VM 至少需要附加8M cache.
§ dbeng7 -c 8M labTest.db
§可考虑设置一个包含该命令行的 profile或快捷键

Java 术语概述
§是面向对象的 Java是由对象组成的
§方法 包含在一个对象中的过程
§类和实例 Java 对象是利用称之为类的原型对象来建立的
利用一个类来实例化对象
新对象是该类的一个实例
§类和实例方法
为调用一个实例方法你建立该类的一个新实例然后依据它调用该方法
你也可以直接调用类方法
§Constructor(构造函数) 当一个对象被实例化时所调用的方法叫做 Constructor
一个对象可能有多个constr


作为函数来使用 Java 方法:

SQL 函数 SELECT sqrt(12)
等价的 Java 函数 SELECT java.lang.Math.sqrt(12)


从Java调用实例方法
1、Java (使用 StringTokenizer)

public class  Word {
public static int count(String arg) {
return new
java.util.StringTokenizer(arg).countTokens();
}
}

SELECT 语句
2、SELECT description, Word.count(description) from product

在存储过程中使用 JDBC
§JDBC提供用于访问关系数据的API
§客户-端 JDBC 允许客户通过特定的数据库驱动器 (比如, jConnect)去访问数据
§服务器-端 JDBC 允许数据库中的Java 类去访问关系数据


在存储过程中使用 JDBC
§Java 存储过程的调用方法与 SQL 存储过程一样
§Java 存储过程要访问关系数据因而要求JDBC
§存储过程处于服务器-端 因而要使用 服务器-端JDBC
§不要求jConnect

在存储过程中使用 Java:
调用 JDBCTest.test( )


使用 Java 数据类型
§任何已安装的Java 类都可作为数据类型使用
§数据类型名称必须是完全限定的
§Java数据类型对大小写是敏感的



在数据库中使用 Java
§ CREATE 表 jdba.customer
(
id integer NOT NULL,
company_name CHAR(35) NOT NULL,
JName Adaptive Server Anywheredemo.Name NOT NULL,        JContactInfo Adaptive Server Anywheredemo.ContactInfo NOT NULL,        PRIMARY KEY (id))



限定Java 列
§表查询 (假定列Jprod 使用 Java 数据类型)
§select Jprod from product
选择整个 列 基于该类的String() 法返回结果集

限定Java Fields(字段)
§ 使用方法来选取列Jprod 中的一个字段
SELECT Jprod.getDescription( ) FROM product
§利用指定字段名来选取列Jprod 中的一个字段
SELECT Jprod.description FROM product


插入 Java 列
§利用缺省constructor 插入Java 对象
§ INSERT INTO product (ID, Jprod) VALUES (702, NEW Adaptive Server Anywheredemo.Product( ))

插入Java 列
§利用把所有的参数都传送给constructor来插入Java 对象
§ insert into product_item(id,JProd) •values (704, NEW Adaptive Server Anywheredemo.Product('Yellow','tee-shirt with picture of GG bridge', 'SF tee shirt',50,'Big',19.99))



更新Java 对象
§更新整个对象 使用constructor 使用SQL变量
§更新对象的某些字段
在UPDATE中 使用EVALUATE 函数
§EVALUATE 函数要求设定字段值的方法


删除Java 对象
§与删除一般数据行是一样的
§WHERE子句中可以包含Java 对象或Java字段和方法


访问Java 列
§如果打算使用 java 列作为: primary keys, indexes, unique 列, min() or max() SQL 函数, ORDER BY, GROUP BY, OR DISTINCT
§那么该java 类 必须实现一个compareTo()方法 在定义实现时要遵从:
必须调用compareTo()
不能被修改

SELECT name, Jprod.unit_price
FROM Product
ORDER BY Jprod.unit_price

SELECT name, Jprod.unit_price
FROM Product ORDER BY JProd

(The Product class has a compareTo() method that compares objects based on the unit_price field)


使用Computed(利用其他列计算出来的)列
§具有Java 类的 computed 列主要用于:
分解Java 列 把Java 列增加到表中
§在每次读取Computed 列时它不会被更新
仅当数据行被修改时它才会更新


使用 Computed 列
§建立包含computed 列的表
CREATE  TABLE Product (
id INTEGER NOT NULL,
JProd Adaptive Server Anywheredemo.Product NOT NULL,
name CHAR(15) COMPUTE (Jprod.name),
PRIMARY KEY ("id"

§表中增加computed 列
ALTER TABLE Product ADD inventory_Value INTEGER COMPUTE (Jprod.quantity * Jprod.unit_price)

小结
§Adaptive Server Anywhere 允许在数据库中把Java用做:
函数
存储过程
复杂的数据类型和 computed 列
§数据库必须设置为Java-enabled.
§Java虚机需要8MB内存.
§Java语法可被嵌入在SQL中.
§ 编写存储过程要求服务器-端 JDBC


经过两个晚上的时间,终于将这部分的资料浏览了并编辑了一遍,在和ase的比较过程中,可以发现这两种数据库产品差别还是很大的,无论是在使用对象及本身的语法结构上都有很大的差别!

希望诸位有实际使用asa产品经验的朋友能踊跃发表自己的见解!

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
26#
发表于 2007-11-15 08:46 | 只看该作者
up

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表