FROM Northwind..Orders
ORDER BY NEWID()
FROM Northwind..Orders
ORDER BY NEWID()
Error 14426: A log shipping monitor is already defined (...)
1、sp_delete_log_shipping_primary
删除msdb.dbo.log_shipping_primary表中的Primary Server信息
2、sp_delete_log_shipping_plan
删除Log Shipping计划
3、sp_delete_log_shipping_secondary
删除msdb.dbo.log_shipping_secondaries表中的Secondary Server信息
4、sp_remove_log_shipping_monitor
删除Log Shipping监视从表msdb.dbo.log_shipping_monitor
Starting maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
Backup can not be performed on database 'ERPLogShipping'. This sub task is ignored.
Deleting old text reports... 0 file(s) deleted.
End of maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
SQLMAINT.EXE Process Exit Code: 1 (Failed)
核 心考试 - MCDBA 参考人需要通过一门 SQL Server 管理考试和一门 SQL Server 设计考试。此外,MCDBA 参考人还可以选择通过一门 Windows 2000 或一门 Windows .NET Server 考试,以满足核心要求。 |
SQL Server 考试 |
Exam 70-028 -Administering Microsoft SQL Server?7.0 或 Exam 70-228 -Installing, Configuring, and Administering Microsoft SQL Server? 2000 Enterprise Edition |
Exam 70-029 -Designing and Implementing Databases with Microsoft SQL Server 7.0 或 Exam 70-229 -Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition |
Windows 2000 考试 |
Exam 70-215 -Installing, Configuring, and Administering Microsoft Windows 2000 Server |
Windows XP/Windows .NET Server 考试 |
Exam 70-275-Installing, Configuring and Administering Microsoft Windows?.NET Server (2002 年推出) |
Exam 70-215 的替代考试 - 通过了 Windows NT 4.0 Exam 70-067 和 70-068 的参考人可以选择参加如下考试,代替上面的 Windows 2000 系列中的 Exam 70-215。 |
Exam 70-240* -Microsoft Windows 2000 Accelerated Exam for MCPs Certified on Microsoft Windows NT? 4.0.(在 2001 年 12 月 31 日之前提供。有关详细信息,请参阅 常见问题解答 。) |
选修考试(只需要考一门,从下面的列表中选择) |
Exam 70-015 -Designing and Implementing Distributed Applications with Microsoft Visual C++ 6.0 |
Exam 70-019 -Designing and Implementing Data Warehouses with Microsoft SQL Server 7.0 |
Exam 70-155 -Designing and Implementing Distributed Applications with Microsoft Visual FoxPro? 6.0 |
Exam 70-175 -Designing and Implementing Distributed Applications with Microsoft Visual Basic? 6.0 |
Exam 70-216 -Implementing and Administering a Microsoft Windows 2000 Network Infrastructure |
Exam 70-276-Implementing and Administering a Microsoft Windows .NET Server Network Infrastructure (2002 年推出) |
Exam 70-216 的替代考试 - 通过了 Windows NT 4.0 Exam 70-067 和 70-068 的参考人可以选择参加如下考试,代替上面的 Windows 2000 系列中的 Exam 70-216。 |
Exam 70-240* -Microsoft Windows 2000 Accelerated Exam for MCPs Certified on Microsoft Windows NT? 4.0。(在 2001 年 12 月 31 日之前提供。有关详细信息,请参阅 常见问题解答 。) |
用户在网上注册后,系统将随机产生的密码发送到用户登记的Email
用户在论坛的帖子有回复时将内容发送到用户的Email
因为上述过程都是在存储过程中完成的,所以避免了前台程序对参数的传输处理,也不需要再用第三方的组件完成,感觉比较方便。
1.为了使用SQL mail,首先你的服务器上得有SMTP服务,我没有安装win2000 server自带的SMTP,而是用imail6.04的SMTP,感觉比较稳定,功能也比较强。
2.安装一个邮件系统,我安装了outLook 2000,我发现在配置邮件profile时,如果不安装outLook而是用别的第三方程序,win2k中文server版在控制面板中就找不到“邮件”一项。
3.安装完outlook后再刷新控制面板,就会找到“邮件”一项,双击进行邮件的配置,为配置文件起一个名字(假设为myProfile),以便以后SQL mail使用,在该配置文件中设置各项属性。
4.启动outlook(设置为用myProfile作为默认的配置文件),测试进行收发邮件,确认outlook工作正常。
5. 用当前的域账户启动SQL server,在企业管理器的支持服务中,点击SQL mail的属性,可以看到在配置文件选择中,出现了刚才定义的 myProfile配置文件(你也可以定义多个profile),选择这个配置文件进行测试,SQL将返回成功开始和结束一个MAPI会话的信息,如果出 现错误或是没有找到邮件配置文件,那一定是你启动SQL server用的账号有问题。
6.现在你就可以在查询分析器中用XP_sendmail这个扩展存储过程发送SQL mail了,格式如下:
xp_sendmail {[@recipients =] 'recipients [;...n]'}
[,][@message =] 'message']
[,][@query =] 'query']
[,][@attachments =] attachments]
[,][@copy_recipients =] 'copy_recipients [;...n]'
[,][@blind_copy_recipients =] 'blind_copy_recipients [;...n]'
[,][@subject =] 'subject']
[,[@type =] 'type']
[,][@attach_results =] 'attach_value']
[,][@no_output =] 'output_value']
[,][@no_header =] 'header_value']
[,][@width =] width]
[,][@separator =] 'separator']
[,][@echo_error =] 'echo_value']
[,][@set_user =] 'user']
[,][@dbuse =] 'database']
其中@recipients是必需的
参数说明:
@recipients 收件人,中间用逗号分开
@message 要发送的信息
@query 确定执行并依附邮件的有效查询,除触发器中的插入表及删除表外,此查询能引用任何对象
@attachments 附件
@copy_recipients 抄送
@blind_copy_recipients 密送
@subject 标题
@attach_results 指定查询结果做为附件发送
@no_header 不发送查询结果的列名
@set_user 查询联接的用户名,默认为Guset
@dbuse 查询所用的数据库,默认为缺省数据库
7. 不过,如果是在web应用中使用SQL mail,还有一些问题要解决:首先,就是应用程序中连接数据库的账号,我在网站程序中的数据库连接是使用UDL 文件,账号为DbGuest,这是一个普通帐户,所以还必须在master库的扩展存储过程找到XP_sendmail,并在其属性中增加DbGuest 这个用户,并选择EXEC权限。
SQL服务器外网IP测试故障解决
用别名和127.0.0.1都可以测试连接成功,但是用服务器的外网IP就可以连接
还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如 ISA Server.防火墙软件可能会屏蔽对 ping,telnet 等的响应
因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.
则说明名字解析有问题,这时候要检查 DNS 服务是否正常.
有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,
具体的方法是:
添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24 myserver
telnet <服务器IP地址> 1433
如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动 SQL Server 服务,
也可能服务器端没启用 TCP/IP 协议,或者服务器端没有在 SQL Server 默认的端口1433上监听.
可以利用 SQL Server 自带的服务器网络使用工具来进行检查.
一般而言,我们启用命名管道以及 TCP/IP 协议.
点中 TCP/IP 协议,选择"属性",我们可以来检查 SQL Server 服务默认端口的设置。一般而言,我们使用 SQL Server 默认的1433端口.如果选中"隐藏服务器",则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.
我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,
所不同的是这次是在客户端来运行这个工具.
一般而言,我们同样需要启用命名管道以及 TCP/IP 协议.
点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致.
连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处.
因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法如下所示:
在企业管理器中
--右键你的服务器实例(就是那个有绿色图标的)
--编辑SQL Server注册属性
--选择"使用windows身份验证"
3.在"身份验证"下,选择"SQL Server和 Windows ".
4.重新启动SQL Server服务.
2.依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSSQLServer/MSSQLServer]
3.在屏幕右方找到名称"LoginMode",双击编辑双字节值
4.将原值从1改为2,点击"确定"
5.关闭注册表编辑器
6.重新启动SQL Server服务.
但是仍然无法使用Windows身份验证模式来连接SQL Server.
这是因为在 SQL Server 中有两个缺省的登录帐户:
BUILTIN/Administrators
<机器名>/Administrator 被删除.
要恢复这两个帐户,可以使用以下的方法:
2.展开"安全性",右击"登录",然后单击"新建登录"
3.在"名称"框中,输入 BUILTIN/Administrators
4.在"服务器角色"选项卡中,选择"System Administrators"
5.点击"确定"退出
6.使用同样方法添加 <机器名>/Administrator 登录.
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSSQLServer/MSSQLServer/LoginMode
的值决定了SQL Server将采取何种身份验证模式.
1.表示使用"Windows 身份验证"模式
2.表示使用混合模式(Windows 身份验证和 SQL Server 身份验证).
企业管理器中的设置:
1.在企业管理器中,选择菜单上的"工具",再选择"选项"
2.在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡
3.在"连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如 20.
工具 -- 选项 -- 连接 -- 将登录超时设置为一个较大的数字
我有①、②二张表:
①表有一个字段。通过条件查询出来其中一个字段的返回值。
②表有二个字段。通过条件查询出来其中2个字段的返回值,并将其值相加。
然后把①、②表的返回值做数字的大小比较。
如果返回①表的值大于②表的值,则返回“错误”的提示。
反之,则报正常。
怎么写这个sql语句?
create table t1
(
idd varchar(10) not null,
value int not null
)
(
idd varchar(10) not null,
value1 int not null,
value2 int not null
)
select '1', 10
union all
select '2', 20
select '1', 3, 5
union all
select '2', 12, 9
select @Res = case when ((select t1.value from t1 where idd='2') > (select value=t2.value1+t2.value2 from t2 where idd='2') )
then '错误' else '正确' end
drop table t2
正确
*/
INSERT INTO mytable (id,time) VALUES (100,to_date('2005-3-23 11:23:25','YYYY-MM-DD HH24:MI:SS'));
但是sql server不支持to_date
(
id int,
time datetime --SQL里自带时间格式
)
insert into simp(id,time) values (100,'2005-3-23 11:23:25')
go
select * from simp
drop table simp
设置用于输入 datetime 或 smalldatetime 数据的日期部分(月/日/年)的顺序。
SET DATEFORMAT { format | @format_var }
format | @format_var
该设置仅用在将字符串转换为日期值时的解释中。它对日期值的显示没有影响。
SET DATEFORMAT 权限默认授予所有用户。
下例使用不同的日期格式处理不同格式的日期字符串。
GO
DECLARE @datevar datetime
SET @datevar = '12/31/98'
SELECT @datevar
GO
GO
DECLARE @datevar datetime
SET @datevar = '98/31/12'
SELECT @datevar
GO
GO
DECLARE @datevar datetime
SET @datevar = '98/12/31'
SELECT @datevar
GO
登录信息”。
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSSQLServer/MSSQLServer下的loginmode
如果用t-sql语句,可用下面的
定义远程服务器或本地 Microsoft® SQL Server™ 的名称。提供 sp_addserver 是为向后兼容。请使用 sp_addlinkedserver。
sp_addserver [ @server = ] 'server'
[ , [ @local = ] 'local' ]
[ , [ @duplicate_ok = ] 'duplicate_OK' ]
[@server =] 'server'
0(成功)或 1(失败)
若要执行运行较早版本的 SQL Server 的远程服务器上的存储过程(远程过程调用),请使用 sp_addserver 添加远程服务器。若要执行运行 SQL Server 7.0 的远程服务器上的存储过程(或任何分布式查询),请使用 sp_addlinkedserver 添加服务器。
只有 setupadmin 和 sysadmin 固定服务器角色的成员才能执行 sp_addserver。
下面的示例在本地服务器上为远程服务器 ACCOUNTS 创建一个条目。
1. 通过工具DTS的设计器进行导入或导出DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然,也可以进行全部表的移动。在SQL Server Enterprise Manager中,展开服务器左边的+,选择数据库,右击,选择All tasks/Import Data...(或All tasks/Export Data...),进入向导模式,按提示一步一步走就行了,里面分得很细,可以灵活的在不同数据源之间复制数据,很方便的。而且可以另存成DTS包,如果 以后还有相同的复制任务,直接运行DTS包就行,省时省力。也可以直接打开DTS设计器,方法是展开服务器名称下面的Data Transformation Services,选Local Packages,在右边的窗口中右击,选New Package,就打开了DTS设计器。值得注意的是:如果源数据库要拷贝的表有外键,注意移动的顺序,有时要分批移动,否则外键主键,索引可能丢失,移 动的时候选项旁边的提示说的很明白,或者一次性的复制到目标数据库中,再重新建立外键,主键,索引。
其实建立数据库时,建立外键,主键,索引的文件应该和建表文件分开,而且用的数据文件也分开,并分别放在不同的驱动器上,有利于数据库的优化。
2. 利用Bcp工具
这种工具虽然在SQL Server7的版本中不推荐使用,但许多数据库管理员仍很喜欢用它,尤其是用过SQL Server早期版本的人。Bcp有局限性,首先它的界面不是图形化的,其次它只是在SQL Server的表(视图)与文本文件之间进行复制,但它的优点是性能好,开销小,占用内存少,速度快。有兴趣的朋友可以查参考手册。
3. 利用备份和恢复
先对源数据库进行完全备份,备份到一个设备(device)上,然后把备份文件复制到目的服务器上(恢复的速度快),进行数据库的恢复操作,在恢复的数 据库名中填上源数据库的名字(名字必须相同),选择强制型恢复(可以覆盖以前数据库的选项),在选择从设备中进行恢复,浏览时选中备份的文件就行了。这种 方法可以完全恢复数据库,包括外键,主键,索引。
4. 直接拷贝数据文件
把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL Server Query Analyzer中用语句进行恢复:
EXEC sp_attach_db @dbname = 'test',
@filename1 = 'd:/mssql7/data/test_data.mdf',
@filename2 = 'd:/mssql7/data/test_log.ldf'
这样就把test数据库附加到SQL Server中,可以照常使用。如果不想用原来的日志文件,可以用如下的命令:
EXEC sp_detach_db @dbname = 'test'
EXEC sp_attach_single_file_db @dbname = 'test',
@physname = 'd:/mssql7/data/test_data.mdf'
这个语句的作用是仅仅加载数据文件,日志文件可以由SQL Server数据库自动添加,但是原来的日志文件中记录的数据就丢失了。
5. 在应用程序中定制
可以在应用程序(PB、VB)中执行自己编写的程序,也可以在Query Analyzer中执行,这种方法比较灵活,其实是利用一个平台连接到数据库,在平台中用的主要时SQL语句,这种方法对数据库的影响小,但是如果用到远 程链接服务器,要求网络之间的传输性能好,一般有两种语句:
1> select ... into new_tablename where ...
2> insert (into) old_tablename select ... from ... where ...
区别是前者把数据插入一个新表(先建立表,再插入数据),后者是把数据插入已经存在的一个表中,我个人喜欢后者,因为在编程的结构上,应用的范围上,第二条语句强于前者。
6. SQL Server的复制功能
SQL Server提供了强大的数据复制功能,也是最不易掌握的,具体应用请参考相关资料,值得注意的是要想成功进行数据的复制工作,有些条件是必不可少的:
1>SQL Server Agent必须启动,MSDTC必须启动。
2>所有要复制的表必须有主键。
3>如果表中有text或image数据类型,必须使用with log选项,不能使用with no_log选项。
另外max text repl size选项控制可以复制的文本和图像数据的最大规模,超过这个限制的操作将失败。
4>在要进行复制的计算机上,应该至少是隐含共享,即共享名是C$或D$…。
5>为SQL Server代理使用的Windows NT帐号不能是一个本地的系统帐号,因为本地的系统帐号不允许网络存取。
6>如果参与复制的服务器在另外的计算机域中,必须在这些域之间建立信任关系。
2.使用 Microsoft 基线安全性分析器(MBSA)来评估服务器的安全性。
2) 授予sysadmin以外的其他角色创建 CmdExec 作业的权利。
3) 空的或简单的密码。
4) 脆弱的身份验证模式。
5) 授予管理员组过多的权利。
6) SQL Server数据目录中不正确的访问控制表(ACL)。
7) 安装文件中使用纯文本的sa密码。
8) 授予guest帐户过多的权利。
9) 在同时是域控制器的系统中运行SQL Server。
10) 所有人(Everyone)组的不正确配置,提供对特定注册表键的访问。
11) SQL Server 服务帐户的不正确配置。
12) 没有安装必要的服务包和安全更新。
Microsoft 提供 MBSA 的免费下载。
3.使用 Windows 身份验证模式。
2) 右键点击服务器,然后点击属性。
3) 在安全性选项卡的身份验证中,点击仅限 Windows。
4.隔离您的服务器,并定期备份。
5.分配一个强健的sa密码。
2) 展开安全性,然后点击登录。
3) 在细节窗格中,右键点击SA,然后点击属性。
4) 在密码方框中,输入新的密码。
SQL Server Agent 使用多服务器管理主服务器(MSX)帐户,而该帐户使用标准 SQL Server 身份验证进行连接。
SQL Server Agent 运行非sysadmin固定服务器角色成员所拥有的 Microsoft ActiveX?脚本或 CmdExec 作业。
7.在防火墙上禁用 SQL Server 端口。
8.使用最安全的文件系统。
9.删除或保护旧的安装文件。
10.审核指向 SQL Server 的连接。
2) 右键点击服务器,然后点击属性。
3) 在安全性选项卡的审核等级中,点击失败。
4) 要使这个设置生效,您必须停止并重新启动服务器。
删除PendingFileRenameOperations
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
go
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想设定的日志文件的大小(M)
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户……
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
END
deallocate curObject
没什么好说的了,大家自己看,有时候有点用处
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
无数据库日志文件恢复数据库方法两则
数据库日志文件的误删或别的原因引起数据库日志的损坏
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
GO
GO
Go
Go
Go
Go
Go
Go
附加数据库
_Rambo讲过被删除日志文件中不存在活动日志时,可以这么做来恢复:
2,附加数据库,可以使用sp_attach_single_file_db
不行,无法读取XXX数据库,DTS Wizard报告说“初始化上下文发生错误”。
怡红公子讲过没有日志用于恢复时,可以这么做:
设置数据库为紧急模式
停掉SQL Server服务;
运行DTS导出向导;
Dim cnn
Dim rs