变相怪杰 发表于 2015-1-16 22:23:31

MSSQL网页设计SQL Server 2000之日记传送功能 - 设定...

MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。serverSQLServer2000之日记传送功效-设定(1)日记传送功效可主动复制数据库的买卖日记文件,并回存到备援服务器(standbyserver)的别的一个数据库。因而可年夜幅进步SQLServer数据库之可用性。由于备援数据库完全地吸收来历数据库的异动情形,以是它就是一份来历数据库的复本-不同仅在于材料复制与加载历程所发生的工夫差。但是,当次要服务器停摆时,您就能够将备援服务器变动为新的次要服务器。假如本来的次要服务器可从头上线利用,那末您能够将其设定为新的备援服务器-现实上就是对换两台服务器的脚色。

在SQLServer2000企业版或开辟版当中,Microsoft在EnterpriseManager内供应了一项日记传送(LogShipping)的功效-为数据库保护企图精灵的个中一部分。在利用之前的SQLServer时,您必要自行创建日记传送体系。

设定日记传送
次要服务器(primaryserver)便是实践处置材料的正式服务器;此服务器内具有来历数据库。主要服务器(secondaryserver)上寄存目标数据库,用来复制与回存来历数据库的买卖日记文件。监控服务器(monitorserver)用来监控次要服务器与主要服务器。与SQLServer7.0分歧的是(SQLServer7.0是在主要服务器上监控日记传送举措),SQLServer2000利用EnterpriseManager的日记传送监控工具来监控每组传送中的日记材料。Microsoft倡议您在别的一台监控用服务器安装这个工具程序。

您能够使用EnterpriseManager的数据库保护企图精灵设定SQLServer2000的日记传送。可是在您激活精灵之前,您必需先辈行某些筹办事情。一入手下手请先遵守以下步骤:
1.决意一组要设定日记传送的服务器(克日志传送历程当中,次要服务器与主要服务器为什么)。
2.选择一台监控服务器。最好分歧于次要服务器或主要服务器。
3.设定一切服务器之平安性。您用来设定日记传送的Windows帐号必需具有一切服务器上SQLServer体系办理者(sa)的权限。
4.在次要/主要服务器上创建分享材料夹。起首,未来源数据库买卖日记文件地点的目次设定为分享目次。接着在主要服务器上,将您盘算回存买卖日记文件的目次也分享出来。为了分明分辨各分享目次,请在分享称号内说明服务器与数据库之称号。假如分享目次称号已存在,您大概必要从分享目次中删除或是搬移别的档案,出格是旧的日记备份文件。然后再将这些分享目次的权限开放给每台服务器上SQLAgent所利用的Windows帐号。
5.决意怎样创建并初始化目标地数据库。您能够在日记传送设定历程就先创建与初始同步化目标地数据库,不然您必需手动举行初始数据库之回存举措。
6.在EnterpriseManager注册此三台服务器(即次要、主要与监控服务器)。
在您完成这些筹办举措时,您就能够筹办激活数据库保护企图精灵来设定日记传送。您能够先检视日记传送历程的五个一连步骤,如所示:

:SQLServer2000日记传送的设定步骤。
前两个为选择性(optional)步骤。假如您还没有同步化来历与目标数据库,则步骤1会为您先备份来历数据库,然后实行同步化举措。在步骤2时,精灵会将备份文件复制到主要服务器,并回存到目标地数据库。
精灵必定会实行其他三项步骤。在步骤3时,精灵将在次要服务器上创建一个SQLAgent事情(job)。此事情将会周期性地把买卖日记文件内容备份到磁盘档案内。精灵也会在主要服务器上创建一个传送日记的数据库保护企图;此计画包括两个SQLAgent事情:一个是将买卖日记文件复制到主要服务器(步骤4),另外一个则是将买卖日记文件回存到目标数据库(步骤5)。这些步骤将创建一组日记传送服务器(相互有日记传送干系的两个数据库)。假如您想要分外供应容错功效或是设定一台报表服务器,那末您能够将次要服务器与别的一台主要服务器组合在一同,再设定一组日记传送配对服务器。
筹办事情
1.筹办PrimaryServer(以下为Ztao-1)及SecondaryServer(以下为IntronTest)
2.将要作LogShipping的数据库(以下为IntronERP)之复原模子(RecoveryModel)设定为完全(FULL)。

