SQL Server撰写的日志

在Windows XP 中安装SQL SERVER 2000企业版

SQL Server 2000企业版、标准版都只能安装于服务器版的操作系统中,而能够在Windows XP上安装的有个人版、开发版、MSDE(Microsoft SQL Server Desktop Engine),大家通过搜索引擎找到的这方面的文章最终安装的其实是MSDE加上企业管理器。

MSDE 与 SQL SERVER 最主要的区别是
1、MSDE 没有图形化的用户操作界面,但是可以通过安装企业版中的企业管理器来管理MSDE。
2、MSDE 的并发数只有25个。当使用 SQL Server 2000 Desktop Engine 或 Microsoft 数据引擎 (MSDE) 1.0 时,单个数据库的数据文件大小不能超过 2 GB(数据文件+日志文件的大小可以大于2GB)。
3、MSDE 是免费的, SQL SERVER 是收费的。

MSDE各SQL Server个人版中特有的一个功能并发控制:DBCC CONCURRENCYVIOLATION的使用说明
Transact-SQL Reference (SQL Server 2000)
DBCC CONCURRENCYVIOLATION

在Windows XP 中安装MSDE后SA是无法通过登陆的(但是使用Windows身份验证是没有问题的),因为你还没有与信任SQL SERVER连接相关联。这个需要对系统注册表进行修改:
    在运行中输入regedit打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER],这个项里面有一个键值LoginMode,默认下,值是1,现在将值改为2,重启电脑。
    再打开企业管理,使用SA连接MSDE,是不是OK了。

附上SQL Server 2000的联机丛书的部分内容:

SQL Server 2000 的各种版本所支持的操作系统

下表列出各 Microsoft® SQL Server™ 2000 版本支持的运行服务器软件的操作系统。

操作系统 企业版 标准版 个人版 开发版 Desktop Engine (MSDE 2000) SQL Server CE 企业评估版
Microsoft Windows® Server 2003 DataCenter Edition 支持 支持 支持 支持 支持 暂缺 支持
Windows Server 2003 Enterprise Edition 支持 支持 支持 支持 支持 暂缺 支持
Windows Server 2003 Standard Edition 支持 支持 支持 支持 支持 暂缺 支持
Windows Server 2003 Web Edition 暂缺 暂缺 N/A N/A 支持 N/A N/A
Windows XP Professional Edition N/A N/A 支持 支持 支持 暂缺 支持
Windows XP Home Edition N/A N/A 支持 支持 支持 N/A 支持
Microsoft Windows 2000 DataCenter 支持 支持 支持 支持 支持 N/A 支持
Windows 2000 Advanced Server 支持 支持 支持 支持 支持 暂缺 支持
Windows 2000 Server 支持 支持 支持 支持 支持 暂缺 支持
Windows 2000 Professional 暂缺 暂缺 支持 支持 支持 暂缺 支持
Microsoft Windows NT® 4.0 Server 企业版 支持 支持 支持 支持 支持 N/A 支持
Windows NT 4.0 Server 支持 支持 支持 支持 支持 N/A 支持
Windows NT 4.0 Workstation N/A N/A 支持 支持 支持 N/A 支持
Microsoft Windows Millennium Edition N/A N/A 支持 N/A 支持 N/A N/A
Microsoft Windows 98 暂缺 暂缺 支持 暂缺 支持 暂缺 暂缺
Microsoft Windows CE 暂缺 暂缺 暂缺 暂缺 暂缺 支持 暂缺

说明  来自除 SQL Server Windows CE 外的所有 SQL Server 2000 版本的客户端软件可在任何版本的 Microsoft Windows NT、Microsoft Windows 2000、Microsoft Windows Server 2003、Windows Millennium Edition 和 Microsoft Windows 98 上运行。只有服务器组件(如数据库引擎和分析服务器)必须在特定版本的操作系统上使用。例如,虽然 SQL Server 2000 企业版不在 Windows 2000 Professional、Windows NT Workstation 或 Windows 98 上运行,但是也能使用 SQL Server 2000 企业版光盘在这些操作系统上安装客户端软件。SQL Server 2000 中文版不支持英文版的 NT 4.0 企业版。

