免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5954 | 回复: 8
打印 上一主题 下一主题

sql 统计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-20 18:26 |只看该作者 |倒序浏览
创建并维护索引

统计介绍

你可以在索引上创建统计,也可以在列上创建统计。因为查询优化器使用统计来优化查询,那么必须知道统计是如何获取、存储、创建、更新和浏览的。统计的内容包括获取、存储、创建、更新和浏览统计信息。

如何获取统计
SQL Server通过读取所有的列值或列值的采样,产生一个值的平均分布和分类列表(Distribution Steps)来获取统计。SQL Server通过执行全扫描或采样扫 描,然后通过选择采样来产生Distribution Step。
SQL Server根据表中的行数动态地确定采样行的百分比。在获取统计时,查询优化器执行全扫描或行的采样。
􀂋 SAMPLE选项是更新和创建统计的默认选项。
􀂋 在以下情况下,使用FULLSCAN选项:
创建了索引
在CREATE STATISTICS语句中指定了FULLSCAN选项。
执行了UPDATE STATISTICS语句。
采样从表中的数据库页上或从统计需要的列的最小索引上随机地进行选取。在从硬盘上读取数据后,数据页上的所有行都用于更新统计信息。
当查询优化器获取采样时:
􀂋 表的尺寸决定了采用的方法。
􀂋 采样最小数目的值来衍生出有用的统计。
􀂋 如果指定的行数太小而不能使用,查询优化器自动根据表中现有的行数纠正采样。
􀂋 统计只在合成索引中定义的第一列上。


6.4.2 如何存储统计
统计存储在sysindexes系统表的statblob列中。
在 statblob列中存储的每一个值被称为Distribution Step。Distribution Step指的是采样数据之间的距离,或在下一个样本被采样和存储前跨越了多少行。在索引中的第一个和最后一个关键字通常都被包含到统计中。如果统计中有 300个值,结束点就是第300个值。
除了存储Distribution Step,Statblob列还存储以下内容:
􀂋 统计最后一次被更新的时间和日期
􀂋 表中的行数
􀂋 用以创建histogram和确定密度的被采样行数
􀂋 Distribution Step的数目
􀂋 平均关键字长度
􀂋 单个列和所有组合列的密度
􀂋 落入histogram Step中的行数
􀂋 与histogram Step上部值相等的行数。
􀂋 在histogram Step中明确值的数目。
注意:Statblob的列被定义为image数据类型。

6.4.3创建统计
你可以自动地和人工地创建统计。但是,应该让SQL Server自动创建统计。
1、自动创建统计
当auto create statistics数据库选项默认地设置为ON时,SQL Server自动为以下情况创建统计:
􀂋 索引的列包括了数据
􀂋 用于连接判断或WHERE子句的非索引列
在优化查询时,查询优化器激活统计的自动创建。如果查询优化器确定统计丢失了,该自动创建过程就是一个不利条件。执行规划将包括统计创建的行为,该行为要求在处理查询时有额外的时间。
2、人工创建统计
可以执行CREATE STATISTICS语句来创建histogram和指定列的相关密度组。可以在以下列上人工创建统计:
􀂋 没有被索引的列。
􀂋 组合索引中除了第一列外所有的列。
􀂋 满足诸如可以创建索引之类条件的计算列。
􀂋 没有image,text和ntext数据类型定义的列。
当列不能从创建索引获益时,人工创建统计是有用的,因为列上的统计有助于创建更多的最佳执行规划。因为在优化查询时允许查询优化器使用这些列,这些列上的统计可以减少索引上的费用花销。
注意:为了人工创建表上的统计,你必须是表的所有者。
语法
CREATE STATISTICS statistics_name ON {table┃view}(column[,⋯n])

6.4.4 统计的更新
随着时间变化,统计会变得过时,这样会影响查询优化器的性能。
当统计信息变得过时时,SQL Server更新统计信息。在列中的数据卷相对于改变数据的数量来说,决定了更新的频率。例如:
􀂋 包括有10,000行的表统计在1,000个索引值被改变时需要更新,因为1,000个索引代表了表的很大一部分内容。
􀂋 包括有一千万条索引条目的表统计在1,000条索引的值改变时不需要更新,因为1,000条索引值只代表该表中的一小部分。
SQL Server经常取样少量的行。小于8MB的表通常进行全扫描以收集统计。
注意:在统计过时或失效时,SQL Server发布一条警告。当通过使用执行规 划浏览执行规划时,该警告出现。可以使用SQL配置文件来管理Missing Column statistics 事件类。该事件类指明何时统计丢失。
1、自动更新统计
你应该允许SQL Server自动更新统计。在auto update statistics数据库选项被设置为ON时,SQL Server自动更新已经过时的现有的统计。
例如,如果在统计被创建或更新的最后一次时,表被更新了,SQL Server自动更新统计来优化使用该表的查询。
在优化查询时,查询优化器激活统计的自动更新。如果查询优化器确定统计过时了,那么这将是很糟糕的事。该执行规划包括统计更新的操作,在查询的过程中需要额外的时间。
2、人工更新统计
可以执行UPDATE STATISTICS语句来为在指定的表中的一个或多个统计更新关于关键字分布的信息。在以下情况下,需要为表或列人工更新统计:
􀂋 在数据被放入表之前创建索引
􀂋 在表被截断时
􀂋 向包括最小数据或没有数据的表中添加行并且计划立即查询该表时。
语法
UPDATE STATISTICS table┃view [index┃(statistics_name[,⋯])]
注意:执行sp_helpindex带有表名的系统存储过程可以查看索引的名字和描述。

6.4.5浏览统计
通过执行DBCC SHOW_STATISTICS语句,可以为索引或列在分布页中浏览统计信息。
下表描述了关于DBCCSHOW_STATISTICS语句返回的信息。


语法
DBCC_SHOW_STATISTICS
在为指定的查询做高端性能调整时,浏览统计非常有用。在大多数应用程序中,没有必要浏览统计。
sybase sqlserver 同源

本文由微尔IT网编辑,任何媒体不得转载,否则将追究法律责任
上篇文章: 维护索引 数据碎片 DBCC SHOWCONTIG语句 DROP_EXISTING选项
下篇文章: 安装和配置DHCP服务:Windows Sever 2003 搭建DHCP服务器

论坛徽章:
0
2 [报告]
发表于 2011-06-24 14:00 |只看该作者
http://xhsjs.com/NET/ZhiShi/100001038.shtml
http://bluedest.iteye.com/blog/830511
http://topic.csdn.net/u/20100512 ... dfdfa118.html?59343
尾日志备份
对于将数据库恢复到即时点,很好理解也很好操作。下面我们重点来研究将数据库恢复到故障点时必不可少的操作,即尾日志备份。

但是,需要注意的是,如果在Management Studio中按照默认设置是永远无法完成尾日志备份的。

14.2.1  图形化尾日志备份操作
图14-7所示为选择日志备份的数据库的【选项】选项卡。默认情况下选择的是【截断事务日志】单选按钮,这样将永远无法备份尾日志。



提示:要完成尾日志备份,需要在图14-7中选择“备份日志尾部,并使数据库处于还原状态”选项。



图14-7  【选项】选项卡

14.2.2  用Backup Log语句完成尾日志备份
也可以直接执行Backup Log语句来完成日志备份。下面介绍该语句的语法形式。

1.语法形式
Backup Log语句的语法形式如下。

BACKUP LOG { database_name | @database_name_var }

{

     TO <backup_device> [ ,...n ]  

[ [ MIRROR TO <backup_device> [ ,...n ] ] [ ...next-mirror ] ]

     [ WITH

     [ BLOCKSIZE = { blocksize | @blocksize_variable } ]

     [ [ , ] { CHECKSUM | NO_CHECKSUM } ]

     [ [ , ] { STOP_ON_ERROR | CONTINUE_AFTER_ERROR } ]

     [ [ , ] DESCRIPTION = { 'text' | @text_variable } ]

     [ [ , ] EXPIREDATE = { date | @date_var }

     | RETAINDAYS = { days | @days_var } ]

     [ [ , ] PASSWORD = { password | @password_variable } ]

     [ [ , ] { FORMAT | NOFORMAT } ]

     [ [ , ] { INIT | NOINIT } ]

     [ [ , ] { NOSKIP | SKIP } ]

     [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]

     [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]

     [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]

     [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]

     [ [ , ] NO_TRUNCATE ]

     [ [ , ] { NORECOVERY | STANDBY = undo_file_name } ]

     [ [ , ] { NOREWIND | REWIND } ]

     [ [ , ] { NOUNLOAD | UNLOAD } ]

     [ [ , ] RESTART ]

     [ [ , ] STATS [ = percentage ] ]

     [ [ , ] COPY_ONLY ]

     ]

}