3.将两台盘算机的SQLServer服务账号到场Administrator群组
4.创建PrimaryServer备份Log的数据夹
a.创建C:Logfile,以寄存PrimaryServer数据库TransactionLog的备份
b.将C:Logfile作数据分享,分享目次的权限开放给SQLAgent所利用的Windows帐号。
5.创建SecondaryServer复原的数据夹(在SecondaryServer)
a.创建C:Shippedlog数据夹以寄存从PrimaryServer传送过去的Transactionlog的备份
b.创建C:Logfile数据夹,当脚色互换后,可寄存新PrimaryServer的数据库TransactionLog
c.将C:Logfile数据夹作资本共享,分享目次的权限开放给SQLAgent所利用的Windows帐号。
6.在PrimaryServer中,新增SecondaryServer的注册信息


ifexists(
select*fromsysobjects
wherename=pr_backup_dbandxtype=p
)
begin
dropprocpr_backup_db
end
go
/*备份数据库*/
createprocpr_backup_db
@flagvarchar(10)out,
@backup_db_namevarchar(128),
@filenamevarchar(1000)--路径+文件名字
as
declare@sqlnvarchar(4000),@parnvarchar(1000)
select@par=@filenamevarchar(1000)
select@sql=BACKUPDATABASE+@backup_db_name+todisk=@filenamewithinit
executesp_executesql@sql,@par,@filename
select@flag=ok
go
ifexists(
select*fromsysobjects
wherename=fn_GetFilePathandxtype=fn
)
begin
dropfunctionfn_GetFilePath
end
go
/*创立函数,失掉文件得路径*/
createfunctionfn_GetFilePath(@filenamenvarchar(260))
returnsnvarchar(260)
as
begin
declare@file_pathnvarchar(260)
declare@filename_reversenvarchar(260)
select@filename_reverse=reverse(@filename)
select@file_path=substring(@filename,1,len(@filename)+1-charindex(,@filename_reverse))
return@file_path
end
go
ifexists(
select*fromsysobjects
wherename=pr_restore_dbandxtype=p
)
begin
dropprocpr_restore_db
end
go
createprocpr_restore_db/*恢单数据库*/
@flagvarchar(20)out,/*历程运转的形态标记,是输出参数*/
@restore_db_namenvarchar(128),/*要恢复的数据名字*/
@filenamenvarchar(260)/*备份文件寄存的路径+备份文件名字*/
as
declare@proc_resulttinyint/*前往体系存储历程xp_cmdshell运转了局*/
declare@loop_timesmallint/*轮回次数*/
declare@max_idssmallint/*@tem表的ids列最年夜数*/
declare@file_bak_pathnvarchar(260)/*原数据库寄存路径*/
declare@flag_filebit/*文件寄存标记*/
declare@master_pathnvarchar(260)/*数据库master文件路径*/
declare@sqlnvarchar(4000),@parnvarchar(1000)
declare@sql_subnvarchar(4000)
declare@sql_cmdnvarchar(4000)
/*
判别参数@filename文件格局正当性,以避免用户输出相似d:大概c:a等不法文件名
参数@filename内里必需有而且不以开头
*/
ifright(@filename,1)andcharindex(,@filename)0
begin
select@sql_cmd=dir+@filename
EXEC@proc_result=master..xp_cmdshell@sql_cmd,no_output
IF(@proc_result0)/*体系存储历程xp_cmdshell前往代码值:0(乐成)或1(失利)*/
begin
select@flag=notexist/*备份文件不存在*/
return/*加入历程*/
end
/*创立一时表,保留由备份集内包括的数据库和日记文件列表构成的了局集*/
createtable#tem(
LogicalNamenvarchar(128),/*文件的逻辑称号*/
PhysicalNamenvarchar(260),/*文件的物理称号或操纵体系称号*/
Typechar(1),/*数据文件(D)或日记文件(L)*/
FileGroupNamenvarchar(128),/*包括文件的文件组称号*/
numeric(20,0),/*以后巨细(以字节为单元)*/
numeric(20,0)/*同意的最年夜巨细(以字节为单元)*/
)
/*
创立表变量,表布局与一时表基础一样
就是多了两列,
列ids(自增编号列),
列file_path,寄存文件的路径
*/
declare@temtable(
idssmallintidentity,/*自增编号列*/
LogicalNamenvarchar(128),
PhysicalNamenvarchar(260),
File_pathnvarchar(260),
Typechar(1),
FileGroupNamenvarchar(128)
)
insertinto#tem
execute(restorefilelistonlyfromdisk=+@filename+)
/*将一时表导进表变量中,而且盘算出响应得路径*/
insertinto@tem(LogicalName,PhysicalName,File_path,Type,FileGroupName)
selectLogicalName,PhysicalName,dbo.fn_GetFilePath(PhysicalName),Type,FileGroupName
from#tem
if@@rowcount>0
begin
droptable#tem
end
select@loop_time=1
select@max_ids=max(ids)/*@tem表的ids列最年夜数*/
from@tem
while@loop_time<=@max_ids
begin
select@file_bak_path=file_path
from@temwhereids=@loop_time
select@sql_cmd=dir+@file_bak_path
EXEC@proc_result=master..xp_cmdshell@sql_cmd,no_output
/*体系存储历程xp_cmdshell前往代码值:0(乐成)或1(失利)*/
IF(@proc_result0)
select@loop_time=@loop_time+1
else
BREAK/*没有找到备份前数据文件原有寄存路径,加入轮回*/
end
select@master_path=
if@loop_time>@max_ids
select@flag_file=1/*备份前数据文件原有寄存路径存在*/
else
begin
select@flag_file=0/*备份前数据文件原有寄存路径不存在*/
select@master_path=dbo.fn_GetFilePath(filename)
frommaster..sysdatabaseswherename=master
end
select@sql_sub=
/*type=d是数据文件,type=l是日记文件*/
/*@flag_file=1时新的数据库文件仍是寄存在本来路径,不然寄存路径和master数据库路径一样*/
select@sql_sub=@sql_sub+move+LogicalName+to
+casetype
whendthencase@flag_file
when1thenFile_path
else@master_path
end
whenlthencase@flag_file
when1thenFile_path
else@master_path
end
end
+casetype
whendthen@restore_db_name+_+LogicalName+_data.mdf,
whenlthen@restore_db_name+_+LogicalName+_log.ldf,
end
from@tem
select@sql=RESTOREDATABASE@db_nameFROMDISK=@filenamewith
select@sql=@sql+@sql_sub+replace
select@par=@db_namenvarchar(128),@filenamenvarchar(260)
print@sql
executesp_executesql@sql,@par,@db_name=@restore_db_name,@filename=@filename
select@flag=ok/*操纵乐成*/
end
else
begin
SELECT@flag=filetypeerror/*参数@filename输出格局毛病*/
end
--备份数据库test_database
declare@flvarchar(10)
executepr_backup_db@flout,test_database,c:        est_database.bak
select@fl
--恢单数据库,输出的参数毛病
declare@flvarchar(20)
execpr_restore_db@flout,sa,c:
select@fl
--恢单数据库,即创立数据库test_database的复本test_db
declare@flvarchar(20)
execpr_restore_db@flout,test_db,c:        est_database.bak
select@fl
变动日记传送之组态设定
您可使用数据库保护企图之【属性】对话盒来变动日记传送相干设定。在【买卖纪录文件备份】设定页供应的选项可变动日记传送过程当中买卖日记文件备份的组态。

