
在SQL SERVER 获取当前服务器数据库备份信息,包括数据库名称,备份类型,恢复模式,时间等。 执行下面T-SQL:
SELECT T1Name AS DatabaseName,Isnull(Max(T2recovery_model), 'No Backup Taken') AS recovery_model,
'Full' AS BackupType,
Isnull(CONVERT(VARCHAR(23), CONVERT(DATETIME, Max(T2backup_finish_date), 131)), '') AS LastBackUpTaken
FROM syssysdatabases T1
LEFT OUTER JOIN msdbdbobackupset T2
ON T2database_name = T1name
WHERE type = 'D'
GROUP BY T1Name
--Get the most recent Diff backup taken
UNION ALL
SELECT T1Name AS DatabaseName,
Isnull(Max(T2recovery_model), 'No Backup Taken') AS recovery_model,
'Differential' AS BackupType,
Isnull(CONVERT(VARCHAR(23), CONVERT(DATETIME, Max(T2backup_finish_date), 131)), '') AS LastBackUpTaken
FROM syssysdatabases T1
LEFT OUTER JOIN msdbdbobackupset T2
ON T2database_name = T1name
WHERE type = 'I'
GROUP BY T1Name
--Get the most recent Log backup taken
UNION ALL
SELECT T1Name AS DatabaseName,
Isnull(Max(T2recovery_model), 'No Backup Taken') AS recovery_model,
'Log' AS BackupType,
Isnull(CONVERT(VARCHAR(23), CONVERT(DATETIME, Max(T2backup_finish_date), 131)), '') AS LastBackUpTaken
FROM syssysdatabases T1
LEFT OUTER JOIN msdbdbobackupset T2
ON T2database_name = T1name
WHERE type = 'L'
GROUP BY T1Name
--Get the databases with no backup yet taken
UNION ALL
SELECT T1Name AS DatabaseName,
Isnull(Max(T2recovery_model), 'No Backup Taken') AS recovery_model,
'No Backup' AS BackupType,
Isnull(CONVERT(VARCHAR(23), CONVERT(DATETIME, Max(T2backup_finish_date), 131)), '') AS LastBackUpTaken
FROM syssysdatabases T1
LEFT OUTER JOIN msdbdbobackupset T2
ON T2database_name = T1name
WHERE type IS NULL
GROUP BY T1Name
--Sort the combined results
ORDER BY T1name,
BackupType
捕捉SQL Server 2005数据库大小的趋势,这是非常重要的,因为DBA们可以利用这些信息来规划未来的空间需求,问题的通知类型,并规划繁重负载的时间段。本文将介绍一种捕捉这一信息的简单的方法。
SQL Server上的每个数据库都包含了关于数据库文件的大小的信息,连同其他一些相关信息。为了得到这个信息,我们需要一个方法来从单个数库中一次性检索出相关的数据。
有两个方法可以实现这个功能:
sp_spaceused:这个系统存储过程将返回当前数据库中的表、索引视图或 SQL Server 2005 Service Broker 队列所使用的磁盘空间。这是存储过程的返回数据库或者数据库中表的大小,但是报告的输出内容不太友好,不好理解。该存储过程通过脚本来捕获每个数据库的信息,但它可能需要用到用户自定义的光标。
sp_msforeachdb:这是一个非常有用的系统存储过程,将任何SQL脚本传递给你在每个数据库上的SQL Server实例上来执行。存储过程遍历每个数据库,这样就省却了您一项项指定数据库名称了。本文我们将利用这个存储过程来捕获各个数据库文件大小的信息。
这些资料我想收集和储存可以在sysdatabase_files系统视图中获得,包括数据库文件的大小,以及其他一些相关的信息,如数据库状态,数据库文件的增长方式(按绝对大小递增还是按百分比递增),是否是只读的等等。我需要捕获每个数据库中的这些信息。
IFOBJECT_ID('DatabaseFiles')ISNULLBEGINSELECTTOP0INTODatabaseFiles
FROMsysdatabase_files
ALTERTABLEDatabaseFiles
ADDCreationDateDATETIMEDEFAULT(GETDATE())END现在需要填充DatabaseFiles数据表。下面这个脚本使用sp_msforeachdb存储过程,并通过一个SQL脚本从sysdatabase_files读取数据,并插入到DatabaseFiles数据表中。
EXECUTE sp_msforeachdb 'INSERT INTO DatabaseFiles SELECT , GETDATE() FROM []sysdatabase_files'
从脚本中我们可以发现,每个数据库的数据库名称,有点特别:使用[ ]作为视图sysdatabase_files的前缀。
此代码执行时,实际上是遍历每个数据库实例,将数据库名称作为参数代替[ ]标记。每个数据库的信息,将插入到DatabaseFiles表。这比自己写一个自定义游标实现起来容易很多。我还增加了一个GETDATE( )函数,用来记录记录插入到表中的时间。
注意:这个例子有点违背编码标准,使用SELECT 插入到一个表时,没有明确写明字段名称不列清单。如果用于实际项目中,建议大家作下修改,注明字段名称。
为了确保正确捕获到所有的数据,我们来看看DatabaseFiles数据表中的内容。
SELECT FROM DatabaseFiles
执行上面的命令后,可以得到类似以下的信息:
1通过管理工具
开始->管理工具->性能(或者是运行里面输入 mmc)然后通过添加计数器添加 SQL 的常用统计 然后在下面列出的项目里面选择用户连接就可以时时查询到数据库的连接数了。不过此方法的话需要有访问那台计算机的权限,就是要通过Windows账户登陆进去才可以添加此计数器。
2通过系统表查询]
SELECT FROM[Master][dbo][SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID]FROM [Master][dbo][SYSDATABASES]WHERE NAME='DBName')首先需要知道“另一个存储过程”的结果集的所有列的类型。
假设“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)
INSERT INTO @t(a,b,c)
EXEC sp1
SELECT FROM @t
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。
创建存储过程
和数据表一样,在使用之前需要创建存储过程,它的简明语法是:
引用:
Create PROC 存储过程名称
[参数列表(多个以“,”分隔)]
AS
SQL 语句
例:
引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数
AS
BEGIN
-- 将uName的值赋给 @ostrUserName 变量,即要输出的参数
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END
其中 Create PROC 语句(完整语句为Create PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前 *** 作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。
二、存储过程的调用
之前已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。
引用:
Dim adoComm
’// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODBCommand")
With adoComm
’// 设置连接,设 adoConn 为已经连接的 ADODBConnection 对象
ActiveConnection = adoConn
’// 类型为存储过程,adCmdStoredProc = 4
CommandType = 4
’// 存储过程名称
CommandText = "upGetUserName"
’// 设置用户编号
ParametersItem("@intUserId")Value = 1
’// 执行存储过程
Execute
’// 取得从存储过程返回的用户名称
ResponseWrite "用户名:" & ParametersItem("@ostrUserName")Value
End With
’// 释放对象
Set adoComm = Nothing
通过以上两步,已经可以创建和使用简单的存储过程了。下面来看一个稍微复杂点的存储过程,以进一步了解存储过程的应用。
三、存储过程的实际应用
用户登录在ASP项目中经常会使用到,但使用存储过程来做验证可能不多,那么做例子,写一个简单的用户登录验证的存储过程。
引用:
Create PROC upUserLogin
@strLoginName NVARCHAR(20),
@strLoginPwd NVARCHAR(20),
@blnReturn BIT OUTPUT
AS
-- 定义一个临时用来保存密码的变量
DECLARE @strPwd NVARCHAR(20)
BEGIN
-- 从表中查询当前用户的密码,赋值给 @strPwd 变量,下面要对他进行比较
Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName
IF @strLoginPwd = @strPwd
BEGIN
SET @blnReturn = 1
-- 更新用户最后登录时间
Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName
END
ELSE
SET @blnReturn = 0
END
用户登录的存储过程建立好了。注意,在一个区域内如果有多条语句时,必需使用BEGINEND关键字。
引用:
Dim adoComm
’// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODBCommand")
With adoComm
’// 设置连接,设 adoConn 为已经连接的 ADODBConnection 对象
ActiveConnection = adoConn
’// 类型为存储过程,adCmdStoredProc = 4
CommandType = 4
’// 存储过程名称
CommandText = "upUserLogin"
’// 设置登录名称
ParametersItem("@strLoginName")Value = ""
’// 设置登录密码
ParametersItem("@strLoginPwd")Value = "123456"
’// 执行存储过程
Execute
’// 判断是否登录成功
If ParametersItem("@blnReturn")Value = 1 Then
ResponseWrite "恭喜你,登录成功!"
Else
ResponseWrite "不是吧,好像错了哦。。。"
End If
End With
’// 释放对象
Set adoComm = Nothing
通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。
上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。
引用:
Create PROC upGetUserInfos
@intUserGroup INT
AS
BEGIN
-- 从数据库中抽取符合条件的数据
Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup
-- 插入一列合计
UNION
Select ’合计人数:’,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup
END
现在我们来看一下ASP程序的调用。
引用:
Dim adoComm
Dim adoRt
’// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODBCommand")
Set adoRs = CreateObject("ADODBRecordset")
With adoComm
’// 设置连接,设 adoConn 为已经连接的 ADODBConnection 对象
ActiveConnection = adoConn
’// 类型为存储过程,adCmdStoredProc = 4
CommandType = 4
’// 存储过程名称
CommandText = "upGetUserInfos"
’// 设置用户组
ParametersItem("@intUserGroup")Value = 1
’// 执行存储过程,和以上几个例子不同,这里使用RecordSet的Open方法
adoRsOpen adoComm
’// 显示第一个值
Responsewrite adoRsFields(0)Value
End With
’// 释放对象
Set adoRs = Nothing
Set adoComm = Nothing
1、用select 您要的字段 from 表 where 条件
2、比如从stu 表取到当前日期到15天以后学生的名字、年龄、数学分数,到期字段 exptime
select name, age ,mate from stu where convert(nvarchar(10),exptime,120)>=convert(nvarchar(10),dateadd(day, -15, getdate()),120)
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。语法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
定义和用法
DATEADD() 函数在日期中添加或减去指定的时间间隔。
语法
DATEADD(datepart,number,date)
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
datepart
缩写
年 yy, yyyy
季度 qq, q
月 mm, m
年中的日 dy, y
日 dd, d
周 wk, ww
星期 dw, w
小时 hh
分钟 mi, n
秒 ss, s
毫秒 ms
微妙 mcs
纳秒 ns
1、常用日期方法(下面的GetDate() = '2006-11-08 13:37:56233')
(1)DATENAME ( datepart ,date )
返回表示指定日期的指定日期部分的字符串。Datepart详见下面的列表
SELECT DateName(day,Getdate()) –返回8
(2)DATEPART ( datepart , date )
返回表示指定日期的指定日期部分的整数。
SELECT DATEPART(year,Getdate()) –返回2006
(3)DATEADD (datepart , number, date )
返回给指定日期加上一个时间间隔后的新datetime 值。
SELECT DATEADD(week,1,GetDate()) --当前日期加一周后的日期
(4)DATEDIFF ( datepart , startdate , enddate )
返回跨两个指定日期的日期边界数和时间边界数。
SELECT DATEDIFF(month,'2006-10-11','2006-11-01') --返回1
(5)DAY ( date )
返回一个整数,表示指定日期的天datepart 部分。
SELECT day(GetDate()) –返回8
(6)GETDATE()
以datetime 值的SQL Server 2005 标准内部格式返回当前系统日期和时间。
SELECT GetDate() --返回2006-11-08 13:37:56233
(7)MONTH ( date )
返回表示指定日期的“月”部分的整数。
SELECT MONTH(GETDATE()) --返回11
(8)YEAR ( date )
返回表示指定日期的“年”部分的整数。
SELECT YEAR(GETDATE()) --返回2006
2、取特定日期
(1)获得当前日期是星期几
SELECT DateName(weekday,Getdate()) --Wednesday
(2)计算哪一天是本周的星期一
SELECT DATEADD(week, DATEDIFF(week,'1900-01-01',getdate()), '1900-01-01') --返回2006-11-06 00:00:00000
或
SELECT DATEADD(week, DATEDIFF(week,0,getdate()),0)
(3)当前季度的第一天
SELECT DATEADD(quarter, DATEDIFF(quarter,0,getdate()), 0)—返回2006-10-01 00:00:00000
(4)如何取得某个月的天数
SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,'2006-02-03')+1,0))) —返回28
(5)一个季度多少天
declare @m tinyint,@time smalldatetime
select @m=month(getdate())
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01'
select datediff(day,@time,dateadd(mm,3,@time)) —返回92
(6)获得年月日(yyyy-MM-dd)
SELECT CONVERT(VARCHAR(10),GETDATE(),120) –返回2006-11-08
3、其它
(1)--下面的示例将日期指定为数字。数据库引擎将0 解释为1900 年1 月1 日。
SELECT MONTH(0), DAY(0), YEAR(0) –返回1 1 1900
--下面两句是等效的
SELECT DATENAME(WEEKDAY,0)
SELECT DATENAME(WEEKDAY,'1900-01-01')
(2)SET DATEFIRST { number | @number_var }
将一周的第一天设置为从1 到7 的一个数字。
SET DATEFIRST 1 --表示一周的第一天是“星期一"
SELECT DATENAME(WEEKDAY,GETDATE()) --Wednesday
SELECT DATEPART(weekday,GETDATE()) --返回3
--查看当前设置情况
select @@DATEFIRST
(3)SET DATEFORMAT { format | @format_var }
设置用于输入datetime 或smalldatetime 数据的日期部分(月/日/年)的顺序。
有效参数包括mdy、dmy、ymd、ydm、myd 和dym。
该设置仅用在将字符串转换为日期值时的解释中。它不影响日期值的显示。
SET DATEFORMAT 的设置是在执行或运行时设置,而不是在分析时设置。
SET DATEFORMAT 将覆盖SET LANGUAGE 的隐式日期格式设置。
下面是例子:
-- Set date format to year, day, month
SET DATEFORMAT ydm;
GO
DECLARE @datevar DATETIME;
SET @datevar = '1998/31/12';
SELECT @datevar AS DateVar;
GO
-- Set date format to year, month, day
SET DATEFORMAT ymd;
GO
DECLARE @datevar DATETIME;
SET @datevar = '1998/12/31';
SELECT @datevar AS DateVar;
GO
以上就是关于怎么获取服务器上sql server 数据备份全部的内容,包括:怎么获取服务器上sql server 数据备份、SQL Server 2005中如何获取数据库文件大小信息、如何查看SQL SERVER数据库当前连接数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)