2.主要参数
对于其他参数读者可以参阅联机丛书的有关说明。与备份尾日志有关的主要参数如下。

—  NO_TRUNCATE:只与BACKUP LOG一起使用。指定不截断日志,并使数据库引擎尝试执行备份,而不考虑数据库的状态。该选项允许在数据库损坏时备份日志。

—  BACKUP LOG的NO_TRUNCATE选项相当于同时指定COPY_ONLY和CONTINUE_AFTER_ERROR。

—  NO_LOG | TRUNCATE_ONLY:通过放弃活动日志以外的所有日志,无须备份复制日志即可删除不活动的日志部分,并截断日志。该选项会释放空间。因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG和TRUNCATE_ONLY是同义的。使用NO_LOG或TRUNCATE_ONLY截断日志后,记录在日志中的更改不可恢复。为了进行恢复,请立即执行BACKUP DATABASE以执行完整备份或完整差异备份。

3.使用方法
要备份尾日志,主要使用Truncate_Only参数就可以。本书的实例代码如下。

BACKUP LOG [db_test] TO  DISK = N'C:\test2.bak'

WITH  NO_TRUNCATE ,

NOFORMAT,

NOINIT,  

NAME = N'db_test-事务日志 备份',

SKIP,

NOREWIND,

NOUNLOAD,  

NORECOVERY ,  

STATS = 10

GO

来源:http://book.csdn.net/bookfiles/473/10047316591.shtml


SQLServer备份,还原,尾日志备份 方法
ASP.NET编程爱好QQ群:44074249
作者:管理员   发布时间:2011-2-14   阅读(61)


从日志回复数据库 :自己一步一步按照说明试着看
--创建测试数据库   
  CREATE   DATABASE   Db   
  GO   
--对数据库进行备份   
  BACKUP   DATABASE   Db   TO   DISK='c:\db.bak'   WITH   FORMAT   
  GO   
--创建测试表   
  CREATE   TABLE   Db.dbo.TB_test(ID   int)   
--延时1秒钟,再进行后面的操作(这是由于SQL   Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)   
  WAITFOR   DELAY   '00:00:01'   
  GO   
--假设我们现在误操作删除了   Db.dbo.TB_test   这个表   
  DROP   TABLE   Db.dbo.TB_test   
--保存删除表的时间   
  SELECT   dt=GETDATE()   INTO   #   
  GO   
--在删除操作后,发现不应该删除表   Db.dbo.TB_test   
--下面演示了如何恢复这个误删除的表   Db.dbo.TB_test   
--首先,备份事务日志(使用事务日志才能还原到指定的时间点)   
  BACKUP   LOG   Db   TO   DISK='c:\db_log.bak'   WITH   FORMAT   
  GO   
--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行)   
  RESTORE   DATABASE   Db   FROM   DISK='c:\db.bak'   WITH   REPLACE,NORECOVERY   
  GO   
--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早   
  DECLARE   @dt   datetime   
  SELECT   @dt=DATEADD(ms,-20,dt)   FROM   #     --获取比表被删除的时间略早的时间   
  RESTORE   LOG   Db   FROM   DISK='c:\db_log.bak'   WITH   RECOVERY,STOPAT=@dt   
  GO   
--查询一下,看表是否恢复   
  SELECT   *   FROM   Db.dbo.TB_test   
   
  /*--结果:   
  ID                       
  -----------     
   
  (所影响的行数为   0   行)   
  --*/   
   
  --测试成功   
  GO   
   
  --最后删除我们做的测试环境   
  DROP   DATABASE   Db   
  DROP   TABLE   #



sqlserver日志的备份还原笔记
文章分类:数据库

一.备份数据库

BACKUP DATABASE test to disk ='D:/cbmBack/previousDay.bak' with init,name='full backup'

备注:with init表示指针移动文件头部去写。



二.备份日志

BACKUP LOG  test to disk ='D:/cbmBack/log.bak' with init

备注:在备份周期开始的时候,要加上with init,表示文件的写指针移动文件头部。

在备份周期内部,就不要加with init了,表示备份的日志附加到原文件之后。



三.查看备份文件

restore headeronly from disk='D:/cbmBack/log.bak'

restore headeronly from disk='D:/cbmBack/previousDay.bak'



四.备份尾日志

BACKUP LOG test TO  DISK = N'D:/cbmBack/log.bak'

WITH  NO_TRUNCATE ,

NOFORMAT,

NOINIT,

NAME = N'db_test-事务日志备份',

SKIP,

NOREWIND,

NOUNLOAD,

NORECOVERY ,

STATS = 10

备注:如果数所据库的备份程序还不到10分钟间隔,而没有备份日志,这个时候要手动备份日志,就用以上语句。

这里有个疑问,就是备份尾日志和备份普通时候的日志有什么不一样?我测试了没什么不同,这可能是因为测试的时候,数据库是好着的,如果遇到数据库已经崩溃了,可能就要用以上的语句才能把尾日志备出来。







五.恢复数据库

1.首先恢复完整备份

RESTORE DATABASE test FROM  DISK = N'D:/cbmBack/previousDay.bak'

WITH  FILE = 1,

NORECOVERY,

NOUNLOAD,

REPLACE,

STATS = 10



2.恢复非尾日志

RESTORE LOG test FROM  DISK = N'D:/cbmBack/log.bak'

WITH  FILE =1,

NORECOVERY,

NOUNLOAD,

STATS = 10



3.恢复尾日志

RESTORE LOG test FROM  DISK = N'D:/cbmBack/log.bak'

WITH  FILE =2,

RECOVERY,

NOUNLOAD,

STATS = 10

备注:尾日志恢复的时候,要用RECOVERY





利用bak恢复数据库,强制还原(REPLACE)
STATS = 10 每完成10%显示一条记录
DBTest和DBTest_log是上面g:\back.Bak里的逻辑文件
*/
USE master
RESTORE DATABASE DB
   FROM DISK = 'g:\back.Bak'
   WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB.mdf',
   MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DB_log.ldf',
STATS = 10, REPLACE
GO
++++++++++++++++++++++++++++++++

/**//*
备份数据DB 到.bak文件。然后利用此bak文件恢复一个新的数据库DBTest。
*/
USE master
BACKUP DATABASE DB
  TO DISK = 'g:\DBBack0930.bak'
RESTORE FILELISTONLY
  FROM DISK = 'g:\DBBack0930.bak'
RESTORE DATABASE DBTest
  FROM DISK = 'g:\DBBack0930.bak'
  WITH MOVE 'DBTest' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest.mdf',
  MOVE 'DBTest_log' TO 'E:\Program Files\Microsoft SQL Server2005\Data\DBTest_log.ldf'
GO



一.线程2select



线程1
       

线程2
       

条件
       

结果

Insert多条记录
       

select
       

TRANSACTION_READ_UNCOMMITTED
       

线程2无阻塞,直接取到了线程1中的实时操作,虽然这些操作未提交

Insert多条记录
       

select
       

TRANSACTION_READ_COMMITTED
       

线程2阻塞,直到线程1提交事务,才取到了线程1中的所有操作结果

Insert多条记录
       

select
       

TRANSACTION_SERIALIZABLE
       

内容同

TRANSACTION_READ_UNCOMMITTED









如果在事务中应用了select 的串行化事务,则其他事务要等这个select结束
二.线程2update

线程1
       

线程2
       

条件
       

结果

Update某条记录
       

Update线程1相同的记录
       

任何条件
       

线程2阻塞,直到线程1提交事务,接着线程2才执行自己的update操作

Update某条记录
       

Update线程1不相同的记录
       

任何条件
       

线程2无阻塞,直接提交自己的事务


三.线程2insert

线程1
       

线程2
       

条件
       

结果

Delete所有记录
       

Insert一条记录
       

非TRANSACTION_SERIALIZABLE
       

线程2无阻塞,直接插入并提交,线程1只删除它那个瞬间可以删除的数据

Delete所有记录
       

Insert一条记录
       

TRANSACTION_SERIALIZABLE
       

线程2阻塞,直到线程1结束,然后线程2才插入记录。最后表中看到的记录和上面一项的结果一样
四.线程2delete

线程1
       

线程2
       

条件
       

结果

Insert一条记录
       

Delete 所有记录
       