【纪录传送】设定页显现出您先前在保护企图内设定的日记传送配对服务器;假如您设定了别的组日记传送配对服务器,也会列在此处。本设定页也包括以下选项:新增目标数据库(用以创建新的日记传送配对服务器)、删除既有日记传送配对服务器、编纂今朝的日记传送配对服务器之属性,和移除全部日记传送功效。

当您在【纪录传送】设定页当中点选【编纂】时,将开启【编纂目标数据库】对话盒。您能够在对话盒内【一样平常】设定页检视与修正主要服务器的买卖日记文件之目次地位,和将来做为次要服务器时分享目次之路径。【初始化】设定页则可以让您变动回复形式,和主要服务器上复制与回存之频次。【临界值】页能够设定日记传送之临界周期。


在【超越同步临界值】项目可设定:当日记传送监控程序发生警示讯息之前所能同意的最年夜工夫距离(介于比来一次来历数据库买卖日记文件备份和最新的买卖日记文件回存举措之间)。您也能够在日记传送监控程序当中设定此参数。【在进工夫提早】、【档案保存刻日】和【过程纪录保存刻日】则是与主要服务器相干的设定。

注:监控服务器在这些组态选项中饰演相称主要的脚色。由于【纪录传送】设定页的年夜部分信息取决于监控服务器,以是一但监控服务器停摆时,您将没法变动日记传送的组态设定值。在监控服务器实行SQLServer2000Profiler时,次要服务器会连到监控服务器,然后从日记传送材料表中获得既有的日记传送企图。因而,要改动日记传送企图的设准时,您必需断定在EnterpriseManager内能够毗连到监控服务器。
反省与监控日记传送举措
SQLServer2000的日记传送功效还供应了一项日记传送监控程序,可以让您安装在另外一台自力监控用服务器。
在SQLServer企业版与开辟版的msdb数据库中共有七个关于日记传送的材料表:
log_shipping_plans
log_shipping_plan_databases
log_shipping_databases
log_shipping_plan_history
log_shipping_monitor
log_shipping_primaries
log_shipping_secondaries

