??xml version="1.0" encoding="utf-8" standalone="yes"?>未来日记在线观看,欧美91在线|欧美,亚洲成人国产http://www.aygfsteel.com/tjmzq/archive/2006/12/11/86813.htmlmaqsoftmaqsoftMon, 11 Dec 2006 01:41:00 GMThttp://www.aygfsteel.com/tjmzq/archive/2006/12/11/86813.htmlhttp://www.aygfsteel.com/tjmzq/comments/86813.htmlhttp://www.aygfsteel.com/tjmzq/archive/2006/12/11/86813.html#Feedback0http://www.aygfsteel.com/tjmzq/comments/commentRss/86813.htmlhttp://www.aygfsteel.com/tjmzq/services/trackbacks/86813.html 包括安装时提C有挂v的操作、收~数据库、压~数据库、{UL据库l新用户以已存在用户权限、检查备份集、修复数据库{?br />1.挂v操作

在安装Sql或sp补丁的时候系l提CZ前有挂v的安装操作,要求重启Q这里往往重启无用Q解军_法:

到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

删除PendingFileRenameOperations

2.收羃数据?

--重徏索引

DBCC REINDEX

DBCC INDEXDEFRAG

--收羃数据和日?

DBCC SHRINKDB

DBCC SHRINKFILE

3.压羃数据?

dbcc shrinkdatabase(dbname)

4.转移数据库给新用户以已存在用h?

exec sp_change_users_login 'update_one','newname','oldname'

go

5.查备份集

RESTORE VERIFYONLY from disk='E:\dVBbs.bak'

6.修复数据?

ALTER DATABASE [dvbbs] SET SINGLE_USER

GO

DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

GO

ALTER DATABASE [dvbbs] SET MULTI_USER

GO

--CHECKDB ?个参?

--REPAIR_ALLOW_DATA_LOSS

--
执行?REPAIR_REBUILD
完成的所有修复,包括对行和页q行分配和取消分配以Ҏ分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会D一些数据丢失。修复操
作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误Q应该从备䆾q行恢复。如果由于所提供修复{的缘故遗漏某个错?br />的修复,则将遗漏M取决于该修复的修复。修复完成后Q备份数据库?

--REPAIR_FAST q行的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,q且不会有丢失数据的危险?

--REPAIR_REBUILD 执行?REPAIR_FAST 完成的所有修复,包括需要较长时间的修复Q如重徏索引Q。执行这些修复时不会有丢失数据的危险?

--DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY

7.SQL Server日志清除的两U方?

在用过E中大家l常到数据库日志非常大的情况,在这里介l了两种处理Ҏ…?

Ҏ一Q?

一般情况下QSQL数据库的收羃q不能很大程度上减小数据库大,其主要作用是收羃日志大小Q应当定期进行此操作以免数据库日志过大?

1?br />讄数据库模式ؓ单模式:打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL
Serverl?->双击打开你的服务?->双击打开数据库目?->选择你的数据库名Uͼ如论坛数据库ForumQ?->?br />后点d键选择属?->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存?

2、在当前数据库上点右键,看所有Q务中的收~数据库Q一般里面的默认讄不用调整Q直接点定?

3、收~数据库完成后,您的数据库属性重新设|ؓ标准模式Q操作方法同W一点,因ؓ日志在一些异常情况下往往是恢复数据库的重要依据?

Ҏ二:

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE databasename -- 要操作的数据库名

SELECT @LogicalFileName = 'databasename_log', -- 日志文g?

@MaxMinutes = 10, -- Limit on time allowed to wrap log.

@NewSize = 1 -- 你想讑֮的日志文件的大小(M)

-- Setup / initialize

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)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

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


8.删除数据库中重复数据的几个方?

数据库的使用q程中由于程序方面的问题有时候会到重复数据Q重复数据导致了数据库部分设|不能正设|…?

Ҏ一

declare @max integer,@id integer

declare cur_rows cursor local for select dD?count(*) from 表名 group by dD?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 dD?= @id

fetch cur_rows into @id,@max