任何条件
       

线程2阻塞,直到线程1提交事务,接着线程2才执行自己的delete操作

Insert一条记录
       

Delete 某条记录
       

任何条件
       

线程2无阻塞,直接删除并提交







Connection 设置事务级别,是告诉别人我的事务有多高.







1.读已提交

如果另一个事务对本事务的读有影响,并且另一个事务没有结束,则本事务的读操作等另一事务结束

2.update ,delete

在update一条记录时,如果另一个事务也在update此记录(包括update 表 set field=value  无where条件),则本事务等另一个事务结束



3.insert操作





两个线程开始执行的瞬间,有两个作用域,如果两个作用域存在交集,则后来的线程等待。

论坛徽章:
0
3 [报告]
发表于 2011-06-24 14:06 |只看该作者
本帖最后由 liyihongcug 于 2011-06-24 14:41 编辑

SQL Server 找回没有备份的数据

问题:

  有一个库, 做的是全备份+日志备份,在2011年3月8日,14点产生一次全备份,在14:10分产生日志备份,在14:12分down          机,请问怎么能恢复 14:10 到 14:12分中的这段数据(前提,前期日志备份全部正确可用),机器硬盘完好。

使用方法:

  1.如果数据库已经损坏

    如果数据库已经损坏,可以使用 backup log {数据库名} to {磁盘逻辑地址} with no_truncate 备份数据库。

    因为可能存在对受损数据库备份日志尾部时,日志备份中正常捕获的部分元数据可能不可用。

    

    尾日志备份可捕获日志尾部,即使数据库离线、损坏或缺少数据文件。

    这可能导致还原信息命令和 msdb 生成不完整的元数据。但只有元数据是不完整的,而捕获的日志是完整且可用的。

    如果尾日志备份包含不完整的元数据,则 backupset 表中的 has_incomplete_metadata 将设置为 1。

    此外,在 RESTORE HEADERONLY 的输出中,HasIncompleteMetadata 将设置为 1。

    如果尾日志备份中的元数据不完整,则 backupfilegroup 表在尾日志备份时将丢失文件组的大多数相关信息。

    大多数 backupfilegroup 表列为 NULL;只有以下几列有意义:

    * backup_set_id
    * filegroup_id
    * type
    * type_desc
    * is_readonly

  2. 如果数据库未损坏

    使用 backup log {数据库名} to {磁盘逻辑地址} with NORECOVERY 备份尾日志
日志备份
尾日志备份
本主题仅适用于使用完整恢复模式或大容量日志恢复模式的数据库。

对于大多数情况,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 要求您备份日志尾部以捕获尚未备份的日志记录。还原操作之前对日志尾部执行的日志备份称为“尾日志备份”。

SQL Server 2005 通常要求您在开始还原数据库前执行尾日志备份。尾日志备份可以防止工作丢失并确保日志链的完整性。将数据库恢复到故障点时,尾日志备份是恢复计划中的最后一个相关备份。如果无法备份日志尾部,则只能将数据库恢复为故障前创建的最后一个备份。

并非所有还原方案都要求执行尾日志备份。如果先前的日志备份中包含恢复点,或者您准备移动或替换(覆盖)数据库,则不一定需要尾日志备份。并且,如果日志文件受损且无法创建尾日志备份,则必须在不使用尾日志备份的情况下还原数据库。最新日志备份后提交的任何事务都将丢失。


http://hi.baidu.com/moranshan/bl ... 93f1fd15cecb35.html

1.尾日志的存储
首先一个问题,尾日志存储在哪里?
很显然,答案是当前的日志文件中。当前日志文件保存的内容包括了最后一个成功的日志备份到当前故障点所有的事务。
所以,一旦最后一个日志文件备份和故障点之间数据库的日志文件不幸发生介质故障,比如存放日志文件的硬盘损坏,那么这种情况下,上帝也无法挽救一个DBA的命运!
由此可以看出,日志文件对数据库,对DBA的重要性!
所以如果无法完成尾日志备份,则只能将数据库恢复到创建最后一个事务日志备份时的点。自上一次事务日志备份后对数据库所做的更改将丢失,必须手工重做。
2.与正常日志备份的区别
与正常日志备份相似,尾日志备份将捕获所有尚未备份的事务日志记录。但尾日志备份与正常日志备份在下列几个方面有所不同。
如果数据库损坏或离线,则可以尝试进行尾日志备份。仅当日志文件未损坏且数据库不包含任何大容量日志更改时,尾日志备份才会成功。如果数据库包含要备份的、在记录间隔期间执行的大容量日志更改,则仅在所有数据文件都存在且未损坏的情况下,尾日志备份才会成功。
尾日志备份可使用COPY_ONLY选项独立于定期日志备份进行创建。仅复制备份不会影响备份日志链。事务日志不会被尾日志备份截断,并且捕获的日志将包括在以后的正常日志备份中。这样就可以在不影响正常日志备份过程的情况下进行尾日志备份,例如,为了准备进行在线还原。
如果数据库损坏,则尾日志可能会包含不完整的元数据,这是因为某些通常可用于日志备份的元数据在尾日志备份中可能会不可用。使用CONTINUE_AFTER_ ERROR进行的日志备份可能会包含不完整的元数据,这是因为此选项将通知进行日志备份而不考虑数据库的状态。

NO_TRUNCATE:只与BACKUP LOG一起使用。指定不截断日志,并使数据库引擎尝试执行备份,而不考虑数据库的状态。该选项允许在数据库损坏时备份日志。
BACKUP LOG的NO_TRUNCATE选项相当于同时指定COPY_ONLY和CONTINUE_AFTER_ERROR。
NO_LOG | TRUNCATE_ONLY:通过放弃活动日志以外的所有日志,无须备份复制日志即可删除不活动的日志部分,并截断日志。该选项会释放空间。因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG和TRUNCATE_ONLY是同义的。使用NO_LOG或 TRUNCATE_ONLY截断日志后,记录在日志中的更改不可恢复。为了进行恢复,请立即执行BACKUP DATABASE以执行完整备份或完整差异备份。

本主题仅适用于使用完整恢复模式或大容量日志恢复模式的数据库。

对于大多数情况,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 要求您备份日志尾部以捕获尚未备份的日志记录。还原操作之前对日志尾部执行的日志备份称为“尾日志备份”。

SQL Server 2005 通常要求您在开始还原数据库前执行尾日志备份。尾日志备份可以防止工作丢失并确保日志链的完整性。将数据库恢复到故障点时,尾日志备份是恢复计划中的最后一个相关备份。如果无法备份日志尾部,则只能将数据库恢复为故障前创建的最后一个备份。

并非所有还原方案都要求执行尾日志备份。如果先前的日志备份中包含恢复点,或者您准备移动或替换(覆盖)数据库,则不一定需要尾日志备份。并且,如果日志文件受损且无法创建尾日志备份,则必须在不使用尾日志备份的情况下还原数据库。最新日志备份后提交的任何事务都将丢失。有关详细信息,请参阅本主题下文中的“不使用尾日志备份执行还原操作”。

备份日志尾部

BACKUP LOG 语句执行。建议您在下列情况下执行尾日志备份:

如果数据库处于在线状态,每当您准备对数据库执行的下一个操作为还原操作时,请在开始还原顺序之前使用 WITH NORECOVERY 备份日志尾部:

BACKUP LOG database_name TO <backup_device>WITH NORECOVERY



注意:
为防止出错,必须使用 NORECOVERY 选项。

如果数据库处于离线状态并且无法启动。

尝试执行尾日志备份。由于此时不会发生任何事务,所以 WITH NORECOVERY 是可选的。如果数据库受损,请使用 WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE。

BACKUP LOG database_name TO <backup_device> [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }

重要提示:
除非数据库受损,否则不建议使用 NO_TRUNCATE。

如果数据库受损(例如,数据库无法启动),则仅当日志文件未受损、数据库处于支持尾日志备份的状态并且不包含任何大容量日志更改时,尾日志备份才能成功。如果包含大容量更改,要求数据文件必须能够被访问。

下表对这些选项进行了汇总。



BACKUP LOG 选项         注释



NORECOVERY
       

  每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY。NORECOVERY 使数据库进入还原状态。这确保了数据库在尾日志备份后不会更改。

除非指定 NO_TRUNCATE 或 COPY_ONLY 选项,否则将截断日志。