上述每个材料表都存在于次要、主要和监控服务器上。各服务器也会利用某些材料表贮存材料,视该服务器在日记传送体系的脚色为什么。

在次要服务器上检视日记传送举措从EnterpriseManager里,您能够登进次要服务器,并察看与监控日记传送举措。假如某个数据库已设定要举行日记传送,在数据库【内容】对话盒的【一样平常】页可得知该数据库的脚色(来历数据库;或是目标数据库),也可晓得日记传送监控程序是位于那一台服务器上。您能够在EnterpriseManager内SQLServerAgent的【功课】节点,检视日记传送与买卖日记文件备份事情所实行的形态与汗青记录。次要服务器只利用msdb数据库的两个日记传送材料表。在log_shipping_databases材料表中,SQLServer新增的每笔材料将会把数据库保护企图ID和日记传送来历数据库保持在一同。在log_shipping_monitor材料表中,SQLServer新增的每笔材料包括了监控服务器的称号,和登进数据库的体例。

在主要服务器上检视日记传送举措日记传送企图存在于主要服务器。您可在主要服务器监控SQLAgent事情(复制买卖日记文件到主要服务器,并回存至目标数据库)。您也可检视目标数据库的属性对话盒,以决意该数据库在日记传送历程所饰演的脚色。

在主要服务器上,SQLServer利用msdb数据库的四个日记传送材料表。当SQLServer创建一个日记传送企图以后,它会新增一笔材料到log_shipping_plan材料表,用以记录:次要与主要服务器的称号、档案地位、复制与回存事情ID(来自于主要服务器之sysjobs体系材料表)。在log_shipping_plan_databases材料表,SQLServer会保持保护企图和来历/目标数据库称号,并且贮存最初一次举行档案复制与加载举措的相干信息。log_shipping_plan_history材料表则是将每第二天志传送的复制与回存事务记录上去,连同该事情是不是乐成的信息。SQLServer也会新增一笔材料在log_shipping_monitor材料表,用以参照监控服务器。

假如您勾选了【Allowdatabasetoassumeprimaryrole】复选框,您将在主要服务器上看到一个主要的分外项目:另外一个数据库保护企图(与您先前所创建的保护企图称号不异),可是并没有激活日记传送。您也会看到一个非感化中(disabled)的SQLAgent事情(备份该数据库的买卖日记)。大概您会被这些项目所搅浑。只管它们的名字不异,可是此分外发生的保护企图却分歧于现在所创建的谁人。SQLServer保存第二个逆向保护企图是为了今后大概产生的次要/主要服务器脚色对换举措所筹办。
在监控服务器上检视日记传送举措当您准确设定日记传送以后,SQLServer会激活监控服务器上EnterpriseManager的日记传送监控工具程序。别的,SQLServer会创建两个SQLAgent警示事情(alertjob):一个用来实行事情,另外一个处置out-of-sync情形。

