科技>计算机>数据库
SQLServer与Oracle迁移指南

SQLServer与Oracle迁移指南"

作者:梅涛,罗裕梅,叶琼伟
ISBN:9787121363306
定价:¥48.0
字数:500千字
页数:312
出版时间:2019-05
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书主要对SQL Server与Oracle两种数据库功能间的相互迁移进行对比讲解,向开发人员提供有针对性的参考建议。全书由9章组成,包括安装准备、数据库体系结构、用户及授权、对象迁移、数据迁移、SQL语句迁移(1)和(2)、事务差异及其他功能。每章均采用大量讨论与实例对两种数据库进行翔实比较,有利于开发人员更好地理解迁移过程。

前言

前 言 SQL Server与Oracle是世界上商业数据库市场占有率较高的两种通用型数据库。其中,Oracle多年来是数据库业界的领军产品,在高端应用上有较大的占有率;而SQL Server在中低端应用上有较大的占有率。同时,通常Oracle给人以性能高、维护难度大的印象。长期以来,当面对大数据量的性能要求时,或者要求跨平台的部署能力时,都会将应用迁移到Oracle数据库上。并且一些行业和企业对Oracle也有着深厚的技术积累,也会要求将应用迁移到Oracle上。 近年来,虽然Oracle在数据库维护上进行了很多简化,但是SQL Server在功能和性能上却有了更长足的进步。事务处理性能委员会(Transaction Processing Performance Council,www.tpc.org)的TPC-E(针对OLTP)和TPC-H(针对OLAP)的排名上,SQL Server在性能上的优势与Oracle形成强烈反差,这表明Oracle在性能上也已经不像过去高高在上了。 随着PC服务器相对小型机在性能上也有较大改善,以及硬件成本的降低,凸显了Oracle数据库的拥有成本过高,特别是维护成本以及对维护人员的要求较高,甚至在安全性上也乏善可陈。为降低成本,一些企业出现了去IOE(IBM、Oracle、EMC)的趋势,出现了越来越多从Oracle数据库向其他数据库进行迁移的需求。 同时,在软件的产品化开发中,也更多地出现不同的数据库,以满足不同客户的需求。数据库开发人员也面临着多种数据库之间的转换和迁移工作。 作为常见的两种商业数据库,SQL Server与Oracle的底层原理是相同的,在基本功能上是一致的,都有着大致对应的实现方案,实施迁移的可行性是较高的。但是两种数据库在系统结构和功能实现上有巨大的差异,使得学习过程和迁移过程较为复杂。本书按照迁移时面临的问题和实际迁移工作的步骤出发,逐步向读者展示相关内容。通过本书,读者可以处理好迁移时大部分需要考虑的相关细节,提高迁移的速度和成功率。 本书第 1 章首先从安装开始进行介绍,让读者对两种数据库的运行环境有一个粗略的认识。 第2章着重介绍两者体系架构的异同点。两种数据库的主要构成大体上可以对应,主要是名称上的不一致。不同点主要在于SQL Server是多库结构,架构、用户、登录名相分离。 第3章进一步介绍不同体系架构下用户和授权的差异及迁移建议,演示了SQL Server架构、用户分离为授权带来的灵活性,以及两种数据库在模块授权的不同之处,为迁移做好事前规划和准备工作。 从第4章开始正式进入迁移的实际工作,从对象迁移开始,到第5章的数据迁移。这部分工作可能由一些迁移工具辅助完成。 迁移工作最为烦琐的部分介绍在第6、7章,就是修改应用中的SQL语句。很多功能在TSQL和PLSQL实现的差异较大,需要有不同的方法来解决。 第8章主要考虑相关的事务差异,这部分工作也是今后数据库调优的基础。 最后一章即第9章介绍两种数据库常用扩展功能的迁移建议。这部分功能差异较大,必须重新开发和部署,涉及的范围太大,本书仅做简要介绍。 本书中table统一译为表,schema统一译为架构。文中SQL Server特指Microsoft SQL Server而不是Sybase SQL Server。SSMS为Microsoft SQL Server Management Studio的缩写,OEM为Oracle Enterprise Manager的缩写。如果命令行前有“OS>”的,表示此句是在操作系统的命令行shell下执行的,而不是在SQL环境中执行的。在SQL语句中,由“< >”界定的字符是需要根据实际情况进行替换的。本书中出现的SQL Server用户特指数据库用户,而非实例登录名。本书以SQL Server 2012和Oracle 11g R2为叙述主线,涉及最新的SQL server 2016 SP1和Oracle 12c的一些功能,早期版本也会有一定的涉及。 读者阅读本书前,需要对其中一种数据库有所了解。本书主要针对数据库开发人员,而非DBA(Database Administrator,数据库管理员),仅对迁移过程中出现的常见问题进行对比说明,而其他问题仅做简要介绍。 本书得到国家自然科学基金(71402159、71672013)、云南省应用基础研究计划重点项目(2017FA034)、云南省中青年学术和技术带头人后备人才培养项目(2018HB027)、2018年昆明市电子商务与互联网金融重点实验室项目(2017-1A-14684昆高发〔2018〕18号)、教育部产学合作协同育人项目(教高司函〔2017〕1号)、云科云财电商众创空间项目(2017DS012)、云南省电子商务创新与创业重点实验室(云教科2014[16])、云南省电子商务实验教学示范中心(2015年高水平大学实践教学能力提升工程项目)(云教高2015)的资助。在此一并表示衷心的感谢。 本书由笔者在近年来实际工作中获得的经验汇编而成,笔者尽最大的努力将这些经验与读者分享。鉴于水平有限,书中可能存在一些错误,欢迎广大读者朋友批评指正。 著 者

