|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
目前的方案是用mysqlbinlog工具,增加一个Flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。server|函数SQLSERVER2000体系撑持的跟踪函数(一)
BayaPavliashviliandKevinKline
http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000409
你们年夜部分人大概已在SQLSERVER中创建本人的用户界说函数(UDF),可是你晓得么?微软公司已集成了大批本人的UDFs,出格是在最新公布的SP3中.在这篇文章中BayaPavliashvili和KevinKline体系地研讨了关于SQLSERVER跟踪部分的UDF.你们中的一些人大概想浏览之前SQLServerProfessional的一篇关于传统UDFs的文章,好比AndrewZanevskys2000年9月的专栏("GrantingWisheswithUDF"),AndrewZanevskyandAntonJilines2001年10月的文章("UDFPerformance…orLackofIt"),或JimmyNilssons2003年7月的文章("AnotherUDF:GlobalConstants").
UDFs是SQLServer2000等候已久的附加功效,UDFs典范的使用是DBAs和开辟者用来模块化代码和间或用来进步功能.在这篇文章中,我们将从零入手下手懂得SQLSERVER体系供应的UDFs,能够同意DBA举行跟踪办理.
固然体系供应的用户界说函数听起来有一点冲突,但微软仍是集成大批的外部的UDFs(只读,体系供应).同时,只管UDFs这个特征在SQLSERVER2000最后公布是就供应了,不外我们发明只是在SP3中微软才由于本人的目标而大批利用,一切体系供应的UDFs函数都是以’fn_’入手下手而且保留在master数据库中.
对照体系供应的和尺度的UDF
假如你熟习UDFs,你大概晓得UDF是不克不及修正流动表的纪录,典范的使用是:读取数据,修正表变量的数据,前往数据.并且UDFs能够运转扩大存储历程和体系供应的自界说函数.现实上有良多的体系供应的自界说函数只是复杂的挪用一个扩大存储历程.[扩大存储历程一般是有C++写的DLL文件,你能够看PaulStorer-Martins在2002年7月和8月的文章"PlayingtheODS"],因而浏览用T-SQL写的UDF不异功效的代码不是更好么?体系供应的自界说函数和用户的自界说函数在运转时有稍微的不同:典范的自界说函数(UDFs)能够向如许挪用:
SELECTcolumn_list
FROMowner_name.UDF_name(@parameter1,…@parameterN)
体系供应的自界说函数必要在FROM前面加二个冒号(::),同时你不用指定该功效的一切者:
SELECTcolumn_list
FROM::fn_SystemSuppliedUDF
(@parameter1,…@parameterN)
好比:体系供应的自界说函数fn_helpcollations()能够前往SQLSERVER2000撑持的一切字符集,我们能够如许实行:
SELECT*FROM::fn_helpcollations()
用于跟踪的自界说函数(UDFs)
一条跟踪捕捉的T-SQL语句发给(或运转一个存储历程在)指定的SQLSERVER的实列而且保留为一个*.TRC的文件.SQLSERVER的跟踪能够经由过程Profiler工具或运转体系的存储历程sp_trace_create创建而且能够指定很多过虑的尺度来限定输入文件.在这篇文章中,我们次要针对跟踪功效的体系供应的自界说函数.
fn_trace_gettable
fn_trace_gettable()必要二个参数:初始化的跟踪文件名(.TRC)和跟踪文件的个数.当你创建一个跟踪,你能够设置SQLSERVER限定跟踪文件的巨细.当跟踪文件抵达指定的巨细,SQLSERVER会字段发生一个新的”转动的”跟踪文件.fn_trace_gettable()函数的第二个参数是”转动的”跟踪文件的个数,这是在指定第一个参数时入手下手的.
假如你喜好将跟踪的新年保留在数据库中,你能够复杂地运转一个查询,经由过程fn_trace_gettable将跟踪文件保留为一个数据表,好比:
SELECT*
INTOdbo.my_trace_table
FROM::fn_trace_gettable
(c: race_file.trc,default)
并且,能够十分便利间接查询,搜刮一些特别寄义的字符串.在我们的测试情况中,一切的用户界说的存储历程以”USP”入手下手,因而我们能够运转一个查询,搜刮延续工夫凌驾3000ms的纪录:
SELECTTextData,duration
FROM::
fn_trace_gettable(c: race_file.trc,default)
WHERETextDataLIKE%usp%
ANDduration>3000
经由过程加倍庞大的查询,我们能够简练SELECT语句来断定哪些查询分歧运转地对照慢仍是只在岑岭期.
fn_trace_getinfo
这个体系供应的自界说函数能够失掉一个跟踪的初级别信息或在一个SQLSERVER上运转的一切正在运转的跟踪.这个函数只要一个参数―跟踪的编号(TRACEID)
为了限定一个跟踪的信息,你必需指定跟踪标记符.你也能够指定DEFAULT或”0”,作为跟踪标记符,如许能够取得一切的运转的跟踪信息.SQLSERVER在创建跟踪时给每个跟踪分派一个跟踪标记符,假如你不指定你要查询的跟踪标记符,复杂的以参数”0”运转该体系函数,然后你能够限定跟踪输入你感乐趣的内容.fn_trace_getinfo体系函数的输入形貌如表一:
表1.ffn_trace_getinfo的输入.
列名
形貌
TraceID
此跟踪的ID.能够被用来经由过程体系存储历程来办理跟踪
Property
跟踪的属性,由以下整数暗示:
1C跟踪选项(请拜见sp_trace_create中的@options)
2CFileName
3CMaxSize
4CStopTime
5C以后跟踪形态
Value
有关指定跟踪的属性的信息。
跟踪的选项能够经由过程体系存储历程sp_trace_create来指定(看表2)
表2.跟踪的选项能够经由过程体系存储历程sp_trace_create来指定
选项名
选项值
形貌
Trace_produce_rowset
1
跟踪将发生一个行集
Trace_file_rollover
2
当到达max_file_size时,将封闭以后跟踪文件并创立新文件.SQLSERVER会主动为每一个文件增添序列编号(1,2,3….)
Shutdown_on_error
4
假如不克不及将跟踪写进文件,则SQLServer将封闭。
Trace_produce_blackbox
8
假如这个选项被选中,SQLSERVER的最初5MB跟踪信息纪录将由服务器保留
上面我们看一个实列来懂得fn_trace_getinfo是怎样事情的.假想我们经由过程上面的查询创建一个跟踪:
/*declareavariabletoholdtraceID*/
DECLARE@trace_idINT
/*createthetrace*/
EXECsp_trace_create
@traceid=@trace_idOUTPUT,
@options=2,
@tracefile=Ne: race_file.trc,
@maxfilesize=5,
@stoptime=NULL
/*startthetracewejustcreated.
bydefaultthetraceisstoppedatcreation
*/
EXECsp_trace_setstatus@trace_id,1
/*returnthetraceidentifier*/
SELECTtraceIDis:+CAST(@trace_idASVARCHAR(4))
--Result:
-------------------------
traceIDis:2
如今我们能够用fn_trace_getinfo来取得响应跟踪的信息
SELECT*FROM::fn_trace_getinfo(2)
查询的了局在表3.
表3.fn_trace_getinfo查询的了局.
traceID
Property
Value
2
1
2
2
2
e: race_file.trc
2
3
5
2
4
NULL
2
5
1
这个输入告知我们,有一个正在运转的跟踪,主动增加到5MB后会主动发生别的一个文件.没有指定跟踪中断工夫(property=4),因而该跟踪会运转直到SQLSERVER服务中断或经由过程体系存储历程sp_trace_setstatus中断跟踪.
php本地模拟的prepare底层就是mysql_real_escape_string,所以必须得用mysql_set_character_set去设置mysql->charset,否则就存在字符集问题。 |
|