利用监控工具程序的体例是,开启EnterpriseManager并连至监控服务器,睁开【Management】节点,然后点选【纪录传送监督器(LogShippingMonitor)】。当您点选此工具程序时,其内会列出日记传送配对服务器的清单。您可在配对服务器上按下鼠标右键,检视其备份、复制与回存等事情的实行汗青记录。这些汗青记录非常有效,由于您从这里失掉的毛病讯息会比从主要服务器上(SQLAgent复制与回存事情)失掉的更加细致。
如图所示:当您开启配对服务器之属性对话盒,并进进【Status】设定页时,您可检视此配对服务器实行备份与回存程序之形态。

其形态(Status)能够是Normal或是Out-of-Sync。假如SQLServerAgent还没有复制或回存买卖日记文件,对话盒内将会显现日记文件名为first_file_000000000000.trn。这并非实践的文件称号,只不外是用来标示SQLServerAgent还没有处置任何档案罢了。在【Status】设定页也会显现备份、复制和加载(回存)等举措实行时所泯灭的工夫。此设定页之信息不会主动更新,以是您必需将此对话盒封闭后再开启,才干更新其材料。

SQLServer只利用msdb数据库内两个材料表来贮存日记传送服务器之相干材料。SQLServer在这两个材料表中都赐与一个ID做为保持,和一个外来键(foreignkey)。该外来键是设定在log_shipping_secondaries材料表上,并参照log_shipping_primaries材料表的primary_id字段(这两个是一切日记传送材料表中独一具有外来键干系的材料表)。在log_shipping_primaries材料表内的每笔材料都包括日记传送的相干信息,比方:来历数据库称号、买卖日记文件备份事情实行之形态,和已计划的停摆信息(可制止不用要的警示讯息)。而log_shipping_secondaries材料表之每笔材料关于目标数据库之信息;每一个目标数据库从属于特定的日记传送来历数据库。这两个材料表相互保持的了局就是日记传送监控程序内所显现的配对服务器信息。
移除与从头组态日记传送功效
假如您想从数据库保护企图中移除日记传送功效,可参考以下体例:开启该企图的属性对话盒,选择【纪录传送】设定页,然后点选【移出纪录传送】。此举措将从主要服务器上移除SQLServerAgent的备份与回存事情,并扫除日记传送材料表内的一切相干材料。别的,日记传送监控程序的相干信息也会一并被扫除。但是此举措将会得当地保存次要服务器上SQLServerAgent的买卖日记备份事情。只要在删除数据库保护企图时,该事情才会被移除。假设您想从监控服务器内移撤除日记传送监控程序,请用手动体例将log_shipping_primaries与log_shipping_secondaries这两个材料表(位于监控服务器的msdb数据库)的材料删除便可。



假如您在数据库保护企图内设定日记传送时,就已同意目标数据库能够做为新的日记传送来历数据库。当您删除次要服务器的保护企图时,主要服务器上仍旧会保存其数据库保护企图,和买卖日记文件备份事情。删除这些项目标体例是将主要服务器上与日记传送相干的数据库保护企图间接删除。
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENT

爱飞 发表于 2015-1-19 10:17:38

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

海妖 发表于 2015-2-4 20:30:39

原来公司用过MYSQL自己也只是建个表写个SQL

金色的骷髅 发表于 2015-2-10 07:13:18

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

小魔女 发表于 2015-3-1 03:07:14

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

精灵巫婆 发表于 2015-3-10 12:31:47

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)

灵魂腐蚀 发表于 2015-3-17 07:11:17

从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。

分手快乐 发表于 2015-3-17 07:11:17

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

乐观 发表于 2015-3-24 02:12:53

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
页: [1]
查看完整版本: MSSQL网页设计SQL Server 2000之日记传送功效 - 设定...