{ CONTINUE_AFTER_ERROR | NO_TRUNCATE }
       

   仅当您要备份受损数据库的尾部时才能使用 NO_TRUNCATE 或 CONTINUE_AFTER_ERROR。NO_TRUNCATE适用于数据库文件损坏,日志文件还是完整的,在这种情况下,正常日志是备份不了,但带上NO_TRUNCATE选项,可以在数据库不可访问的情况下,进行日志备份。

       备份:

BACKUP LOG MyAdvWorks_FullRM TO MyAdvWorks_FullRM_log1 WITH NO_TRUNCATE

还原:

restore log XXX(数据库名)

from disk='c:\XXX\back.bak'

with file=2,norecovery

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2011-06-24 21:01 |只看该作者
这个好像是sybase板块吧。

论坛徽章:
0
5 [报告]
发表于 2011-06-25 15:19 |只看该作者
这一块 sybase sqlserver 相通的。

http://www.cnblogs.com/Amaranthus/archive/2011/03/29/1998752.html
QL Server 找回没有备份的数据

问题:

  有一个库, 做的是全备份+日志备份,在2011年3月8日,14点产生一次全备份,在14:10分产生日志备份,在14:12分down          机,请问怎么能恢复 14:10 到 14:12分中的这段数据(前提,前期日志备份全部正确可用),机器硬盘完好。

使用方法:

  1.如果数据库已经损坏

    如果数据库已经损坏,可以使用 backup log {数据库名} to {磁盘逻辑地址} with no_truncate 备份数据库。

    因为可能存在对受损数据库备份日志尾部时,日志备份中正常捕获的部分元数据可能不可用。

    

    尾日志备份可捕获日志尾部,即使数据库离线、损坏或缺少数据文件。

    这可能导致还原信息命令和 msdb 生成不完整的元数据。但只有元数据是不完整的,而捕获的日志是完整且可用的。

    如果尾日志备份包含不完整的元数据,则 backupset 表中的 has_incomplete_metadata 将设置为 1。

    此外,在 RESTORE HEADERONLY 的输出中,HasIncompleteMetadata 将设置为 1。

    如果尾日志备份中的元数据不完整,则 backupfilegroup 表在尾日志备份时将丢失文件组的大多数相关信息。

    大多数 backupfilegroup 表列为 NULL;只有以下几列有意义:

    * backup_set_id
    * filegroup_id
    * type
    * type_desc
    * is_readonly

  2. 如果数据库未损坏

    使用 backup log {数据库名} to {磁盘逻辑地址} with NORECOVERY 备份尾日志

本主题仅适用于使用完整恢复模式或大容量日志恢复模式的数据库。

对于大多数情况,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 要求您备份日志尾部以捕获尚未备份的日志记录。还原操作之前对日志尾部执行的日志备份称为“尾日志备份”。

SQL Server 2005 通常要求您在开始还原数据库前执行尾日志备份。尾日志备份可以防止工作丢失并确保日志链的完整性。将数据库恢复到故障点时,尾日志备份是恢复计划中的最后一个相关备份。如果无法备份日志尾部,则只能将数据库恢复为故障前创建的最后一个备份。

并非所有还原方案都要求执行尾日志备份。如果先前的日志备份中包含恢复点,或者您准备移动或替换(覆盖)数据库,则不一定需要尾日志备份。并且,如果日志文件受损且无法创建尾日志备份,则必须在不使用尾日志备份的情况下还原数据库。最新日志备份后提交的任何事务都将丢失。有关详细信息,请参阅本主题下文中的“不使用尾日志备份执行还原操作”。

备份日志尾部

BACKUP LOG 语句执行。建议您在下列情况下执行尾日志备份:

如果数据库处于在线状态,每当您准备对数据库执行的下一个操作为还原操作时,请在开始还原顺序之前使用 WITH NORECOVERY 备份日志尾部:

BACKUP LOG database_name TO <backup_device> WITH NORECOVERY


注意:
为防止出错,必须使用 NORECOVERY 选项。



如果数据库处于离线状态并且无法启动。

尝试执行尾日志备份。由于此时不会发生任何事务,所以 WITH NORECOVERY 是可选的。如果数据库受损,请使用 WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE。

BACKUP LOG database_name TO <backup_device> [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }


重要提示:
除非数据库受损,否则不建议使用 NO_TRUNCATE。









如果数据库受损(例如,数据库无法启动),则仅当日志文件未受损、数据库处于支持尾日志备份的状态并且不包含任何大容量日志更改时,尾日志备份才能成功。

下表对这些选项进行了汇总。


BACKUP LOG 选项         注释



NORECOVERY
       



每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY。NORECOVERY 使数据库进入还原状态。这确保了数据库在尾日志备份后不会更改。

除非同时指定 NO_TRUNCATE 或 COPY_ONLY 选项,否则将截断日志。



{ CONTINUE_AFTER_ERROR | NO_TRUNCATE }
       



仅当您要备份受损数据库的尾部时才能使用 NO_TRUNCATE 或 CONTINUE_AFTER_ERROR。NO_TRUNCATE适用于数据库文件损坏,日志文件还是完整的,在这种情况下,正常日志是备份不了,但带上NO_TRUNCATE选项,可以在数据库不可访问的情况下,进行日志备份。





备份:

BACKUP LOG MyAdvWorks_FullRM TO MyAdvWorks_FullRM_log1 WITH NO_TRUNCATE还原:

restore log XXX(数据库名)

from disk='c:\XXX\back.bak'

with file=2,norecovery

http://blog.sina.com.cn/s/blog_4ee6c4170100lonw.html

sql数据库恢复-如何使用事务日志恢复SQL Server数据库
分类:数据库开发 | 文章来源:转载 | 发布时间:2010-7-1 16:03:58 | 浏览:288 | 评论:0
大多数数据库管理员都害怕听说要将数据库恢复到某个时间点,特别是在数据库为生产数据库的情况下。但是,了解如何恢复数据库是数据库管理员技能背景中一个至关重要的组成部分。本文将说明如何把一个SQL Server数据库回复到恢复一个数据表的时候。

情况介绍

一个同事慌慌张张地给你打电话,因为他不小心删除了一些生产数据,他希望你能帮助他恢复丢失的记录。

如果你幸运的话,你建立了一个数据审计系统,你可以从一个审计表中恢复这些记录。如果你没有一个阅读事务日志的工具帮助你恢复事务,你可能需要将修改后的数据库恢复到某个时间点,恢复过程在同一台或单独的服务器上完成,而不是由服务器托管当前数据库实例。

恢复过程

注意,在本文中,我假定你的数据库恢复模式设为FULL。

恢复过程的第一步是执行尾日志备份。在恢复一个数据库之前,为保证上次备份之后发生改变的记录都包含在恢复过程之中,你可能需要执行这种类型的备份。

下一步,你应该查找数据库备份文件在机器或网络中的存储位置。如果你要在另一台服务器上恢复数据库,最好是把这些文件复制到目标服务器中。在备份文件所在的位置,找出最后一个完整的数据库备份(这些文件通常使用.bak为扩展名);你需要恢复这个完整的备份。下面的脚本将完整的备份文件应用于 NewDatabase数据库:


纯文本复制打印关于..

   1. RESTORE DATABASE NewDatabase  
   2. FROM DISK = 'D:\Backup\FilesTest\DatabaseFullBackup.bak'  
   3. WITH  
   4. MOVE 'PreviousDatabase' TO 'D:\DataFiles\TestDatabase.mdf',  
   5. MOVE 'PreviousDatabase_log' TO 'D:\DataFiles\TestDatabase_Log.ldf',  
   6. NORECOVERY  

RESTORE DATABASE NewDatabase
FROM DISK = 'D:\Backup\FilesTest\DatabaseFullBackup.bak'
WITH
MOVE 'PreviousDatabase' TO 'D:\DataFiles\TestDatabase.mdf',
MOVE 'PreviousDatabase_log' TO 'D:\DataFiles\TestDatabase_Log.ldf',
NORECOVERY

这段脚本指出完整备份文件位于服务器的D盘中,你正在使用备份文件恢复NewDatabase这个数据库。脚本中的语句将数据文件和日志文件从完整备份文件转移到TestDatabase数据库的新文件中。脚本中的最后一个语句——NORECOVERY——非常重要。NORECOVERY模式有三种选项,如下所示:

    * NORECOVERY:告诉SQL Server你没有完成恢复数据库的过程,随后会出现恢复文件。当数据库处于这种状态时,数据库还不能使用,因而不允许建立连接。
    * RECOVERY:告诉SQL Server你已经完成数据库恢复过程,数据库即将准备就绪。这是默认选项,也是最常用的选项。
    * STANDBY:告诉SQL Server当前数据库还未为完成恢复做好准备,随后可以使用日志文件进行恢复。如果必要,你可以使用这个选项为恢复数据库建立连接。但是,如果当前不存在连接,将来的事务日志只能应用于数据库。