来自 SQL Server CE 的所有软件以独占方式在 Windows CE 操作系统上运行。

SQL Server 2000联机丛书不能打开文件:SQL80.col

将SQL Server 2000升级后打开联机丛书时出现如下错误提示:

—————————
SQL Server 2000 联机丛书
—————————
帮助
—————————
不能打开文件: D:\Program Files\Microsoft SQL Server\80\Tools\Books\SQL80.col 。
—————————

经过实验发现将 SQL Server 2000 联机丛书 重新安装即能解决“打开文件:SQL80.col”的问题(至于原因,则不明白)。

最新的 SQL Server 2000 联机丛书 的下载地址如下:

 联机丛书 下载详细信息页面
http://www.microsoft.com/downloads/details.aspx?familyid=A6F79CB1-A420-445F-8A4B-BD77A7DA194B&displaylang=zh-cn

联机丛书 直接下载地址
http://download.microsoft.com/download/7/b/5/7b5ff59f-1824-4808-b8ff-6bb719b40b5a/sqlbolsetup.msi
或者
http://www.microsoft.com/downloads/thankyou.aspx?familyId=a6f79cb1-a420-445f-8a4b-bd77a7da194b&displayLang=zh-cn

SQL Server企业管理器:不能产生 SSPI 上下文

在"SQL Server 2000企业管理器"打开曾经设置好的数据库服务器的连接时,出现以下错误提示:

—————————
SQL Server 企业管理器
—————————
未能建立与 SQLCLUSTER02\SQLDATA02 的连接。

原因: 不能产生 SSPI 上下文。

请验证 SQL Server 是否在运行并检查  SQL Server 注册属性(通过右击 SQLCLUSTER02\SQLDATA02 节点),然后重试。
—————————

解决方案:
       修改注册在"SQL Server 2000企业管理器"中的数据库服务器连接的注册属性,重新输入密码。

参考文章:
如何排查“Cannot generate SSPI context”(无法生成 SSPI 上下文)错误消息

实现数据库的版本控制的思路

    数据库的版本控制与代码版本控制的区别在于数据库中的生产数据是现场创造的,当我们的表结构发生改变时,不能直接用drop table然后再create table,因为这样会导致生产数据丢失。而代码则完全由开发人员创造,可以用完全覆盖的方式升级。由于这点不同,致使数据库在版本控制的过程中必然要采用与代码不同的方法。

    软件过程有一个过程方法叫迭代过程。对数据库的版本化,我们也可以采用这种类似的方法——后一个版本的脚本依赖于前一个版本的脚本,即当你要把数据库升级到第n个版本时,你必须先把数据库升级到第(n-1)个版本,以此递归。

我对对于数据库版本化的具体思路如下:
1.只存在一个基线版本;

2.在基线版本后的修改都是修正版本;

3.版本号遵从的格式通常是:主版本号.次版本号.修正号
 修正版本SQL脚本的命名规则(表,视图,存储过程,用户,角色,规则,默认值,用户定义的数据类型,用户定义的函数,全文目录);
 a.涉及表、视图、存储过程、触发器的增加  版本号为:V1.1.0.0。(主版本号不变,次版本号加一,修正号归零)
 b.涉及表、视图、存储过程、触发器的更改、删除 版本号为:V1.2.1.0。(主版本号和次版本号不变,修正号加一)
 c.向表中增加、删除初始化数据的变化  版本号为:V1.2.1.1。(在修正号后增加一个标识)

4.SQL脚本的格式:
 每一个版本号为一个目录,目录下分别存放处理表、视图、存储过程等的SQL脚本;
/Database
├─V1.0.0.0
│      Full-Text.sql
│      Procedures.sql
│      Tables.sql
│      Views.sql

├─V1.1.0.0
│      Tables.sql
│      Views.sql

├─V1.1.1.0
│      Full-Text.sql
│      Procedures.sql
│      Tables.sql
│      Views.sql

├─V1.1.1.1
│      Tables.sql

└─V1.1.2.0
        Full-Text.sql
        Procedures.sql
        Tables.sql
        Views.sql

