SQL Server 专家访谈:过去现在与未来

SQL Server 2000 到 2005的迁移


网友: SQL Server 2000到SQL Server 2005的迁移成本有多大?


胡百敬: 单纯的版权费,移转成本较容易计算,但因为 SQL 2005 的差异较大,可能需要考虑学习、开发等不容易弄清的整体拥有成本。


网友: 在的网站用了300多个存储过程和30多个函数,用不用改动?


胡百敬: 基本上预存程序由2000转移到2005并没有带大的问题,不过像2000的版本里m原来应该写成 [数据库名].dbo.[数据表名],但是简写为[数据库名]..[数据表名] 的时候转移到sql 2005 会出错。就这个部份要稍微留意一下即可。


网友: 在我们转向2005的过程中, 我们需要注意那方面的问题呢?


胡百敬: 在 Books online 上有表列两个版本的不兼容性,以及提供 Upgrade Advisor 做事前的分析。你可以先用 Upgrade advisor 稍作分析,再决定如何因应。另外,2000 和 2005 可以同时安装在同一台机器上,从 2000 备份出来的数据库也可以 restore 到 2005(反向不行),所以你可以先行测试。


SQL Server 2005相关技术讨论

网友: SQL 2005在灾难还原方面有哪些技术?能否简要介绍一下这些技术的原理和实现方法?


胡百敬: Backup/Restore、Clustering、Database Mirroring、Database Snapshot、Replication。


网友: 胡老师 SQL SERVER 的数据与ACCESS 数据交互 能用作业实现吗?


胡百敬: 看你的需求,你可以建立 linked server 连结到 Access,然后就可以直接以 SQL 语法存取,自然可以建立作业。


网友: 对于数据分析服务这块的看法是什么?


胡百敬: 就台湾的产业而言,因为制造与服务导向,需要节约各种成本,以及比客户更了解客户的需求,因此很重视对资料的深入分析。 AS 2005 比 2000 的功能庞大了一倍以上,且从设计的理念有根本上的差异,虽然还是保持了向前兼容,但若真要好好发挥 AS 2005,恐怕要重新考虑,重新设计。


网友: 如何处理海量数据,比如:导出、备份、查询等。


胡百敬: 切割功能、使用者、数据存放。数据再大量,都会有 80-20 的分布,80% 的人只用 20% 的数据,80% 的功能用 20% 的运算力就可以满足。将耗资源,不常用的大量数据与常用的功能切开。


网友: 能不能说说sql server的tsql与标准sql有什么区别?


胡百敬: T-SQL 是 ANSI SQL 的延伸,尽量支持 ANSI SQL 的规范,但若说最为符合的交集是 ANSI SQL 92,其后 ANSI SQL 99 和 2003 都只能陆陆续续增加支持。但 T-SQL 本身也有一大堆自家的特色。因此,若你需要跨不同的 DB,或是未来的趋势,可能需要稍为暸解 ANSI SQL,否则,若专注 SQL Server,则只需要读懂 T-SQL 就够了。


网友: 为什么SQL SERVER 2005那么占内存


姚巧枚: 这个部份可能要看你如何使用,才能了解为什么会那么占内存。


网友: 请问胡老师,nonclustered index中,会对主键排序么?


胡百敬: Primary Key 和 Nonclustered index 不可以混为一谈,Primary key 的基本要求是 unique、not null,另外,我们会选择符合需求的最小长度字段。而 Nonclustered index 就是数据表本身照所选择的索引字段顺序摆放。所以 Nonclustered index 就是数据表。换句话说,若你两者选的字段相同,自然就是相同的排序,若两者选择不同,PK 会有独立的索引结构,而 Clustered index 直接排序整个数据表。


网友: 怎么找出长时间没有使用过的存储过程吗。还有出错的存储过程。还有有的存储过程和函数执行时间太长,造成死锁有什么好办法吗?


胡百敬: SQL Server 的 Profiler 可以录制 SQL Server 的使用,你可以录制一段时间后,再分析 SQL Server 的使用。其实,我一直强调切割,过大的预存程序、数据表...没有效率也不好维护。同时会造成 lock、block、dead lock 等等。或许 SQL Server 2005 你可以用 Profiler 录制并分析 dead lock 等成因。若在 2000 则需要透过 DBCC TRACEON(1204,3605)。


网友: sqlserver 32位版 与 64位版 性能差距有多大?


胡百敬: 这样的询问有些空泛,我比较建议先商借机器测试。一般来说 64 bit 一定比 32 bit 好,但好多少,要看你的数据库设计,存取方式...无法一概而论。


网友: 有没有办法sql server的数据转换到mysql中?


胡百敬: 我没有实际试过...但若 mysql 支持 OLEDB、ODBC 就应该可以透过 SSIS 或 2000 的 DTS 转换若实在不行,一般我们会直接转成文本文件,如 csv,在用对方的工具转入。应该没有问题


网友: 请邹老大解释一下字段是什么?


邹建: 字段是表的列的集合, 表的纵轴。


网友: 能谈谈自增字段的工作原理吗?


胡百敬: 设定字段启动 identity 属性,并设定初始值(initial value)和递增值即可例如 create table tbl(c1 int identity(1,1))


网友: 处理海量数据时应遵循那些原则。


胡百敬: 切割需求、存放、使用人、批处理时间... 早期测试,调整架构小心设计索引避免长时间交易。