一旦你使用NORECOVERY选项恢复了完整备份,你可以开始应用事务日志备份或差异备份。

差异备份

差异备份是指对上次完整数据库备份后数据库发生的任何改变进行备份。如果你有几个差异备份,你只需要恢复最后一个备份文件。在这种情况下,并不存在差异备份,因此你可以直接转向事务日志备份。

事务日志备份

事务日志备份保留上次事务日志备份后发生的所有事务的痕迹;它还允许你把数据库恢复到数据库发生错误之前的一个时间点。事务日志备份按顺序发生,从而建立一个备份链。在把一连串事务日志备份恢复到一个时间点时,事务日志文件也必须按顺序恢复。

当你使用一个数据库维护计划来建立事务日志备份时,事务日志文件名中往往包含一个时间指示器。下面的脚本使用NORECOVERY选项应用三个事务日志备份,最后一个语句把数据库恢复到最后一个事务日志文件的结束点。


纯文本复制打印关于..

   1. RESTORE LOG NewDatabase  
   2. FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup1.trn'  
   3. WITH NORECOVERY  
   4. RESTORE LOG NewDatabase  
   5. FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup2.trn'  
   6. WITH NORECOVERY  
   7. RESTORE LOG NewDatabase  
   8. FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup3.trn'  
   9. WITH NORECOVERY  
  10. RESTORE LOG NewDatabase  
  11. FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup4.trn'  
  12. WITH RECOVERY  

RESTORE LOG NewDatabase
FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup1.trn'
WITH NORECOVERY
RESTORE LOG NewDatabase
FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup2.trn'
WITH NORECOVERY
RESTORE LOG NewDatabase
FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup3.trn'
WITH NORECOVERY
RESTORE LOG NewDatabase
FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup4.trn'
WITH RECOVERY

恢复到一个时间点

在上面的例子中,你把数据库恢复到最后一个事务日志的结束点。如果你想把数据库恢复到事务日志结束前的某个特定的时间点,你必须使用STOPAT选项。下面的脚本把日志序列中的第四个事务日志恢复到4:01 AM——正好在数据库出错之前。


纯文本复制打印关于..

   1. RESTORE LOG NewDatabase  
   2. FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup4.trn'  
   3. WITH STOPAT = N'6/28/2007 4:01:45 PM', RECOVERY  

RESTORE LOG NewDatabase
FROM DISK = 'D:\Backup\FilesTest\Database_TransactionLogBackup4.trn'
WITH STOPAT = N'6/28/2007 4:01:45 PM', RECOVERY

既然你已经把数据库恢复到一个你指定的时间点上,现在该是决定如何帮助开发者,使他们的工作更加轻松的时候了。我建议把开发者需要的表复制到服务器上的一个单独的表中,以便于你或他们更正数据错误。

做好准备

将数据库恢复到某个时间点是你最不希望做的事情之一,但如有必要,你必须能够完成恢复过程。我概括说明了如何使用事务日志在某种情况下恢复SQL Server数据库的过程。必须注意,公司备份数据的方法各不相同,因此彻底了解你们公司的数据库备份过程极其重要。一定要记得经常对恢复和恢复情形进行测试,以便在灾难确实发生时,你已经做好应对准备。
http://goslam.cn/ArtView.aspx?id=187

论坛徽章:
0
6 [报告]
发表于 2011-06-28 20:11 |只看该作者
SQL server 数据库无法启动问题集锦! [原创 2010-09-21 09:30:00]     字号:大 中 小 在家使用SQL Server一切正常,可是到了单位,SQL Server服务怎么也起不来了,在网上查资料,折腾了一个多小时没有搞定,准备放弃了:再次重装系统!在几乎“绝望”的时候,没想到在客户的提醒下解决了该问题。现将本人的体会共享给大家,希望对大家有所帮助:
    SQL Server服务无法启动时,时常会遇到以下提示:
    本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报”服务。
    您可以打开“计算机管理”下的“事件查看器”,您会发现如下图中所示错误:   
    这时您可以检查日志文件C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG文件,用文本工具打开后,您会发现类似如下的内容:
2008-09-19 18:12:35.96 服务器         错误: 17190,严重性: 16,状态: 1。
2008-09-19 18:12:35.96 服务器         FallBack certificate initialization failed with error code: 1.
2008-09-19 18:12:35.96 服务器         Warning:Encryption is not available, could not find a valid certificate to load.
2008-09-19 18:12:35.96 服务器         错误: 17182,严重性: 16,状态: 1。
2008-09-19 18:12:35.96 服务器         TDSSNIClient initialization failed with error 0x7e, status code 0x60.
2008-09-19 18:12:35.96 服务器         错误: 17182,严重性: 16,状态: 1。
2008-09-19 18:12:35.96 服务器         TDSSNIClient initialization failed with error 0x7e, status code 0x1.
2008-09-19 18:12:35.96 服务器         错误: 17826,严重性: 18,状态: 3。
2008-09-19 18:12:35.96 服务器         Could not start the network library because of an internal error in the network library. To determine the cause, review the errors immediately preceding this one in the error log.
2008-09-19 18:12:35.96 服务器         错误: 17120,严重性: 16,状态: 1。
2008-09-19 18:12:35.96 服务器         SQL Server could not spawn FRunCM thread. Check the SQL Server error log and the Windows event logs for information about possible related problems.
    这时,不难看出:
    TDSSNIClient initialization failed :TDSSNIClient 初始化失败。
    SQL Server could not spawn FRunCM thread :无法生成FRunCM 线程。
    我们可以判定,可能会是以下问题,分别处理如下:
    1、可能是IP地址配置不对。解决方法如下:
    打开 \Microsoft SQL Server 2005\配置工具\下的SQL Server Configuration Manager,选择mssqlserver协议, 然后双击右边窗口的TCP/IP,在弹出窗口中检查IP配置。

    一般来讲,默认的IP2是:127.0.0.1,如果第一个IP地址的端口1433端口ping不通的话,服务无法启动。您可以将127.0.0.1放在IP1上,那么不管IP2的端口是否能ping通,服务都能够正常启动。您也可以将IP1设置为当前机器的IP地址,并保证该IP地址的端口能够ping通.
    2、可能是因为VIA协议启用造成的。解决方法如下:
    打开 \Microsoft SQL Server 2005\配置工具\下的SQL Server Configuration Manager,选择mssqlserver协议, 然后右边窗口有个VIA,点击右键禁用它,点击“确定”即可。这时候再启动sqlserver服务即可!
    另外,管理员密码修改也会造成sqlserver服务无法启动。解决方法如下:
    打开 \Microsoft SQL Server 2005\配置工具\下的SQL Server Configuration Manager,打开SQL Server属性,如下图所示:

    将本帐户的密码修改为您更改之后的管理员密码,“确定”即可。这时SQL Server服务应该就能正常启动了。
    最后需要补充说明的是:我的机器在安装时没有使用默认实例,而是用的“EHR”这个实例名,因此,截图可能会与您看到的不太一样。没有关系,道理都是一样的。
    有什么相关问题请给我留言,大家可以一同讨论


 前段时间sqlserver经常当掉,经检查是日志文件太大了,居然有将近2个g大小。收集了一些数据库日志清理的要领:
  清空日志
  DUMP TRANSACTION 库名 WITH NO_LOG
  截断事务日志
  BACKUP LOG 数据库名 WITH NO_LOG
  收缩数据库
  DBCC SHRINKDATABASE(数据库名)
  --压缩日志及数据库文件大小
  /*--特别留心
  请按步骤执行 ,未执行 前面的步骤,请不要做后面的步骤
  否则可能损坏你的数据库.
  一般不建议做第4,6两步
  第4步不安全,有可能损坏数据库或丢失数据
  第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能还原 .
  --*/
  --下面的所有库名都指你要处理的数据库的库名
  1.清空日志
  DUMP  TRANSACTION  库名  WITH  NO_LOG
  2.截断事务日志:
  BACKUP LOG 库名 WITH NO_LOG
  3.收缩数据库文件(如果不压缩,数据库的文件不会减小
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
  --挑选日志文件--在收缩形式里挑选收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
  --挑选数据文件--在收缩形式里挑选收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
  也可以用SQL语句来完成
  --收缩数据库
  DBCC SHRINKDATABASE(库名)
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
  DBCC SHRINKFILE(1)
  4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询剖析器中执行 )
  a.分离数据库:
  企业管理器--服务器--数据库--右键--分离数据库
  b.在我的计算机中删除LOG文件
  c.附加数据库:
  企业管理器--服务器--数据库--右键--附加数据库
  此法将生成新的LOG,大小只有500多K
  或用代码:
  下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
  a.分离
  EXEC sp_detach_db @dbname = ’库名’