5.关于数据库中的版本说明及更新记录:
 在每个数据库中新建一个表,名称为DBVersion,用于记录数据库经历的版本记录以及最新的版本信息;

可用于SQL Server 2000的SQL代码
  1. if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[DBVersion]‘and OBJECTPROPERTY(id, N‘IsUserTable’) = 1)   
  2. drop table [dbo].[DBVersion]   
  3. GO   
  4. CREATE TABLE [dbo].[DBVersion] (   
  5.  [DB_ID] [int] IDENTITY (1, 1) NOT NULL ,   
  6.  [DB_Version] [varchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,   
  7.  [DB_Update_Time] [datetime] NOT NULL ,   
  8.  [DB_Remark] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL    
  9. ON [PRIMARY]   
  10. GO  

 

6.编写程序以实现以下功能:
 读取Database目录的各个版本中的SQL文件,以实现升级或者新建数据。
 对于升级数据库需要能够根据DBVersion表中的信息自动选择需要导入的SQL文件;或者提示用户当前可以升级到哪一些版本。
 同时还需要有校验Database中版本的文件是否完整(包括版本完整和文件完整,这就需要存在一个校验文件);

 

参考Linux内核版本号的命名规则:

Linux内核 版本号命名规则
Linux内核的版本号是有一定的规则的,版本号遵从的格式通常是:主版本号.次版本号.修正号。
主版本号和次版本号标志着重要的功能变动;修正号表示较小的功能变动。
以2.6.12版本为例,
2代表主版本号,6代表次版本号,12代表修正号。
其中次版本号还有特定的意义:如果次版本
号是偶数,则表示该内核是一个可放心使用的稳定版;如果次版本号是奇数,则表示该内核加
入了一些测试的新功能,是一个内部可能存在BUG的测试版
。如:2.5.74表示是一个测试版就的内核,2.6.12表示是一个稳定版的内核。
我们可以从Linux官方网站上:http://www.kernel.org/下载最新的内核代码!
 

SQL Server 2000 各种对象的最大值(数量或大小)

管理的一个数据库大小将近10G,开始担心数据库会不会过大,查询SQL Server的联机丛书后发现自己的担心真的是多余的。

SQL Server 2000数据库文件大小(数据、日志)最大可以支持 32 TB 的文件

截取SQL Server 2000联机丛书中的最大容量说明方便大家查阅。

SQL Server数据库各对象的最大容量说明

下表说明在 Microsoft SQL Server 数据库中定义的,或在 Transact-SQL 语句中引用的各种对象的最大值(数量或大小)。下表不包含 Microsoft® SQL Server 2000™ Windows® CE 版。

  最大值(数量或大小)
对象 SQL Server 7.0 SQL Server 2000
批处理大小 65,536 * 网络数据包大小1 65,536 * 网络数据包大小1
每个短字符串列的字节数 8,000 8,000
每个 textntext、或 image 列的字节数 2 GB-2 2 GB-2
每个 GROUP BY、ORDER BY的字节数 8,060  
每个索引中的字节数 900 9002
每个外键的字节数 900 900
每个主键的字节数 900 900
每行字节数 8,060 8,060
存储过程源文本中的字节数 批处理大小之较小者或者 250 MB 批处理大小之较小者或者 250 MB
每个数据表的聚集索引数 1 1
GROUP BY、ORDER BY 中的列数 只受字节数限制  
GROUP BY WITH CUBE 或 WITH ROLLUP 语句中的列数或表达式数目 10  
每个索引的列数 16 16
每个外键的列数 16 16
每个主键的列数 16 16
每个基础数据表的列数 1,024 1,024
每个SELECT 语句的列数 4,096 4,096
每个INSERT 语句的列数 1,024 1,024
每个客户端的连接个数 已配置连接的最大值 已配置连接的最大值
数据库大小 1,048,516 TB3 1,048,516 TB3
每个 SQL Server 实例的数据库个数 32,767 32,767
每个数据库的文件组个数 256 256
每个数据库的文件个数 32,767 32,767
文件大小(数据) 32 TB 32 TB
文件大小(日志) 4 TB 32 TB
每个数据表的外键表引用 253 253
标识符长度(以字符计) 128 128
每台计算机的实例数 暂缺 16
包含 SQL 语句的字符串长度(批处理大小) 65,536 * 网络数据包大小1 65,536 * 网络数据包大小1
每个连接的锁数 每个服务器的最大锁数 每个服务器的最大锁数
每个 SQL Server 实例的锁数 2,147,483,647(静态)
SQL Server 40% 的内存(动态)
2,147,483,647(静态)
SQL Server 40% 的内存(动态)
嵌套存储过程层数 32 32
嵌套子查询 32 32
嵌套触发器层数 32 32
每个数据表的非聚集索引个数 249 249
SQL Server 实例中同时打开的对象个数4 2,147,483,647(或可用内存) 2,147,483,647(或可用内存)
每个数据库中的对象个数 2,147,483,6474 2,147,483,6474
每个存储过程的参数个数 1,024 1,024
每个数据表的 REFERENCE 个数 253 253
每个数据表的行数 受可用存储资源限制 受可用存储资源限制
每个数据库的数据表个数 受数据库中的对象个数限制4 受数据库中的对象个数限制4
每个 SELECT 语句的数据表个数 256 256
每个数据表的触发器个数 受数据库中的对象个数限制4 受数据库中的对象个数限制4
每个数据表的 UNIQUE 索引个数或约束个数 249个非聚集索引和 1 个聚集索引 249个非聚集索引和 1 个聚集索引

 

Sql Server 2000附加数据库出现1813错误的解决方法

今天进行了一错误操作。

数据库xxzx_discuz,因生成大量日志使日志文件’xxzx_discuz_Log.LDF’ 占满了磁盘所有空间,使网站无法正常使用数据库。

自己图省事分离数据库xxzx_discuz后,直接删除’xxzx_discuz_Log.LDF’ (因为文件太大,无法存放到回收站),重新附件到SQL Server时出现两个提示:
——————————————————————————————————————————
SQL Server 企业管理器
—————————
为日志文件指定的文件名不正确。
将创建新的日志文件。
要继续吗?
—————————
是(Y)   否(N)  
——————————————————————————————————————————
Microsoft SQL-DMO (ODBC SQLState: 42000)
—————————
错误 1813: 未能打开新数据库 ‘xxzx_discuz’。CREATE DATABASE 将终止。
设备激活错误。物理文件名 ‘S:\Program Files\Microsoft SQL Server\MSSQL\data\xxzx_discuz_Log.LDF’ 可能有误。
—————————
确定  
——————————————————————————————————————————

从而无法将数据库正常附加到SQL Server 2000,正常情况下这样操作是没有问题的,SQL Server会重新生成日志文件,但是因为之前出现了磁盘空间不足,日志文件不完整,从而造成了无法正常附加。

解决办法如下(从网上找来的):

0.备份数据文件‘xxzx_discuz_Log.MDF’
1.新建一个同名的数据库‘xxzx_discuz’ 

2.再停掉sqlserver服务(注意不要分离数据库)
3.用原数据库的数据文件‘xxzx_discuz_Log.MDF’ 覆盖掉新建的数据库

 
4.再重启sqlserver服务
5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
6.完成后一般就可以访问数据库中的数据了。这时,数据库本身一般还有问题,解决办法是:利用数据库的脚本创建一个新的数据库,然后通过DTS将数据导进去就行了.
SQL代码
  1. use master   
  2. go   
  3. sp_configure ‘allow updates’,1 reconfigure with override   
  4. go   
  5. update sysdatabases set status =32768 where name=‘置疑的数据库名’  
  6. go   
  7. sp_dboption ‘置疑的数据库名’’single user’‘true’  
  8. go   
  9. dbcc checkdb(‘置疑的数据库名’)    
  10. go   
  11. update sysdatabases set status =28 where name=‘置疑的数据库名’  
  12. go   
  13. sp_configure ‘allow updates’, 0 reconfigure with override   
  14. go    
  15. sp_dboption ‘置疑的数据库名’’single user’‘false’  
  16. go  
 
特别注意最后一步中的说明“这时,数据库本身一般还有问题,解决办法是:利用数据库的脚本创建一个新的数据库,然后通过DTS将数据导进去就行了