end

close cur_rows

set rowcount 0

Ҏ?

有两个意义上的重复记?

一是完全重复的记录Q也x有字D均重复的记录,

二是部分关键字段重复的记录,比如Name字段重复Q而其他字D不一定重复或都重复可以忽略?

A、对于第一U重复,比较Ҏ解决Q?

select distinct * from tableName

可以得到无重复记录的结果集?

如果该表需要删除重复的记录Q重复记录保?条)Q可以按以下Ҏ删除Q?

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

发生q种重复的原因是表设计不周生的Q增加唯一索引列即可解冟?

B、这c重复问题通常要求保留重复记录中的W一条记录,操作Ҏ如下

假设有重复的字段为Name,AddressQ要求得到这两个字段唯一的结果集?

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select卛_CNameQAddress不重复的l果集(但多了一个autoID字段Q实际写时可以写在select子句中省L列)?

9.更改数据库中表的所属用L两个Ҏ

大家可能会经常碰C个数据库备䆾q原到另外一台机器结果导致所有的表都不能打开了,原因是徏表的时候采用了当时的数据库用户…?

--更改某个?

exec sp_changeobjectowner 'tablename','dbo'

--存储更改全部?

CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch

@OldOwner as NVARCHAR(128),

@NewOwner as NVARCHAR(128)

AS

DECLARE @Name as NVARCHAR(128)

DECLARE @Owner as NVARCHAR(128)

DECLARE @OwnerName as NVARCHAR(128)

DECLARE curObject CURSOR FOR

select 'Name' = name,

'Owner' = user_name(uid)

from sysobjects

where user_name(uid)=@OldOwner

order by name

OPEN curObject

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

FETCH NEXT FROM curObject INTO @Name, @Owner

END

close curObject

deallocate curObject

GO

10.SQL Server中直接@环写入数?

declare @i int

set @i=1

while @i<30

begin

insert into test (userid) values(@i)

set @i=@i+1

end

11.无数据库日志文g恢复数据库方法两?

数据库日志文件的误删或别的原因引h据库日志的损坏?

Ҏ一Q?

1.新徏一个同名的数据库;

