|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。要查询一个表的数据数目,信任人人很快就想到了selectcount(1)fromtable1,但假如我们要查询数据库中一切表的的数据数目要怎样查呢?办法对照多,上面先容两种自己经常使用的办法:
一,使用sp_spaceused存储历程,sp_spaceused一次只能查询一个表的数据情形,以是利用sp_spaceused还得分离游标,不是很好的办理办法,人人能够参考第二种办法:
使用sp_spaceused的办法以下:
setnocounton
createtable#t1
(
namevarchar(200),
rowsint,
reservedvarchar(50),
datavarchar(50),
index_sizevarchar(50),
unusedvarchar(50)
)
declare@tablenamevarchar(200)
declare@sqlvarchar(2000)
declarem_cursorcursorlocalforselectobject_name(object_id)fromsys.objectswheretype=U
openm_cursor
fetchnextfromm_cursorinto@tablename
while@@fetch_status=0
begin
set@sql=insertinto#t1execsp_spaceused+@tablename
exec(@sql)
fetchnextfromm_cursorinto@tablename
end
closem_cursor
deallocatem_cursor
selectname,rowsfrom#t1
droptable#t1
复杂先容一下存储历程sp_spaceused感化:显现行数、保存的磁盘空间和以后数据库中的表、索引视图或SQLServer2005ServiceBroker行列所利用的磁盘空间,或显现由全部数据库保存和利用的磁盘空间。
假如我们如许实行:sp_spaceused表名
它会前往六列了局,截图以下:
name:表名
rows:该表的数据行数
reserved:由数据库中工具分派的空间总量
data:数据利用的空间总量
index_size:索引利用的空间总量
unused:保存但还没有利用的空间总量
个中rows就是我们要的了局列。
二,使用sys.dm_db_partition_stats,Sql命令以下:
selectb.name,a.row_countfromsys.dm_db_partition_statsa,
sys.objectsb
wherea.object_id=b.object_id
anda.index_id<=1
andb.type=U
sys.dm_db_partition_stats它前往以后数据库中每一个分区的页和行计数信息,在下面的sql中,三个关头列的意义以下:
object_id:表大概索引视图的ID,以是能够用它与sys.objects表的object_id相婚配。
row_count:该表或索引视图中数据的数目,就是我们要查询的了局。
index_id:该表或索引视图的索引ID。假如该表没有索引,那末会在sys.dm_db_partition_stats中存在一行index_id=0的纪录,假如有一个会萃索引(并且一个表中也只能有一个会萃索引),那末在sys.dm_db_partition_stats中存在一行index_id=1的纪录,而对应的index_id=0的纪录没有了。假如这个表在sys.dm_db_partition_stats中存在多行index_id>1的纪录,则申明这个表存在多个非会萃索引,我们这里判别index_id<=1,是假定每一个表都有主键,且主键为会萃索引。共同sys.objects表的type=U,就能够查出每一个用户表的数据数目了。
sys.dm_db_partition_stats别的行的信息,人人能够查询msdn匡助文档。php本地模拟的prepare底层就是mysql_real_escape_string,所以必须得用mysql_set_character_set去设置mysql->charset,否则就存在字符集问题。 |
|