目录

第1章 安装准备 1 1.1 服务器硬件及运行环境 1 1.2 版本选择 1 1.2.1 SQL Server的版本选择 1 1.2.2 Oracle的版本选择 2 1.3 安装注意事项 2 1.3.1 SQL Server的安装 注意事项 2 1.3.2 Oracle的安装注意事项 3 1.4 客户端 3 1.4.1 安装 3 1.4.2 图形界面 4 1.5 命令行 4 1.5.1 SQL Server的命令行 4 1.5.2 Oracle的命令行 5 1.6 创建和删除实例 6 1.6.1 SQL Server的创建和 删除实例 6 1.6.2 Oracle的创建和删除实例 6 1.7 卸载 7 1.7.1 SQL Server的卸载 7 1.7.2 Oracle的卸载 7 1.8 参数配置 7 1.9 补丁安装 8 1.9.1 SQL Server的补丁安装 8 1.9.2 Oracle的补丁安装 8 1.10 32位系统内存使用 9 1.11 防火墙对外端口 10 1.11.1 SQL Server的防火墙 对外端口配置 10 1.11.2 Oracle的防火墙对外 端口配置 10 1.12 帮助文件及售后服务 11 1.12.1 SQL Server的帮助 文件及售后服务 11 1.12.2 Oracle的帮助文件 及售后服务 11 1.13 异步I/O和裸设备 11 1.14 数据库的启动和停止 12 1.14.1 SQL Server的启动 和停止 12 1.14.2 Oracle的启动和停止 14 第2章 数据库体系结构 15 2.1 DBMS体系结构图 15 2.2 架构和所有者 16 2.2.1 SQL Server的架构和 所有者 16 2.2.2 Oracle的架构和所有者 20 2.2.3 迁移建议 20 2.3 块(Block)/页(Page) 20 2.3.1 块/页的大小 20 2.3.2 管理可用空间 21 2.3.3 行链接/行溢出 21 2.3.4 行迁移/转接行 22 2.4 区(Extent) 22 2.4.1 区的大小和分布 22 2.4.2 最大读写量 23 2.4.3 对象初始分配的区 23 2.5 段(Segment)/堆(Heap)、 索引(Index) 23 2.5.1 SQL Server堆和索引 23 2.5.2 Oracle段 23 2.6 数据文件 23 2.6.1 文件尺寸 23 2.6.2 自动增长 24 2.6.3 文件收缩/删除/脱机 25 2.6.4 移动物理文件位置 26 2.6.5 系统数据库改目录 27 2.6.6 裸设备 27 2.7 表空间(Table Space)/ 文件组(File Group) 28 2.7.1 在表空间/文件组中 创建多个文件 28 2.7.2 Oracle表空间管理方式 28 2.7.3 默认表空间 29 2.7.4 表空间块尺寸 29 2.7.5 数据库收缩 29 2.7.6 删除表空间/文件组 29 2.7.7 只读文件组 31 2.7.8 只读数据库 31 2.7.9 脱机 32 2.7.10 表空间/数据库的传输 32 2.7.11 磁盘I/O压力分布 36 2.8 会话(Session)与进程/线程 37 2.8.1 Oracle会话与进程 37 2.8.2 SQL Server会话与线程 39 2.9 内存管理 43 2.9.1 Oracle的内存管理 43 2.9.2 SQL Server的内存管理 46 2.10 在线日志 49 2.10.1 Oracle的在线日志 49 2.10.2 SQL Server的在线日志 50 第3章 用户及授权 53 3.1 用户和登录名 53 3.1.1 SQL Server的用户和 登录名 53 3.1.2 Oracle的用户 57 3.2 密码策略 59 3.2.1 SQL Server的密码策略 59 3.2.2 Oracle的密码策略 61 3.3 重命名 63 3.3.1 SQL Server的管理员 重命名 63 3.3.2 Windows的管理员重命名 64 3.3.3 修改计算机名 64 3.3.4 Oracle:修改用户名 66 3.4 防止远程登录 66 3.4.1 SQL Server防止远程登录 66 3.4.2 Oracle防止远程登录 67 3.5 限制同一用户的并发登录 68 3.6 最高权限用户 69 3.7 角色及权限 69 3.7.1 相关语法 69 3.7.2 SQL Server中的 预定义角色 70 3.7.3 Oracle中的预定义角色 74 3.7.4 自定义角色 77 3.8 权限管理示例 78 3.8.1 SQL Server架构权限 78 3.8.2 在SQL Server用户中 模拟Oracle用户 78 3.8.3 与其他用户共享一个架构 79 3.8.4 让一个只读用户可以 创建自己的视图 80 3.9 模块授权 80 3.9.1 SQL Server中的模块授权 81 3.9.2 Oracle中的模块授权 82 第4章 对象迁移 84 4.1 表 84 4.1.1 堆表 84 4.1.2 聚集索引表/索引组织表 84 4.1.3 聚簇表(Clustered Table)/ 稀疏列(Sparse Columns) 86 4.1.4 计算列/虚拟列 87 4.1.5 外部扩展表(Organization External)和文件流/表 (FileStream/FileTable) 88 4.1.6 临时表 88 4.1.7 表变量 90 4.1.8 表移动到其他表空间/ 文件组 91 4.1.9 表的重建 93 4.1.10 check和default约束 94 4.1.11 删除表 94 4.1.12 按列授权 94 4.2 索引 94 4.2.1 索引名 95 4.2.2 函数索引和计算列 95 4.2.3 索引视图/视图索引 95 4.2.4 聚集索引/索引组织表上的 非聚集索引 95 4.2.5 位图索引和反向索引 96 4.2.6 在线创建索引 96 4.2.7 包含性列(Included Columns) 96 4.2.8 重建索引,优化性能 96 4.2.9 将索引移动到其他 表空间/文件组 97 4.2.10 筛选索引(Filtered Index) 98 4.2.11 NULL值处理 99 4.2.12 唯一值索引(Unique Index) 99 4.2.13 优化索引的使用 100 4.3 分区表 101 4.3.1 Oracle的分区方案 101 4.3.2 Oracle分区表的索引 103 4.3.3 在Oracle中将已有 表转化为分区表 103 4.3.4 在Oracle中访问指定 分区 104 4.3.5 Oracle中的分区维护 104 4.3.6 SQL Server的分区方案 105 4.3.7 SQL Server中分区表的 建立 105 4.3.8 在SQL Server中查看 分区表所有分区对应 的文件组 107 4.3.9 SQL Server分区表的 索引 107 4.3.10 SQL Server中将已有表 转化为分区表 107 4.3.11 在SQL Server中访问 指定分区 108 4.3.12 SQL Server的分区 维护操作 109 4.3.13 滑动窗口方案 111 4.3.14 讨论 113 4.4 存储过程 113 4.4.1 编译 113 4.4.2 授权 113 4.4.3 事务 114 4.4.4 DDL语句 115 4.4.5 在线修改存储过程代码 116 4.4.6 出错处理 116 4.4.7 返回结果集 116 4.4.8 自治事务(Autonomous Transaction) 117 4.4.9 传输参数及变量定义 119 4.5 函数 119 4.5.1 使用DML语句 119 4.5.2 表值函数 120 4.6 物化视图/索引视图 123 4.6.1 Oracle物化视图 123 4.6.2 SQL Server索引视图 123 4.6.3 视图的刷新 124 4.7 触发器 124 4.7.1 DML触发器 124 4.7.2 语句级触发器 125 4.7.3 行级触发器 127 4.7.4 before/instead of型 触发器 128 4.7.5 DDL触发器 128 4.7.6 数据库事件触发器 129 4.8 同义词 130 4.9 序列/自增长列 130 4.9.1 Oracle序列 130 4.9.2 SQL Server自增长列 131 4.9.3 SQL Server中的序列 132 第5章 数据迁移 135 5.1 字符类型 135 5.1.1 SQL Server和Oracle 字符类型长度的比较 135 5.1.2 varchar 2和varchar 135 5.1.3 字符串的 ' ' 值与NULL 136 5.1.4 本地字符集 136 5.1.5 Unicode编码 139 5.1.6 相关函数 140 5.2 数据类型 140 5.2.1 Oracle中的数据类型 140 5.2.2 SQL Server中的数据 类型 141 5.2.3 迁移建议 142 5.3 日期型 142 5.3.1 日期型的迁移 142 5.3.2 内部存储 143 5.3.3 日期常量 144 5.4 大对象字段 146 5.4.1 SQL Server中的 大对象字段 146 5.4.2 Oracle中的大对象字段 147 5.4.3 大对象字段的迁移 148 5.5 其他特殊类型 148 5.6 对象迁移工具 148 5.6.1 SQL Server的对象 迁移工具 148 5.6.2 Oracle的对象迁移工具 149 5.7 数据迁移工具 150 5.7.1 SQL Server的数据 迁移工具 150 5.7.2 Oracle的数据迁移工具 150 5.8 用户自定义数据类型 150 5.8.1 SQL Server中的自定义 数据类型 150 5.8.2 Oracle中的自定义 数据类型 152 5.9 where条件中数据类型的 隐式转换 155 5.9.1 SQL Server中数据类型的 隐式转换 156 5.9.2 Oracle中数据类型的 隐式转换 157 第6章 SQL语句迁移(1) 158 6.1 SQL语法 158 6.1.1 SQL语句结尾的分号 158 6.1.2 "/"和go 158 6.1.3 标识符和别名 159 6.1.4 单步调试及信息输出 160 6.1.5 赋值 160 6.1.6 多字段匹配/赋值 161 6.1.7 CTE 162 6.1.8 指定使用索引 165 6.1.9 SQL语句的并行处理 165 6.1.10 模块加密 167 6.1.11 获得DML影响行数 168 6.1.12 获得客户端IP地址 168 6.1.13 Oracle伪列 169 6.1.14 仅获取部分输出/分页 172 6.1.15 动态(拼接)SQL 173 6.1.16 参数及绑定 174 6.1.17 修改对象的定义 176 6.2 字符串与函数 177 6.2.1 字符串的比较 177 6.2.2 排序 180 6.2.3 ' ' 值与null值 181 6.2.4 转义字符 182 6.2.5 内置函数迁移 182 6.3 常用语句 185 6.3.1 insert 185 6.3.2 DML同时返回结果集 186 6.3.3 Delete数据后释放 存储空间 188 6.3.4 分批delete大量数据 188 6.3.5 多表关联 190 6.3.6 删除表中所有行 (truncate table) 192 6.3.7 层次查询子句 (connect by) 193 6.3.8 合并(merge) 197 6.3.9 分组统计 198 6.3.10 透视和逆透视 200 6.3.11 批加载(bulk load) 202 第7章 SQL语句迁移(2) 203 7.1 编程 203 7.1.1 If语句 203 7.1.2 循环语句 203 7.1.3 游标 204 7.1.4 出错处理和抛出异常 206 7.1.5 程序包/程序集 208 7.1.6 与其他开发语言的集成 209 7.1.7 自定义聚合函数 217 7.1.8 合并多条记录中的 同一个字符串字段 221 7.1.9 分解字符串为一张表 222 7.1.10 正则表达式 224 7.1.11 数据加密 230 7.2 维护 232 7.2.1 查看表的列信息 232 7.2.2 显示SQL的执行计划 232 7.2.3 统计信息的更新 233 7.2.4 管理视图 235 7.2.5 链接服务器(DBlink) 236 第8章 事务差异 244 8.1 事务级别标准 244 8.2 默认事务级别 244 8.2.1 无阻塞查询/快照事务 244 8.2.2 SQL Server设置快照 事务为默认事务级别 245 8.2.3 SQL Server模拟Oracle 默认事务操作 246 8.3 事务操作 246 8.3.1 显式事务/隐性事务 246 8.3.2 DDL语句与事务 247 8.3.3 语句块在语句出错时 停止 248 8.3.4 匿名语句块 248 8.3.5 事务提交和回滚 249 8.3.6 事务保存点 250 8.3.7 锁等待(阻塞) 250 8.4 未能实现的事务等级 251 8.4.1 Oracle中实现一致读 事务级别 251 8.4.2 自治事务 251 8.4.3 SQL Server利用脏读 获得事务发起者的IP 252 8.5 锁 253 8.5.1 锁内存管理和锁升级 253 8.5.2 显式指定加锁的方式 256 8.5.3 查看会话、对象、SQL、 事务和锁 257 8.5.4 跟踪锁分配 258 8.5.5 死锁检测 259 8.6 日志 261 8.6.1 SQL Server日志 261 8.6.2 SQL Server中日志 最小化 261 8.6.3 Oracle日志 262 8.6.4 Oracle中日志最小化 262 第9章 其他功能 263 9.1 性能监控 263 9.1.1 SQL Server的性能监控 263 9.1.2 Oracle的性能监控 265 9.2 资源管理 267 9.2.1 SQL Server的资源管理 267 9.2.2 Oracle的资源管理 268 9.3 数据压缩/列存储 269 9.3.1 Oracle中的数据压缩 269 9.3.2 SQL Server中的 数据压缩 270 9.4 数据快速恢复 272 9.4.1 Oracle:闪回(Flashback) 272 9.4.2 Oracle的四种闪回方式 275 9.4.3 SQL Server的数据库快照 (Database Snapshots) 276 9.4.4 优势对比 279 9.5 定时任务 279 9.5.1 Oracle中的定时任务 279 9.5.2 SQL Server中的定时任务 282 9.6 开发接口 292 9.6.1 ODBC/ OCI 292 9.6.2 OLE DB 293 9.6.3 .NET 293 9.6.4 Java 293 9.6.5 PHP 294 9.7 存储管理 294 9.7.1 Oracle的存储管理 294 9.7.2 SQL Server的存储管理 294 9.8 高可用性方案 294 9.8.1 SQL Server的高可用性 方案 295 9.8.2 Oracle的高可用性方案 295 9.9 高性能方案(内存数据库) 296 9.9.1 SQL Server的高性能 方案 296 9.9.2 Oracle的高性能方案 296 9.10 备份方案 296 9.10.1 SQL Server的备份方案 297 9.10.2 Oracle的备份方案 297 9.11 变更数据捕获 297 9.11.1 SQL Server的变更数据 捕获 297 9.11.2 Oracle的变更数据捕获 298 9.12 邮件通知 298 9.12.1 SQL Server的邮件通知 298 9.12.2 Oracle的邮件通知 300 9.12.3 Buffer Pool Extension 301 参考文献 302

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个