b.删除日志文件
  c.再附加
  EXEC sp_attach_single_file_db @dbname = ’库名’,
  @physname = ’c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf’
  5.为了以后能自动收缩,做如下配置 :
  企业管理器--服务器--右键数据库--属性--选项--挑选 "自动收缩"
  --SQL语句配置形式 :
  EXEC sp_dboption ’库名’, ’autoshrink’, ’TRUE’
  6.如果想以后不让它日志增长得太大
  企业管理器--服务器--右键数据库--属性--事务日志
  --将文件增长限定为xM(x是你允许的最大数据文件大小)
  --SQL语句的配置形式 :
  alter database 库名 modify file(name=逻辑文件名,maxsize=20)

http://www.hackhome.com/InfoView/Article_203842_2.html

论坛徽章:
0
7 [报告]
发表于 2011-06-29 18:25 |只看该作者
本帖最后由 liyihongcug 于 2011-06-29 20:21 编辑

SELECT * FROM sys.configurations WHERE [name]='xp_cmdshell'
ORDER BY name--启动远程连接访问
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

--关闭远程连接访问
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure


--开启xp_cmdshell
--SQL Server blocked access to procedure 'xp_cmdshell'
sp_configure 'show advanced options', 1
go
reconfigure
go
sp_configure 'xp_cmdshell', 1
go
reconfigure
go

--开启sp_OACreate
--SQL Server blocked access to procedure 'sys.sp_OACreate'
sp_configure 'show advanced options', 1;
go
reconfigure;
go
sp_configure 'ole automation procedures', 1;
go
reconfigure;
go


sp_configure 'Ad Hoc Distributed Queries',1;
go
reconfigure
gohttp://topic.csdn.net/u/20110623 ... b-92bda23fc873.html
http://beinet.cn/Blog/BlogShow.a ... 4-a8dd-a79382bffc83
通过Sql Server执行DOS命令发表于:2011-02-23 11:53:16
更新于:2011-02-23 11:57:27
-- 添加xp_cmdshell扩展存储过程,可以执行dos命令

--EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

-- 打开xp_cmdshell,因为默认这个shell是关闭状态,执行dos命令时会出现:
--SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
--系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'show advanced options', 0

-- 查看xp_cmdshell状态
SELECT * FROM sys.configurations WHERE [name]='xp_cmdshell'
ORDER BY name

-- 添加一个Windows用户,用户名wbh 密码123123456 引号里可以是任意的dos命令
exec xp_cmdshell 'net user wbh 123123456 /add'
-- 把这个用户加入管理员用户组
exec xp_cmdshell 'net localgroup administrators wbh /add'

use it below
exec xp_cmdshell 'del 'c:\a.bak'

论坛徽章:
0
8 [报告]
发表于 2011-06-29 18:31 |只看该作者
搞质量文档
http://terryli.blog.51cto.com/704315/471736
来谈谈SQL Server 2008最直观的变化。所谓最直观变化就是SQL Server 2008区别于SQL Server 2005在功能和界面方面的人为感知的变化。

1,  SQL Server 2008中去掉了“外围应用配置器”这个工具。这个工具在SQL Server 2005 时会被经常使用。



安装完SQL Server 2008后,在配置管理菜单下,这个工具已经找不到了。很多朋友在问这工具怎么找不到了,是不是没安装好,其实不是,SQL Server 2008下没有这个工具了。如下图:


SQL Server 2005时,我们一般通过外围应用配置器来配置一些安全性和功能启用,比如配置数据库可以在互联网和局域网中被访问,如下图:


启用或禁用CLR集成,xp_cmdshell等功能,如下图:



那么SQL Server 2008下如何配置这些功能呢,我们可以通过“配置管理器”和SQL Server 2008新提供的“方面”来实现SQL Server 2005时的“外围应用配置器”的功能。
打开SSMS连接到SQL Server 2008 实例->在实例上单击右键->单击“方面”,如下图:



在“查看方面”对话框中,展开“方面”列表,然后选择相应的“外围应用配置器”方面



在“方面属性”区域,选择要用于每个属性的值。如下图:



2,  SQL Server 2008开始支持智能感应功能。
在SQL Server 2005时可以安装SQL Prompt 这个插件来实现智能感应,但这个插件是付费的,SQL Server 2008智能感应虽然没有SQL Prompt这个插件强,但是已经非常友好了,支持拼写检查、自动完成列出成员的功能。另外SQL Prompt也支持SQL Server 2008,可以根据喜好关闭其中一个智能感应功能。





3,  SQL Server 2008 开始支持T-SQL的调试功能。
如果你平时的工作是经常要写很多T-SQL语句,相信Visual Studio2008等开发工具的调试功能对SQL Server来说是一种诱惑,不错,SQL Server 2008开始支持T-SQL的调试功能了,通过Alt+F5启动调试,通过F9插入断点,通过F11逐语句执行。



4,SQL Server 2008支持对表实行“选择前N行”和“编辑N前行”的功能。SQL Server 2005时通过SSMS只能编辑或打开表的全部数据,不支持选择前N行的功能,当表的数据比较多时,会影响效率,这对测试非常不便。


可以调整“选择前N行”和“编辑N前行”的数量,SSMS->工具->选项,如下图:



5, SQL Server 2008开始支持通过界面向导的方式创建分区表。
SQL Server 2005时,只支持通过T-SQL创建分区表,不支持通过界面的方式创建分区表。如何通过SQL Server 2005和SQL Server 2008 T-SQL创建分区表,请参考:
实战分区表:SQL Server 2k5&2k8
在SQL Server 2008 通过界面创建分区表如下图:



单击“创建分区表”,弹出创建分区向导,如下图:


下一篇,继续总结SQL Server 2008的直观变化。

本文出自 “李涛的技术专栏” 博客,请务必保留此出处http://terryli.blog.51cto.com/704315/471736

论坛徽章:
0
9 [报告]
发表于 2011-06-30 19:25 |只看该作者
本帖最后由 liyihongcug 于 2011-07-01 12:52 编辑

http://database.51cto.com/art/201010/230908.htmSQL Server服务都可以实现哪些功能呢?对于很多刚刚接触SQL Server的新人来说,可能对SQL Server服务印象还比较模糊,下面就为您介绍   1.

      登录到安装了 SQL Server 2008 的计算机。
   2.

      依次单击“开始”、“管理工具”、“高级安全 Windows 防火墙”。
   3.

      右键单击“入站规则”,然后单击“新规则”。
   4.

      在“新建入站规则向导”对话框中的“规则类型”页上单击“端口”,然后单击“下一步”。
   5.

      在“协议和端口”页上单击“TCP”,单击“特定本地端口”,键入 1433,然后单击“下一步”。
   6.

      在“操作”页上单击“允许连接”,然后单击“下一步”。
   7.

      在“配置文件”页上执行所有下列操作:
          * 选中“域”复选框。
          * 选中“专用”复选框。
          * 清除“公用”复选框。
   8.

      单击“下一步”。
   9.

      在“名称”页上单击“名称”,然后为新的入站规则键入一个有意义的名称。
  10.

      (可选)单击“描述(可选)”,然后为入站规则键入描述。
  11.

      单击“完成”。



我最近在玩和讯微博,很方便,很实用,你也来和我一起玩吧!
去看看我的微博吧!http://t.hexun.com/4598336/default.htmlSQL Server服务的功能,供您参考。

在管理工具-服务中找名称为“SQL Server”的,类似的应该还有

列一下我电脑上的这些SQL Server服务
SQL Server (SQL2005) 提供数据的存储、处理和受控访问,并提供快速的事务处理。
SQL Server Active Directory Helper 支持与 Active Directory 的集成。
SQL Server Agent (SQL2005) 执行作业、监视 SQL Server、激发警报,以及允许自动执行某些管理任务。
SQL Server Analysis Services (SQL2005) 为商业智能应用程序提供联机分析处理(OLAP)和数据挖掘功能。
SQL Server Browser 将 SQL Server 连接信息提供给客户端计算机。
SQL Server FullText Search (SQL2005) 快速创建结构化和半结构化数据的内容和属性的全文索引,以允许对此数据进行快速的语言搜索。
SQL Server Reporting Services (SQL2005) 管理、执行、呈现、计划和传递报表。
SQL Server VSS Writer 提供通过 Windows VSS 基础结构备份/还原 Microsoft SQL server 的接口。