2.再停掉SQL Server(注意不要分离数据?Q?

3.用原数据库的数据文g覆盖掉这个新建的数据库;

4.再重启sql serverQ?

5.此时打开企业理器时会出现置疑,先不,执行下面的语句(注意修改其中的数据库?Q?

6.完成后一般就可以讉K数据库中的数据了,q时,数据库本w一般还要问?解决办法?利用?

数据库的脚本创徏一个新的数据库,q将数据Dd行了?

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='|疑的数据库?

Go

sp_dboption '|疑的数据库?, 'single user', 'true'

Go

DBCC CHECKDB('|疑的数据库?)

Go

update sysdatabases set status =28 where name='|疑的数据库?

Go

sp_configure 'allow updates', 0 reconfigure with override

Go

sp_dboption '|疑的数据库?, 'single user', 'false'

Go

Ҏ二:

讄数据库ؓ紧急模式;

停掉SQL Server服务Q?

把应用数据库的数据文件XXX_Data.mdfU走Q?

重新建立一个同名的数据库XXXQ?

停掉SQL服务Q?

把原来的数据文g再覆盖回来;

q行以下语句Q把该数据库讄为紧急模式;

q行

“Use Master

Go

sp_configure 'allow updates', 1

reconfigure with override

Go?

执行l果Q?

DBCC 执行完毕。如?DBCC 输出了错误信息,请与pȝ理员联pR?

已将配置选项 'allow updates' ?0 改ؓ 1。请q行 RECONFIGURE 语句以安装?

接着q行“update sysdatabases set status = 32768 where name = 'XXX'?

执行l果Q?

Q所影响的行Cؓ 1 行)

重启SQL Server服务Q?

q行以下语句Q把应用数据库设|ؓSingle User模式Q?

q行“sp_dboption 'XXX', 'single user', 'true'?

执行l果Q?

命o已成功完成?

做DBCC CHECKDBQ?

q行“DBCC CHECKDB('XXX')?

执行l果Q?

'XXX' ?DBCC l果?

'sysobjects' ?DBCC l果?

对象 'sysobjects' ?273 行,q些行位?5 中?

'sysindexes' ?DBCC l果?

对象 'sysindexes' ?202 行,q些行位?7 中?

'syscolumns' ?DBCC l果?

……?

q行以下语句把系l表的修攚w项xQ?

q行“sp_resetstatus "XXX"

go

sp_configure 'allow updates', 0

reconfigure with override

Go?

执行l果Q?

?sysdatabases 中更新数据库 'XXX' 的条目之前,模式 = 0Q状?= 28Q状?suspect_bit = 0Q,

没有更新 sysdatabases 中的M行,因ؓ已正地重置了模式和状态。没有错误,未进行Q何更攏V?

DBCC 执行完毕。如?DBCC 输出了错误信息,请与pȝ理员联pR?

已将配置选项 'allow updates' ?1 改ؓ 0。请q行 RECONFIGURE 语句以安装?

重新建立另外一个数据库XXX.LostQ?

DTS导出向导

q行DTS导出向导Q?

复制源选择EmergencyMode的数据库XXXQ导入到XXX.LostQ?

选择“在SQL Server数据库之间复制对象和数据”,试了多次Q好像不行,只是复制q来了所有表l构Q但是没有数据,也没有视囑֒存储q程Q而且DTS向导最后报告复制失败;

所以最后选择“从源数据库复制表和视图”,但是后来发现Q这hL只能复制一部分表记录;

于是选择“用一条查询指定要传输的数据”,~哪个表记录Q就导哪个;

视图和存储过E是执行SQL语句d的?

12.l护SQL Server中表的烦?

在用和创徏数据库烦引中l常会碰C些问题,在这里可以采用一些另cȝҎ解决?

--W一步:查看是否需要维护,查看扫描密度/Scan Density是否?00%

declare @table_id int

set @table_id=object_id('表名')

dbcc showcontig(@table_id)

--W二?重构表烦?

dbcc dbreindex('表名',pk_索引?100)

--重做W一步,如发现扫描密?Scan Densityq是于100%则重构表的所有烦?

--杨铮Qƈ不一定能?00%?

dbcc dbreindex('表名','',100)

13.SQL Server补丁版本的检?

SQL Server的补丁版本检查不如Windows 补丁版本查直接,一个系l管理员Q如果不了解SQL Server版本对应的补丁号Q可能也会遇C炚w烦,因此在这说明一下,通过q样的办法判别机器是安全的办法,不会对系l生Q何媄响?

1、用Isql或者SQL查询分析器登录到SQL ServerQ如果是用IsqlQ请在cmdH口输入isql -U sa,然后输入密码Q进入;如果是用SQL查询分析器,请从E序中启动,输入sa和密码(也可以用windows验证Q?

2、在ISQL中输入:

Select @@VersionQ?

go

或者SQL查询分析器中输入(其实如果不想输入Q只要打开帮助的关于就可以?))

Select @@VersionQ?

然后按执行;

q时会返回SQL的版本信息,如下Q?

Microsoft
SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright
(c) 1988-2003 Microsoft Corporation EntERPrise Edition on Windows NT
5.0 (Build 2195: Service Pack 3)

其中?.00.760是SQL Server的版本和补丁受对应关pd下:

SQL Server 2000 版本和?@@VERSION 产品U别

SQL Server 2000 原始版本 8.00.194 RTM

Database Components SP1 8.00.384 SP1

Database Components SP2 8.00.534 SP2

Database Components SP3、SP3a ?MSDE 2000 Release A 8.00.760 SP3

Database Components SP4 8.00.2039 SP4

q样我们p看到SQL Server的正版本和补丁号了?

我们也可以用xp_msver看到更详l的信息?

14.Sql Server数据库的备䆾和恢复措?

14.1、备份数据库

1、打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL ServerQ?

2、SQL Serverl?->双击打开你的服务?->双击打开数据库目录;

3、选择你的数据库名Uͼ如论坛数据库ForumQ?->然后点上面菜单中的工?->选择备䆾数据库;

4、备份选项选择完全备䆾Q目的中的备份到如果原来有\径和名称则选中名称点删除,然后Ҏ加,如果原来没有路径和名U则直接选择dQ接着指定路径和文件名Q指定后点确定返回备份窗口,接着点确定进行备份?

14.2、还原数据库

1、打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL ServerQ?

2、SQL Serverl?->双击打开你的服务?->点图标栏的新建数据库图标Q新建数据库的名字自行取Q?

3、点L建好的数据库名称Q如论坛数据库ForumQ?->然后点上面菜单中的工?->选择恢复数据库;

4?br />在弹出来的窗口中的还原选项中选择从设?->炚w择讑֤-->Ҏ?->然后选择你的备䆾文g?->d后点定q回Q这
时候设备栏应该出现您刚才选择的数据库备䆾文g名,备䆾号默认ؓ1Q如果您对同一个文件做q多ơ备份,可以点击备䆾h边的查看内容Q在复选框中选择最?br />的一ơ备份后点确定)-->然后点击上方常规旁边的选项按钮Q?

5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状
态中选择使数据库可以l箋q行但无法还原其它事务日志的选项。在H口的中间部位的数据库文gq原里要按照你SQL的安装进行设|(也可以指定自q
目录Q,逻辑文g名不需要改动,U至物理文g名要Ҏ你所恢复的机器情况做改动Q如您的SQL数据库装在D:\Program
Files\Microsoft SQL
Server\MSSQL\DataQ那么就按照您恢复机器的目录q行相关改动改动Qƈ且最后的文g名最好改成您当前的数据库名(如原来是
bbs_data.mdfQ现在的数据库是forumQ就Ҏforum_data.mdfQ,日志和数据文仉要按照这L方式做相关的改动Q日志的?br />件名?_log.ldfl尾的)Q这里的恢复目录您可以自p|,前提是该目录必须存在Q如您可以指定d:\sqldata\bbs_data.mdf
或者d:\sqldata\bbs_log.ldfQ,否则恢复报错;

6、修改完成后Q点M面的定q行恢复Q这时会出现一个进?br />条,提示恢复的进度,恢复完成后系l会自动提示成功Q如中间提示报错Q请记录下相关的错误内容q询问对SQL操作比较熟悉的h员,一般的错误无非是目录错
误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误Q数据库正在使用的错误您可以试关闭所有关于SQLH口然后重新打开q行恢复?br />作,如果q提C正在用的错误可以SQL服务停止然后重v看看Q至于上q其它的错误一般都能按照错误内容做相应改动后即可恢复?

14.3、收~数据库

一般情况下QSQL数据库的收羃q不能很大程度上减小数据库大,其主要作用是收羃日志大小Q应当定期进行此操作以免数据库日志过大?

1?br />讄数据库模式ؓ单模式:打开SQL企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL
Serverl?->双击打开你的服务?->双击打开数据库目?->选择你的数据库名Uͼ如论坛数据库ForumQ?->?br />后点d键选择属?->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存;

2、在当前数据库上点右键,看所有Q务中的收~数据库Q一般里面的默认讄不用调整Q直接点定Q?

3、收~数据库完成后,您的数据库属性重新设|ؓ标准模式Q操作方法同W一点,因ؓ日志在一些异常情况下往往是恢复数据库的重要依据?

14.4、设定每日自动备份数据库

强烈有条件的用户q行此操作!

1、打开企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Serverl?->双击打开你的服务器;

2、然后点上面菜单中的工具-->选择数据库维护计划器Q?

3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息,q里一般不用做选择-->下一步检查数据完整性,也一般不选择Q?

4、下一步指定数据库l护计划Q默认的?周备份一ơ,点击更改选择每天备䆾后点定Q?

5?br />下一步指定备份的盘目录Q选择指定目录Q如您可以在D盘新Z个目录如Qd:\databakQ然后在q里选择使用此目录,如果您的数据库比较多最好?br />择ؓ每个数据库徏立子目录Q然后选择删除早于多少天前的备份,一般设?Q?天,q看您的具体备䆾要求Q备份文件扩展名一般都是bakq默认的;

6、下一步指定事务日志备份计划,看您的需要做选择-->下一步要生成的报表,一般不做选择-->下一步维护计划历史记录,最好用默认的选项-->下一步完成;

7、完成后pȝ很可能会提示Sql Server Agent服务未启动,先点定完成计划讑֮Q然后找到桌面最双状态栏中的SQLl色图标Q双ȝ开Q在服务中选择Sql Server AgentQ然后点击运行箭_选上下方的当启动OS时自动启动服务;

8、这个时候数据库计划已经成功的运行了Q他按照您上面的设|进行自动备份?

修改计划Q?

1、打开企业理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Serverl?->双击打开你的服务?->理-->数据库维护计?->打开后可看到你设定的计划Q可以进行修Ҏ者删除操?

14.5、数据的转移Q新建数据库或{UL务器Q?


般情况下Q最好用备份和q原操作来进行{UL据,在特D情况下Q可以用导入导出的方式进行{U,q里介绍的就是导入导出方式,导入导出方式转移数据一?br />作用是可以在收~数据库无效的情况下用来减小Q收~)数据库的大小Q本操作默认为您对SQL的操作有一定的了解Q如果对其中的部分操作不理解Q可以咨?br />动网相关人员或者查询网上资料?

1、将原数据库的所有表、存储过E导出成一个SQL文gQ导出的时候注意在选项中选择~写索引脚本和编写主键、外键、默认值和查约束脚本选项Q?

2、新建数据库Q对新徏数据库执行第一步中所建立的SQL文gQ?

3、用SQL的导入导出方式,Ҏ数据库导入原数据库中的所有表内容Q?

利用数据库日志恢复数据到旉点的操作

׃不正常的数据丢失Q而又不想使用备䆾数据q原Q只要原来有备䆾且当前日志保存完好,可以采用q个Ҏ试试Q说不定可挽回损失…?

1Q如果误操作之前存在一个全库备份(或已有多个差异备份或增量备䆾Q,首先要做的事是q行一ơ日志备份(如果Z不让日志文g变大而置trunc. log on chkpt.选项?那你死了Q;

backup log dbName to disk='fileName'

2Q恢复一个全库备份,注意需要用with norecoveryQ如果还有其他差异或增量备䆾Q则逐个恢复Q?

restore database dbName from disk='fileName' with norecovery

3Q恢复最后一个日志备份即刚做的日志备份,指定恢复旉点到误操作之前的时刻?

restore log dbName from disk='fileName'

with stopat='date_time'

以上q些操作都可以在SQL SERVER企业理器里完成Q难度不大。。?

当然Q如果误操作是一些不记日志的操作比如truncate tableQselect into{操作,那么是无法利用上q方法来恢复数据?..

15.SQL Server2000数据库文件损坏时如何恢复

出现q样的问题是比较严重的了Q能否修复只能看你的q气…?

SQL Server2000中,如果数据库文Ӟ非系l数据库文gQ遇到错误的时候,仅适用于非master,msdb的数据库?

说明如下Q?

1 Z个测试数据库test(数据库类型ؓ完全)Q?

2 Z个表Q插入点记录Q?

create table a(c1 varchar(2))

go

insert into a values('aa')

go

insert into a values('bb')

go

3 作完全备份,到文件test_1.bakQ?

4 再作一点修改:

insert into a values('cc')

go

create table b(c1 int)

go

insert into b values(1)

go

insert into b values(2)

go

5 shutdown 数据库服务器Q?

6 用ultraedit~辑数据库文件test_data.mdf,随便修改点字节内?相当于数据库遭到致命的损坏;

7 启动数据库,q且q行企业理器,点开数据库,看到test变成灰色Q而且昄|疑Q?

8 q行isql -SLocalhost -Usa -PQ?

1> backup log test TO DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKUP

est_2.bak' WITH NO_TRUNCATE

2>go

已处?2 ,q些属于数据库 'test' 的文?'TEST_Log'Q位于文?1 上)?

BACKUP LOG 操作成功地处理了 2 ,p?0.111 U(0.087 MB/U)?

9 q行恢复最老的完全备䆾Q?

1> RESTORE DATABASE test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQL

BACKUP est_1.bak' WITH NORECOVERY

2> go

已处?96 ,q些属于数据库 'test' 的文?'TEST_Data'Q位于文?1 上)?

已处?1 ,q些属于数据库 'test' 的文?'TEST_Log'Q位于文?1 上)?

RESTORE DATABASE 操作成功地处理了 97 ,p?0.107 U(7.368 MB/U)?

10 恢复最q的日志Q?

1> RESTORE LOG test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKU

P est_2.bak' WITH RECOVERY

2> go

已处?2 ,q些属于数据库 'test' 的文?'TEST_Log'Q位于文?1 上)?

RESTORE LOG 操作成功地处理了 2 ,p?0.056 U(0.173 MB/U)?/p>

16.存储q程~写l验和优化措?

一、适合读者对象:

数据库开发程序员Q数据库的数据量很多Q涉及到对SPQ存储过E)的优化的目开发h员,Ҏ据库有浓厚兴的人? 

二、介l:

?br />数据库的开发过E中Q经怼遇到复杂的业务逻辑和对数据库的操作Q这个时候就会用SP来封装数据库操作。如果项目的SP较多Q书写又没有一定的规范Q将?br />影响以后的系l维护困隑֒大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,׃遇到优化的问题,否则速度有可能很慢,l过?br />w经验,一个经q优化过的SP要比一个性能差的SP的效率甚至高几百倍? 

三、内容:  

1、开发h员如果用到其他库的Table或ViewQ务必在当前库中建立View来实现跨库操作,最好不要直接用“databse.dbo.table_name”,因ؓsp_depends不能昄SP所使用的跨库table或viewQ不方便校验。  

2、开发h员在提交SP前,必须已经使用set showplan on分析q查询计划,做过自n的查询优化检查? 

3、高E序q行效率Q优化应用程序,在SP~写q程中应该注意以下几点:   

a)SQL的用规范:

i. 量避免大事务操作,慎用holdlock子句Q提高系lƈ发能力?

ii. 量避免反复讉K同一张或几张表,其是数据量较大的表Q可以考虑先根据条件提取数据到临时表中Q然后再做连接?

iii. 量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该改写Q如果用了游标Q就要尽量避免在游标循环中再q行表连接的操作?

iv. 注意where字句写法Q必考虑语句序Q应该根据烦引顺序、范围大来定条g子句的前后顺序,可能的让字D顺序与索引序怸_范围从大到小?

v. 不要在where子句中的?”左边进行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?

vi. 量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用Q而且count(1)比count(*)更有效率?

vii. 量使用?gt;=”,不要使用?gt;”?

viii. 注意一些or子句和union子句之间的替?

ix. 注意表之间连接的数据cdQ避免不同类型数据之间的q接?

x. 注意存储q程中参数和数据cd的关pR?

xi. 注意insert、update操作的数据量Q防止与其他应用冲突。如果数据量过200个数据页面(400kQ,那么pȝ会q行锁升U,锁会升成表U锁?  

b)索引的用规范:

i. 索引的创与应用结合考虑Q徏议大的OLTP表不要超q?个烦引?

ii. 可能的使用索引字段作ؓ查询条gQ尤其是聚簇索引Q必要时可以通过index index_name来强制指定烦引?

iii. 避免对大表查询时q行table scanQ必要时考虑新徏索引?

iv. 在用烦引字D作为条件时Q如果该索引是联合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用?

v. 要注意烦引的l护Q周期性重建烦引,重新~译存储q程。  

c)tempdb的用规范:

