存档

文章标签 ‘sqlserver’,文章数:25

Most of us know how to update system table in sql server 2000, but there is rare information about how to do it in sql 2005. We know, Microsoft doesn't like anyone that is not in Microsoft company to update sql server system tables. But he always likes to leave a back door for himself. I think, the men, who commited themselves to design and develop SQL sever 2005 in Microsoft, would be the first ones know how to update SQL 2005 system table. And I look for related infomation in msdn again and again, finally, I conclued the following way to update sql 2005 system table.

Two necessary conditions for updating sql 2005 system table.

1. Start sql server 2005 instance in single-user mode.
2. Connect to sql server 2005 instance via DAC(dedicated administrator connections)

I will demo how to update sql 2005 system table as follows:

1. Enter windows services management : [start] -- [run] --[services.msc]
2. Focus on your sql server instance name. [right button] -- [property]
3. Find sqlservr.exe path in [Path to executable]

sql 2005 update system table -- services

For me the sqlservr.exe install path is "D:\Microsoft SQL Server\MSSQL.1\MSSQL\Binn" Let's see how to start sql 2005 instance in single-user mode.

前面有篇文章中,介绍利用游标和sp_spaceused来查看数据库内所有表占用的空间,并倒序排序。 统计SQL SERVER数据库内所有表占用空间并排序   下面介绍另外一种方法:利用sp_MSforeachtable替代游标来实现上篇文章中的类似功能。   use ossdb go  ——–查看所有表空间使用情况 CREATE TABLE #T(  name  nvarchar(256),  rows  varchar(11),  reserved varchar(18),  data  varchar(18),  index_size varchar(18),  unused  varchar(18) ) EXEC sp_MSforeachtable "INSERT #T EXEC sp_spaceused '?'" SELECT   * FROM #T ORDER BY Convert(int,SubString(data,1,Len(data)-3)) DESC drop table #T go   测试通过,将ossdb改成用户数据库名字即可。

演示在用java连接SQL Server数据库。用了一个简单的java程序作试验。

第一步:获得jdbc for SQL Server驱动程序
sqljdbc.jarsqljdbc4.jar   sqljdbc_auth.dll

为了支持向后兼容以及可能的升级方案,JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库:sqljdbc.jarsqljdbc4.jar

JAR 说明

sqljdbc.jar

sqljdbc.jar 类库提供对 JDBC 3.0 的支持。

sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。

注意: JDBC Driver 2.0 不支持 JRE 1.4。使用 JDBC Driver 2.0 时必须将 JRE 1.4 升级至 JRE 5.0 或更高版本。在某些情况下,您可能需要重新编译应用程序,因为它可能与 JDK 5.0 或更高版本不兼容。有关详细信息,请参阅 Sun Microsystems 网站上的文档。

 

sqljdbc4.jar

sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。它不仅包括 sqljdbc.jar 的所有功能,还包括新增的 JDBC 4.0 方法。

sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。在 JRE 1.4 或 5.0 上使用 sqljdbc4.jar 会引发异常。

注意: 如果应用程序必须在 JRE 6.0 上运行,即使该应用程序不使用 JDBC 4.0 功能,也应使用 sqljdbc4.jar

 

请注意,尽管驱动程序旨在与所有主要的 Sun 等效 Java 虚拟机一起工作并由这些虚拟机支持,但却是在 Sun JRE 5.0 或更高版本上进行测试的。

注意:JRE6的要选择sqljdbc4.jar

 

第二步:设置环境变量CLASSPATH

将下载下来的sqljdbc.jar或sqljdbc4.jar放到目录d:\shared\lib下。将环境变量CLASSPATH设置为:D:\shared\lib\sqljdbc.jar

set CLASSPATH=.;d:\shared\lib\sqljdbc.jar;  

(注意:第一个“.”,这个代表当前目录。)

 

第三步:编写一段简单的java程序。

下面的这段程序使用驱动sqljdbc.jar连接SQL Server 2005数据库,并提取master数据库中的用户表的ID和name两列信息。

SQL Server 2005服务器在本机,端口为1433。登录sa的密码为:secret

执行:select id,name,crdate from dbo.sysobjects where type='U'   这条语句返回当前数据库(这可在url中指定!)中的用户表的id和name列。

以下存储过程能够统计sqlserver数据库内所有用户表所占用的空间,并按照占用空间大小倒序排列。

--------------------------------------------------------------------------------------------------------------------------------

CREATE PROCEDURE GetAllTableSizes

AS

DECLARE @TableName VARCHAR(100)

DECLARE tableCursor CURSOR FORWARD_ONLY

FOR

select [name] from dbo.sysobjects

  where OBJECTPROPERTY(id, N'IsUserTable') = 1

  FOR READ ONLY

 

CREATE TABLE #TempTable