其中的那个“SQL Server (SQL2005)”之所以有“(SQL2005)”是因为我的电脑同时还运行着SQL2000,所以给它取了别名。
你如果没有给它取别名的话,应该是默认的“SQL Server”
//如果你安装了Visual Studio 2005/2008连接字符串,你可以按以下
//步骤获得连接字符串打 视图---服务器资源管理器---在左边多了一个窗口,展开窗口---右键---新建连接---选择要连接的sql数据库---确定
//在你刚才建的连接上 右键----属性 弹出来的属性窗口里面有个connectionstring这个就是你要的连接字符串了,放到上面的connectionString
// 基本上就是这些,以后不知道的连接字符串也可以用这个方法自动生成。

SQL Server学习笔记1: SQL Server Browser服务的作用

因工作需要,这几天头一回用SQL SERVER。于是恶补了一些网络、架构方面的相关知识,写了点笔记。

SQL Server Browser这个服务作用的字面解释是:将 SQL Server 连接信息提供给客户端计算机。

其实这个服务的用途与数据库的多实例有关。SQL Server服务器缺省使用TCP1433端口。如果多实例同时启动,一般就只有一个实例能占用1433端口了。这个实例概念与ORACLE类似(本人做ORACLE较多,因此用ORACLE作类比)。

SQL Server 2000 引入对 SQL Server 多个实例的支持,便开发了 SQL Server 解析协议 (SSRP),用于侦听 UDP 1434 端口。为了解决 SSRP 系统的限制(什么限制?我还不知道。),SQL Server 2005 引入了 SQL Server Browser 服务来替换 SSRP。

如果一台计算机上只有一个实例,且配置为静态端口,则无需启动Browser服务;
如果有多个实例,或者只有一个配置为动态端口的实例,则启动Browser服务会帮助client程序搜索、定位到server。

sql server count not configuare  as a Distibutor Property LoginSecure cannot be changed  or read after a connection string has been set


‘sql server replication requires the actual server name to make a connection to the server.connections through a server alias ,ip address or any other alternamte name are not supported. specify the actual name server name .’station2\mssql1′’
从这个错误信息来看,是sql server没有解析到实例名导致的。这台机器在安装sql server以后改过主机名。比较怀疑是这个原因引起。而station2也正好是之前的主机名。
于是执行以下命令查看sql server master里存储的实例名:
select @@servername

返回值:station2\mssql1

而正确的值应该是: station3\mssql1
如何让sql server master里存储到正确的实例名呢?这里有两种方法,第一种是重装Sql server.这种方法当然能解决问题,但不是一种好方法;另一种方法是采用系统存储过程sp_dropserver和sp_addserver来修改。
命令语法:
sp_dropserver ‘old_server_name’
GO
sp_addserver ‘current_computer_name’, ‘local’

常见复制错误
http://kb.cnblogs.com/page/71979/



操作使用的一些技巧(事务复制类型):

1. 如何修改一个已经发布的表的属性?

将发布所有订阅删除,(发布不用删除),就可以在发布属性的项目中取消表,然后就可以修改该表了,修改后,再将表加入发布内就可以了。

2. 常用的操作界面

(1) 一般都在监视器--发布项目,可以看到快照分发和订阅的即时信息。

(2) 另外一个操作地方是发布的属性,(在属性--状态里可以启动代理)。

(3) 还有一个是工具--复制--配置发布、订阅服务器和分发,需要订阅的服务器必须在这里指定授权后订阅才能成功.

============

问题:

数据库无法登陆的老问题:数据库属性-安全里面,不要选仅windows登陆,换另外一个模式。

0. 订阅一个快照发布(不是事务复制)出错,"21776 名称xxx在TransPublication集合上没有找到",在企业管理器中,将发布数据库和订阅数据库都停止或者断开,再启动,重新连接就可以订阅快照发布了.真是奇怪,有莫名其妙的问题可以尝试重启

服务器试试,有时后一台机器上可以正常控制订阅操作,而另外一台机器上却订阅操作出错,也重新连接服务器试试.

1) 一开始遇到的问题是,注册的local服务器不能用,删除后重新命名搞定。

2) SQL Server代理正在使用系统帐户,它会导致复制失败,点这个提示点确定后,本账户的选项为灰色,原来是配置发布的服务器不是本机,到本机上操作发布,就可以选"本账户"了。

3) 又遇到不能署名订阅,"不允许请求的署名订阅",明明发布和订阅服务器双方都注册了,也双方都建立了

订阅的用户帐号,原因:在这步,点注册服务器,然后不能选默认的模拟SQL登陆,而是要选"使用SQL身份验证",然后输入名称和密码。

如果始终弹出"不允许请求的署名订阅",不能进到选择登陆模式的界面,退出订阅向导,在企业管理器中,进入发布服务器,复制-右键-"配置发布、订阅服务器和分发"-订阅服务器-添加订阅服务器机器名和帐号,如果已经有了,直接确定下。再

进订阅服务器,订阅就不会显示不能署名订阅了。

以上过程可能发现明明订阅服务器名字已经在发布服务器添加了,还是出现这个问题,就一定要在订阅服务器进入发布服务器,然后添加订阅服务器的名字,为什么会这样,可能是在发布服务器指定了改订阅服务器的名字后,但订阅服务器没有刷新,可以断开一次订阅服务器和发布服务器,再来订阅,也可以解决。

4. 请求订阅已经建立好了,但订阅状态显示"正在重试", 上次动作"进程未能连接到subscriber SHD-SHD"。

原因是我安装sql后,曾经改过电脑的名字,改回SHD-SHD.(有的人是因为SQL服务器端口修改过造成)。还有可能是MS SQL Server和SQL Server Agent服务没有用域用户身份启动并运行,于是我把B加到A所在的域,并且把A的管理员用户加到B的SQLServerAgent服务的登陆用户中。

5. 但订阅状态显示"请求共享代理程序失败", "进程未能连接到distributor..."。

怀疑是订阅设置时,连接发布数据库的帐号有问题,在订阅(右键)的历史记录中查看具体的错误原因。帐号正确后,历史记录又说订阅端机器没有配置,于是全部删除订阅和发布来试,结果发布确无法删除发布,出现20015错误,原来是订阅的机器通过局域网,打开了快照的共享目录没有关闭,关闭后,成功删除发布。如果还无法删,干脆把共享的快照目录取消共享,再删,然后重新配置快照目录共享。

6. 订阅服务器上的订阅又无法删除了,提示"无法更新或删除从 MSX 服务器上发起的作业"。

这是因为:计算机更换名之后就出现这种错误,自己不能修改自己创建的作业。

解决办法:  

在msdb的sysjobs表中把originating-server中的值全部改为更改后的计算机名

update   msdb..sysjobs   set   originating_server   =   '现服务器名'

有时可以到管理-sql server代理--作业,查看更多情况和操作。

7. 全部重新创建发布和订阅成功,执行却又出现"发布内容 null"的提示。

是因为订阅服务器没有连接到分发服务器。(1) SQLSERVERAGENT没启动;(2)MS SQL Server和SQL Server Agent服务必须以域用户身份启动并运行,以上问题检查中随时注意SQLSERVERAGENT(控制面板-管理-服务)服务是否已经启动。

8. 订阅服务器已经登陆上发布服务器,但在建立订阅时看不见该服务器的发布。

是因为没有配置分发服务器,工具-复制-"配置发布、订阅服务器和分发",再检查SQLSERVERAGENT是否运行。然后再在发布属性-发布访问列表,添加订阅服务器登陆的登陆名,订阅端终于看见发布了。

9. 发布 'xxx' 的初始快照尚不可用。

保证SQLSERVERAGENT已经运行,复制=》发布内容=》发布项目mytab=》右击右侧的订阅=》重新初始化

如果还不行,复制监视器--发布服务器--xxx--发布的项目--快照,看到进程未能创建文件“\\XXZ\SQLPUB\unc”,到该文件夹重新配置sql的帐号对该文件夹权限为"完全"。

10. 订阅端产生 "快照尚不可用 发生操作系统错误 53",订阅服务器帐号访问快照文件夹出权限不够。