i. 量避免使用distinct、order by、group by、having、join、cumputeQ因些语句会加重tempdb的负担?

ii. 避免频繁创徏和删除时表Q减系l表资源的消耗?

iii. 在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以用select into代替create tableQ避免logQ提高速度Q如果数据量不大Qؓ了缓和系l表的资源,先create tableQ然后insert?

iv. 如果临时表的数据量较大,需要徏立烦引,那么应该创Z时表和徏立烦引的q程攑֜单独一个子存储q程中,q样才能保证pȝ能够很好的用到该时表的烦引?

v. 如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,先truncate tableQ然后drop tableQ这样可以避免系l表的较长时间锁定?

vi. 慎用大的临时表与其他大表的连接查询和修改Q减低系l表负担Q因U操作会在一条语句中多次使用tempdb的系l表。  

d)合理的算法用:   

?br />据上面已提到的SQL优化技术和ASE
Tuning手册中的SQL优化内容,l合实际应用,采用多种法q行比较,以获得消耗资源最、效率最高的Ҏ。具体可用ASE调优命oQset
statistics io on, set statistics time on , set showplan on {?



maqsoft 2006-12-11 09:41 发表评论
]]>
在存储过E中创徏表,q且表名由参数动态指?/title><link>http://www.aygfsteel.com/tjmzq/archive/2006/12/11/86810.html</link><dc:creator>maqsoft</dc:creator><author>maqsoft</author><pubDate>Mon, 11 Dec 2006 01:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/tjmzq/archive/2006/12/11/86810.html</guid><wfw:comment>http://www.aygfsteel.com/tjmzq/comments/86810.html</wfw:comment><comments>http://www.aygfsteel.com/tjmzq/archive/2006/12/11/86810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/tjmzq/comments/commentRss/86810.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/tjmzq/services/trackbacks/86810.html</trackback:ping><description><![CDATA[ <span style="COLOR: #000000">动态SQL   <br />    <br />  </span> <span style="COLOR: #0000ff">CREATE</span> <span style="COLOR: #000000">   </span> <span style="COLOR: #0000ff">PROC</span> <span style="COLOR: #000000">   PR_CREATETABLE   <br />      @TABLENAME   </span> <span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR</span> <span style="COLOR: #000000">(</span> <span style="FONT-WEIGHT: bold; COLOR: #800000">30</span> <span style="COLOR: #000000">)   <br />  </span> <span style="COLOR: #0000ff">AS</span> <span style="COLOR: #000000">   <br />    <br />  </span> <span style="COLOR: #0000ff">DECLARE</span> <span style="COLOR: #000000">   @SQL   </span> <span style="FONT-WEIGHT: bold; COLOR: #000000">VARCHAR</span> <span style="COLOR: #000000">(</span> <span style="FONT-WEIGHT: bold; COLOR: #800000">1000</span> <span style="COLOR: #000000">)   <br />  </span> <span style="COLOR: #0000ff">SET</span> <span style="COLOR: #000000">     @SQL</span> <span style="COLOR: #808080">=</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">CREATE   TABLE   </span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #808080">+</span> <span style="COLOR: #000000">   @TABLENAME   </span> <span style="COLOR: #808080">+</span> <span style="COLOR: #000000">   </span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">   (ID   INT,NAME   VARCHAR(50))</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #000000">   <br />    <br />  </span> <span style="COLOR: #0000ff">EXEC</span> <span style="COLOR: #000000">   (@SQL)   <br />  </span> <span style="COLOR: #0000ff">GO</span> <span style="COLOR: #000000">   <br /></span> <br /> <br /> <br /> <pre> <div> <!--<br/><br/>Code highlighting produced by Actipro CodeHighlighter (freeware)<br/>http://www.CodeHighlighter.com/<br/><br/>--> <span style="COLOR: #0000ff">create</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">proc</span> <span style="COLOR: #000000"> p_createtable @tablename sysname <br /></span> <span style="COLOR: #0000ff">as</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">declare</span> <span style="COLOR: #000000"> @sql </span> <span style="FONT-WEIGHT: bold; COLOR: #000000">varchar</span> <span style="COLOR: #000000">(</span> <span style="FONT-WEIGHT: bold; COLOR: #800000">8000</span> <span style="COLOR: #000000">) <br /></span> <span style="COLOR: #0000ff">set</span> <span style="COLOR: #000000"> @sql</span> <span style="COLOR: #808080">=</span> <span style="COLOR: #ff0000">''</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">set</span> <span style="COLOR: #000000"> @sql</span> <span style="COLOR: #808080">=</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">create table </span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #808080">+</span> <span style="COLOR: #000000">@tablename</span> <span style="COLOR: #808080">+</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">(id int primary key,name varchar(10))</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">exec</span> <span style="COLOR: #000000">(@sql) <br /></span> <span style="COLOR: #0000ff">go</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">exec</span> <span style="COLOR: #000000"> p_createtable </span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">tab999</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">go</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">insert</span> <span style="COLOR: #000000"> tab999 </span> <span style="COLOR: #0000ff">values</span> <span style="COLOR: #000000">(</span> <span style="FONT-WEIGHT: bold; COLOR: #800000">1</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">001</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #000000">) <br /></span> <span style="COLOR: #0000ff">insert</span> <span style="COLOR: #000000"> tab999 </span> <span style="COLOR: #0000ff">values</span> <span style="COLOR: #000000">(</span> <span style="FONT-WEIGHT: bold; COLOR: #800000">2</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">002</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #000000">) <br /></span> <span style="COLOR: #0000ff">insert</span> <span style="COLOR: #000000"> tab999 </span> <span style="COLOR: #0000ff">values</span> <span style="COLOR: #000000">(</span> <span style="FONT-WEIGHT: bold; COLOR: #800000">3</span> <span style="COLOR: #000000">,</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #ff0000">003</span> <span style="COLOR: #ff0000">'</span> <span style="COLOR: #000000">) <br /></span> <span style="COLOR: #0000ff">select</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #808080">*</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">from</span> <span style="COLOR: #000000"> tab999 <br /></span> <span style="COLOR: #0000ff">go</span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #0000ff">drop</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">table</span> <span style="COLOR: #000000"> tab999 <br /></span> <span style="COLOR: #0000ff">drop</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">proc</span> <span style="COLOR: #000000"> p_createtable <br /><br /></span> <span style="COLOR: #008080">--</span> <span style="COLOR: #008080">------------------------------------- </span> <span style="COLOR: #008080"> <br /> </span> <span style="COLOR: #000000"> <br /> <br /> Q所影响的行Cؓ </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">1</span> <span style="COLOR: #000000"> 行) <br /><br /><br /> Q所影响的行Cؓ </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">1</span> <span style="COLOR: #000000"> 行) <br /><br /><br /> Q所影响的行Cؓ </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">1</span> <span style="COLOR: #000000"> 行) <br /><br /> id name <br /></span> <span style="COLOR: #008080">--</span> <span style="COLOR: #008080">--------- ---------- </span> <span style="COLOR: #008080"> <br /> </span> <span style="COLOR: #000000"> </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">1</span> <span style="COLOR: #000000"> </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">001</span> <span style="COLOR: #000000"> <br /> </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">2</span> <span style="COLOR: #000000"> </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">002</span> <span style="COLOR: #000000"> <br /> </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">3</span> <span style="COLOR: #000000"> </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">003</span> <span style="COLOR: #000000"> <br /> <br /> Q所影响的行Cؓ </span> <span style="FONT-WEIGHT: bold; COLOR: #800000">3</span> <span style="COLOR: #000000"> 行) <br /></span> </div> </pre> <img src ="http://www.aygfsteel.com/tjmzq/aggbug/86810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/tjmzq/" target="_blank">maqsoft</a> 2006-12-11 09:38 <a href="http://www.aygfsteel.com/tjmzq/archive/2006/12/11/86810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">¹</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">³</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Т</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">γ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">½</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̶</a>| <a href="http://" target="_blank">ֻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>