(

  tableName varchar(100),

  numberofRows varchar(100),

  reservedSize varchar(50),

  dataSize varchar(50),

  indexSize varchar(50),

  unusedSize varchar(50)

  一、使用 Microsoft OLE DB Provider For ODBC 链接MySQL    安装MySQL的ODBC驱动MyODBC 1、为MySQL建立一个ODBC系统数据源,例如:选择数据库为test ,数据源名称为myDSN 2、建立链接数据库   EXEC sp_addlinkedserver @server = ’MySQLTest’, @srvproduct=’MySQL’,   @provider = ’MSDASQL’, @datasrc = ’myDSN’   GO   EXEC sp_addlinkedsrvlogin   @rmtsrvname=’MySqlTest’,@useself=’false’,@locallogin=’sa’,@rmtuser=’mys   ql的用户名’,@rmtpassword=’mysql的密码’ 3、查询数据   SELECT * FROM OPENQUERY (MySQLTest ,’select * from 表’ )   下面这个不行:   SELECT * FROM OPENQUERY (MySQLTest ,’表’ )   注意:不能直接用select * from 链接服务器名.数据库名.用户名.表(或视图)   四部分名称查询数据,可能是个Bug. 二、使用 Microsoft OLE DB Provider For ORACLE 链接ORACLE 1、建立链接数据库  sp_addlinkedserver ’别名’, ’Oracle’, ’MSDAORA’, ’服务名’   GO  EXEC sp_addlinkedsrvlogin @rmtsrvname=’别名 ’,@useself=’false’,@locallogin=’sa’,@rmtuser=’oracle用户名 ’,@rmtpassword=’密码’ 2、查询数据   SELECT * FROM 别名..用户名.表(视图)   注意:四部分名称全部用大写 3、执行存储过程   使用OPENQUERY:   SELECT *   FROM OPENQUERY(别名, ’exec 用户名.存储过程名’)       三、设置链接服务器以访问格式化文本文件   用于 Jet 的 Microsoft OLE DB 提供程序可用于访问并查询文本文件。     若要直接创建访问文本文件的链接服务器而不将文件链接为 Access .mdb 文件中的表,请行 sp_addlinkedserver,如下例所示。   提供程序是 Microsoft.Jet.OLEDB.4.0,提供程序字符串为”Text”。数据源是包含文本文件的目录的完整路径名称。 schema.ini 文件(描述文本文件的结构)必须与此文本文件存在于相同的目录中。有关创建 schema.ini 文件的更多信息,请参见 Jet 数据库引擎文档。   –Create a linked server.   EXEC sp_addlinkedserver txtsrv, ’Jet 4.0’,   ’Microsoft.Jet.OLEDB.4.0’,   ’c:\data\distqry’,   NULL,   ’Text’   GO   –Set up login mappings.   EXEC sp_addlinkedsrvlogin txtsrv, FALSE, NULL, Admin, NULL   GO   –List the tables in the linked server.   EXEC sp_tables_ex txtsrv   GO   –Query one of the tables: file1#txt   –using a 4-part name.   SELECT *   FROM txtsrv…[file1#txt]   [...]

oracle的版本为:10gr2,10.2.0.1.0。 利用oracle中的hsodbc连接sqlserver2005数据库。已成功连接。db link的名字为: sql2005fororacle。 执行:select count(*) from sysdatabases@sql2005fororacle; 能够成功执行。 但是,在执行: select count(*) from sysobjects@sql2005fororacle;却导致系统出现了死机症状,无法响应任务的操作,任务管理器看到cpu利用率不高。无奈,只能强制关机。 在alert_<SID>.log文件中发现有这么几句: Memory Notification: Library Cache Object loaded into SGA Heap size 2225K exceeds notification threshold (2048K) KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw== 原来遇到oracle的bug了。上网检索,说 是oracle的一个bug在10g10.2.0.1的各个平台上都出现过。 Oracle10g中,在load较大的对象进library cache中时,会记录以上警告。在版本10.2.0.1中,这个定义大对象的阈值是2M,这是有隐含参数 _kgl_large_heap_warning_threshold 指定的从10.2.0.2起,这个参数的默认值被修改为50M。 解决方法1 :升级到10.2.0.2或者以上。 解决方法2 : SQL> alter system set "_kgl_large_heap_warning_threshold"=20388608 scope=spfile ; SQL> shutdown immediate SQL> [...]

dbcc writepage是sqlserver 2000 和 2005中未公开的命令,也就是说使用这些未官方支持的命令出现的任何后果与MS无关。 同样,本文仅仅演示dbcc writepage的使用,您在操作时出现的任何后果与本人无关。 dbcc writepage的语法为:    dbcc writepage ({ dbid, ‘dbname’ }, fileid, pageid, offset, length, data) 下面演示dbcc writepage的使用方法: —————————————————————————- 第一步:创建一个测试表 1> create table test (id int not null,name varchar(30) null) 2> go 1> insert into test 2> select 1,'china' 3> go (1 行受影响) 1> insert into test 2> select 2,'beijing' 3> [...]

What does the “I/O request” error below represent?   2008-04-21 13:26:42.480 spid364      Microsoft SQL Server 2005 – 9.00.3177.00 (Intel X86) 2008-04-22 16:30:02.140 spid6s       SQL Server has encountered 2 occurrence(s) of I/O requests taking longer than 15 seconds to complete on file [F:\sql data files\xxx.MDF] in database [xxx] (5).  2008-04-22 16:32:08.780 spid6s       SQL Server has encountered [...]