分配权限,还有检查防火墙,被禁止了访问。

11. 有个表无法发布,选择框显示红叉,没有主键的表无法发布。

12. 进程未能从表“[dbo].[syncobj_0x3745373834413345]”向外大容量复制。

在写 BCP 数据文件时发生 I/O 错误(源: ODBC SQL Server Driver (ODBC); 错误代码: 0)

解决方法:就是字符类型全部改为n类型的解决问题(char-nchar,varchar-nvarchar,ntext).

13、在数据发布时报如下错误信息:

在BCP数据文件中遇到意外的EOF(源:ODBC SQL Server Driver(ODBC):错误代码:S1000)

这是因为数据库中含有TEXT或nTExt或Image字段引起的,只要在某项发布属性页中选择<快照>-<快照格式>-<字符模式格式>,即可解决该问题。

14、另外,在建数据发布时,报如下错误:

违反了Primary Key约束'PK_@snapshot_seqnos_7fab3fda'. 不能在对象'#7EB71BA1'中插入重复键。

(源:zzb_stockserver(数据源); 错误代码:2627)

这是因为在建发布时,数据库数据正在执行插入或修改动作引起的,只要该发布的快照重新运行一下即可。

15、对某些大型数据表无法生成快照的问题,数据库报如下错误:

进程未能从表"[dbo].[syncobj_0x3436383044343035]"向外大容量复制,在写 BCP 数据文件时发生 I/O 错误(源: ODBC SQL Server Driver (ODBC);错误代码: 0)

这是因为该表有问题或表数据太大造成的,可用如下方法试着解决一下:

a、用DBCC checktable 对该表检查一下,数据表是否有问题,然后再试一下重新生成数据快照。

b、如果上述问题仍无法解决,可以用数据导出功能将数据表导到订阅服务器中。

c、然后重建一个针对该数据表的数据发布,选择不生成快照功能,然后运行下述问题4的解决方法,解决出现的问题。

16、在建立订阅时,选择不初始化订阅方数据表,则在订阅服务器不产生相应的复制存贮过程,运行该发布时,会报如下错误:

未能找到存贮过程'sp_MSupd_XXX'...

原因如下:

Problem Deion :

======

Replication Distribution Agent reports error. The error message is "It could not find the stored procedure sp_MSins_***".

Reason :

======

If we choose "the subscriber has schema and data already" option when we create the

subion, those three system auto created stored procedures will not be created in the subscribing database side, they are "sp_MSins_***"/"sp_MSupd_***"/"sp_MSdel_***".

Soltuion :

======

We could use the system command "sp_publicationcustomprocs 'pulication_name'"

to create the s of those three system stored procedures. Then we run these in the subscribing database. The problem will be resolved.

解决方案:

在发布服务器上运行如下命令:sp_publicationcustomprocs 'xxxx', 其中xxxx为发布名称,该命令会生成创建上述三个存贮过程的脚本,然后在订阅服务器运行生成三个存储过程即可。

17、在订阅数据时,发生如下错误:

该订阅已标记为不活动,必须重新初始化该订阅。需要删除并重新创建 NoSync订阅。

(源: zzb_stockserver (数据源); 错误代码: 21074)

解决方案:

在发布服务器上,选择某项发布,在属性-》订阅-》重新初始化。可以解决上述问题

18、在数据发布时,发生如下错误:

不能在具有唯一索引 'PK_tbMeetingMemo' 的对象 'tbMeetingMemo' 中插入重复键的行。

(源: ZZB-XHSTOCK (数据源); 错误代码: 2601)

原因:可能是在发布该表时,在不同的发布中存在多次发布该表的情况。

解决方法:

a、查明是否有多次发布该表的情况.

在发布服务器的发布数据库中用运行如下SQL语句:select * from sysarticles order by dest_table

查看在dest_table列中是否出现多次该表的信息,如是,则说明该表已被多次发布,可以用下一步中说明的方法来查看是哪些发布发布了该表。

b、运行语句:select * from syspublications,查看pubid与上述信息相同的pubid的内容,则就能确定是何种发布发布了相同的数据表。

c、找到了发布后,如果是增加数据表,则不用删除该发布下的所有订阅,如果是去除发布的数据表,则需删除该发布下的所有的订阅信息,修改相应的发布内容,重新制定相应的订阅。

19. 创建发布,14294错误,"请提供@job_id标识作业",是因为你删除了以前系统自动生成的作业。

方法:工具-复制--禁用发布,重新配置发布、订阅服务器和分发,完成后,发布的数据库显示为一个手型的共享图标,再创建发布

20. 订阅和发布都删除完了,但禁用发布不成功,提示:无法除去分发数据库'distribution',该数据库正在使用。

停止数据库,再启动数据库,再禁止发布。

21. 配置发布和分发向导,最后完成时错误18481:配置分发服务器:未能连接到服务器。

因为distributor_admin未在该服务器上定义为远程登录你肯定在装完SQL SERVER以后,改了计算机名,虽然sql server 还可以用,但一用复制时,SQL SERVER读取了旧的计算机实例名,不信,你试试select @@SERVERNAME

显示出来的,肯定不是你现在的计算机名。于是,你用:

sp_dropserver <(用select @@SERVERNAME显示出来的旧名)>

go

sp_addserver <你现在的计算机名>, LOCAL

go

例如:sp_dropserver    'E0184D34429345F\SQL2K'

go  

sp_addserver    'deboywang\SQL2K',    LOCAL  

go

重启sql server服务,问题就可以解决了。

除此之外,如果要修改@@Servername还可以使用下面的方法:

1) exec sp_helpserver 检查你的server名字。

2) 如果不正确,用exec sp_setnetname修正。

另外,当注册的名字改为其他名字后,注册登记是成功的(在客户端工具里添加了匿名),发布时就会出现这个问题。

22. 强制订阅无法删除:在发布服务器上先后删除订阅和发布后,订阅服务器上该强制订阅始终存在,无法删除。

问微软支持,得结论:

sp_removedbreplication 'job'

JOB为订阅复制的数据库名称。

其他问题:

=============

注:

0.不要去乱删 管理--sql server代理--作业的内容。严格按照先删订阅,再删发布来进行.

1、如何忽略在分发中出现的报错

a、在发布服务器的管理-》SQL server代理->作业->中,找到该发布的发布JOB,在属性->步骤->2运行代码程序-》编辑->命令-> 在命令语句最后添加 - skiperrors xxxx(xxxx是分发时报的错误号) , 指的是忽略该错误的意思。

b、然后重新启动分发引擎。

2. 如何输出出错的信息?

在待输出出错信息的JOB命令最后加入 -Output c:\temp\error.txt, -Output

是命令,后面是待输出的文件路径和文件夹名.

================

因为该发布不允许使用可更新的订阅,当 IDENTITY 列被传输到订阅服务器时,不会传输 IDENTITY 属性。(例如,在发布服务器上定义为 INT IDENTITY 的列在订阅服务器上将定义为 INT。)

如果想将 IDENTITY 属性传输到订阅表,则必须进行如下操作:

1. 使用 IDENTITY 属性和 NOT FOR REPLICATION 选项手工创建订阅表。您可以通过让 SQL Server 在应用快照之前执行自定义脚本来执行该操作。若要指定自定义脚本,请先创建发布,再创建脚本,然后在发布属性的“快照”选项卡

上输入该脚本的名称。

2. 设置名称冲突项目属性,以便 SQL Server 在订阅服务器上应用快照时不会除去现有的表。该属性在项目属性的“快照”选项卡上。

下列已发布表包含“标识”列:

[dbo].[BookIndex]

===================

SQL Server 要求发布的存储过程所引用的所有对象(如表和用户定义函数)在订阅服务器上都可用。如果引用的对象在此发布中未作为项目发布,则它们必须在订阅服务器上手工创建。

在此发布中发布了下列存储过程:

[dbo].[getChaNameList]

[dbo].[setUpWebsite]
标签: SQL Server 2008 数据库复制   
相关文章:
SQL Server 2008中远程Service Broker实现
SQL Server 2008中Service Broker基础应用(下)
SQL Server 2008内存及I/O性能监控
SQL Server 2008中Service Broker基础应用(上)
SQL Server 2008中的代码安全(八):透明加密(TDE)

执行完后,重启sql server实例。问题解决

sqlserver2008 复制测试成功   有时候需要反复测试 一次不行第2次 。  有时候是路径原因。
snapshot路径一次写死 很难修改
http://www.bitscn.com/pdb/mssql/201008/190270_2.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP