数据库日常维护脚本
MySQL运维之--日常维护操作
MySQL运维之--⽇常维护操作转载请注明出处:⼀、Linux内核和发⾏版本号uname -acat /etc/issue⼆、glibc的版本号/lib/libc.so.6 ---没有man函数据的动态链接库三、MySQL的版本号MySQL⼆进制分发版的⽂件名称格式为:mysql-VERSION-OS.tar.gz⽐如:Linux-Generic(glibc 2.5) (x86,64bit),Compressed TAR Archive(mysql-5.6.16-linux-glibc2.5-x86_64.tar.gz) 1、下载/downloads/mysql/2、查rpm包装在什么⽂件夹下rpm -qpl MySQL-server-5.6.23-1.el6.i686.rpm |morerpm -qpl MySQL-client-5.6.23-1.el6.x86_64.rpm |more3、更改rpm安装路径rpm --helprpm --prefix --relocaterpmbuild spec binary rpmyum install四、rpm安装rpm -ivh xxx.rmprpm -pql xxx.rmpMySQL 实例安装和启动1. 安装mysql_install_db --defaults-file=/root/data/mysql3306/f --basedir=/usr/ --datadir=/root/data/mysql3306/data 2. 启动mysqld_safe --defaults-file=/root/data/mysql3306/f &3. 登录mysql -h127.0.0.1 -uroot -P3306 -p五、安装演⽰:1.关闭mysqlps -ef |grep mysqldkill 3397 38012.安装cat init3306sh init3306.sh3.启动cat start3306.shsh start3306.sh注意:mysql_install_db(通过安装rpm包产⽣mysql_install_db)。
DB2数据库管理最佳实践笔记-10日常运维
10.1 日常运维工具概述Runstats是run statistics的缩写,意思是收集统计信息,目的是为DB2优化器提供最佳路径选择;Reorg是重组的意思,目的是减少表和索引在物理存储上的碎片,提供性能;Reorgchk是重组前的检查Rebind是对一些包、存储过程或静态程序进行重新绑定。
几个工具的执行流程:首先通过Runstats收集表和索引的统计信息,然后执行Reorg重组,如果有必要则执行,然后再次收集统计信息。
最后,对于静态语句、存储过程等,执行Rebind绑定.10.2 Runstats在系统运行一个查询的时候,优化器需要决定用某种方式来访问数据。
只有当DB2对表中的数据有一个大概的了解,才能知道每一步操作大约需要处理多少数据,返回多少行。
当优化器了解了这些信息后,就会根据一系列的运算,判定出各种访问途径所需要消耗的资源,然后从中选择一个消耗资源最少的方法.最普通的Runstats就是统计表和索引中有多少行数据,有多少不同的数值.Runstats命令使用DISTRIBUTION参数手机数据分布.数据分布分为两种,一种叫做频率采样(Frequency),一种叫做百分比采样(Quantile)。
当收集数据分布时,两种采样方式都会被收集.其中频率采样是手机表中拥有相同数量最多的几行,比如10000行数据中9000行为10,然后500行为9,然后100行为8,剩下的部分平均分布.如果我们制定Frequency为3的话,那么系统就会记录下来有9000行10,500行9,然后100行8,剩下的部分在估算时则假定平均分布。
而百分比采样则是将整个10000行数据分成相等大小的若干段,然后记录每一段的段首和段尾的数值,当需要查询一个数据段时(比如C1〉10 AND C1<15),就可以根据每一个数据段的启始数值加上段落的大小,估算出符合查询条件的记录数量。
理论上,数据分布收集的越细致越好.但是经过细致的数据分布信息可能会导致DB2在优化SQL时需要处理更多的信息,并占用更多的系统存储空间,可能会导致性能的下降。
数据库服务器日常维护工作
数据库服务器日常维护工作数据库服务器日常维护工作1.硬件维护1.1.服务器状态检查- 每天检查服务器的电源状态、风扇运转情况以及硬盘活动指示灯等硬件运行情况。
- 确保服务器运行稳定,没有异常故障。
1.2.温度和湿度监测- 定期检查服务器所在机房的温度和湿度,确保环境符合要求。
- 如果环境异常,及时采取措施进行调节。
1.3.硬盘维护- 每周定期进行磁盘清理,清除不必要的文件和日志,释放存储空间。
- 定期进行磁盘碎片整理,提升磁盘读写效率。
- 使用监控工具检测硬盘健康状态,如有异常,及时更换。
1.4.内存和 CPU 维护- 监控服务器的内存占用率和 CPU 使用率,及时调整配置或优化程序。
- 定期检查内存插槽、内存条等硬件连接是否正常,确保正常运行。
2.软件维护2.1.操作系统更新- 定期安装最新的操作系统更新补丁,修复安全漏洞和功能问题。
- 确保操作系统与数据库软件兼容,并及时进行版本升级。
2.2.数据库软件维护- 定期备份数据库,确保数据安全。
- 监控数据库性能,如查询慢、连接断开等问题,及时进行优化和修复。
- 对数据库进行定期的优化和索引重建,提升查询效率。
- 定期清理无用的数据库对象,减少数据库的存储空间占用。
2.3.监控和警报设置- 配置监控工具,监测数据库服务器的运行状态。
- 设置合适的警报规则,及时报警并采取相应措施处理异常情况。
3.安全管理3.1.访问控制- 确保只有授权人员可以访问数据库服务器,并对数据库进行相应操作。
- 设置账号密码复杂度要求,定期更换密码,增加数据库安全性。
3.2.安全审计- 开启数据库的安全审计功能,记录所有访问和操作的日志。
- 定期检查和分析审计日志,发现潜在的安全隐患。
3.3.数据加密- 配置数据库服务器的数据加密功能,保护敏感数据的安全性。
- 使用合适的加密算法和密钥管理策略,确保数据的机密性。
附件:1.服务器设备清单2.数据库软件版本信息3.监控工具配置文件法律名词及注释:1.数据保护条例:指个人数据保护方面的法律法规,如欧盟的《通用数据保护条例(GDPR)》。
数据库日常维护-CheckList_02有关数据库备份检查
数据库⽇常维护-CheckList_02有关数据库备份检查数据库备份是DB⽇常运维中最基本的也是最重要的⼯作,很多情况下都是做成作业形式实现⾃动化周期性的做全备、差异以及⽇志备份。
那么,如果作业出现问题没有完成⼯作,我们可以设置⾃动报警如email被动提醒我们,当然也可以使⽤下⾯脚本主动地对多个数据库服务上数据库备份情况做详细了解,详细代码分享如下:-----------------------------------------------------------------------------------前⼀周所有数据库备份情况---------------------------------------------------------------------------------SELECTCONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,msdb.dbo.backupset.database_name,msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date,msdb.dbo.backupset.expiration_date,CASE msdb..backupset.typeWHEN 'D' THEN 'Database'WHEN 'L' THEN 'Log'END AS backup_type,msdb.dbo.backupset.backup_size,msdb.dbo.backupmediafamily.logical_device_name,msdb.dbo.backupmediafamily.physical_device_name, AS backupset_name,msdb.dbo.backupset.descriptionFROM msdb.dbo.backupmediafamilyINNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_idWHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7)ORDER BYmsdb.dbo.backupset.database_name,msdb.dbo.backupset.backup_finish_date---------------------------------------------------------------------------------------------近期每个数据库的备份情况-------------------------------------------------------------------------------------------SELECTCONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,msdb.dbo.backupset.database_name,MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_dateFROM msdb.dbo.backupmediafamilyINNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_idWHERE msdb..backupset.type = 'D'GROUP BYmsdb.dbo.backupset.database_nameORDER BYmsdb.dbo.backupset.database_name---------------------------------------------------------------------------------------------近期每个数据库备份-详细情况-------------------------------------------------------------------------------------------SELECTA.[Server],st_db_backup_date,B.backup_start_date,B.expiration_date,B.backup_size,B.logical_device_name,B.physical_device_name,B.backupset_name,B.descriptionFROM(SELECTCONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,msdb.dbo.backupset.database_name,MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_dateFROM msdb.dbo.backupmediafamilyINNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id WHERE msdb..backupset.type = 'D'GROUP BYmsdb.dbo.backupset.database_name) AS ALEFT JOIN (SELECTCONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,msdb.dbo.backupset.database_name,msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date,msdb.dbo.backupset.expiration_date,msdb.dbo.backupset.backup_size,msdb.dbo.backupmediafamily.logical_device_name,msdb.dbo.backupmediafamily.physical_device_name, AS backupset_name,msdb.dbo.backupset.descriptionFROM msdb.dbo.backupmediafamilyINNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id WHERE msdb..backupset.type = 'D') AS BON A.[server] = B.[server] AND A.[database_name] = B.[database_name] AND A.[last_db_backup_date] = B.[backup_finish_date] ORDER BYA.database_name---------------------------------------------------------------------------------------------丢失备份---------------------------------------------------------------------------------------------超过24⼩时的数据库备份SELECTCONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,msdb.dbo.backupset.database_name,MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date,DATEDIFF(hh, MAX(msdb.dbo.backupset.backup_finish_date), GETDATE()) AS [Backup Age (Hours)]FROM msdb.dbo.backupsetWHERE msdb.dbo.backupset.type = 'D'GROUP BY msdb.dbo.backupset.database_nameHAVING (MAX(msdb.dbo.backupset.backup_finish_date) < DATEADD(hh, - 24, GETDATE()))UNION--没有任何备份历史SELECTCONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, AS database_name,NULL AS [Last Data Backup Date],9999 AS [Backup Age (Hours)]FROMmaster.dbo.sysdatabases LEFT JOIN msdb.dbo.backupsetON = msdb.dbo.backupset.database_nameWHERE msdb.dbo.backupset.database_name IS NULL AND <> 'tempdb'ORDER BYmsdb.dbo.backupset.database_name---------------------------------------------------------------------------------------------检查所有备份⽂件⼤⼩ (GB)-------------------------------------------------------------------------------------------SELECT getdate() as,b.server_name, Round(SUM(convert(float,b.backup_size) /1024.0/1024.0/1024.0),2) AS 'backup_size_GB',Round(SUM(convert(float,pressed_backup_size)/1024.0/1024.0/1024.0),2) AS 'compressed_backup_size_GB' FROM msdb..backupset bwhere b.database_name not in ('model','master','msdb','')--and b.type='D'AND backup_start_date>getdate()-1GROUP BY b.server_name-------------------------------------------------------------------------------------------Samezhao。
数据库服务器日常维护工作
数据库服务器日常维护工作
1、服务器维护:
(1)定期观察服务器情况,发现异常及时通知信息管理处,信息管理处指派维护人员,维护人员到位后,帮忙输入密码进入系统,同时进行维护时须在场监督。
(2)病毒防范,发现病毒及时通告信息管理处并进行杀毒。
(3)管理好服务器管理员各种账号和密码,防范别人拷贝和浏览有关HR系统数据库中相关保密内容。
(4)管理服务器共享内容,不要随意共享服务器内容。
(5)机房需要进行停电时、网络调整等,配合信息管理处,如:关机、重启服务器等工作。
2、数据库维护:
(1)备份数据库:系统将设置自动备份数据(数据库和数据库日志),只需定期(每周一次)拷贝备份数据到其他存储设备(如:刻录CD,个人计算机、磁带等);
观察硬盘容量,如发现硬盘空间不够时,清理掉已经备份出来的备份数据。
(2)数据库出现异常时,如数据库坏了,需要恢复数据库,信息管理处指派技术人员,技术人员到位后,帮忙输入密码进入数据库,同时进行数据库恢复必须在
场监督,禁止防范技术人员拷贝和浏览不要求内容。
(3)数据库出现其它异常问题时,技术人员到位后,帮忙输入密码进入系统,同时技术人员进行数据库修复时必须在场监督。
3、定期更改服务器的用户密码和远程控制软件的密码。
服务器放置
服务器放置在机房(机房具有UPS、网络保证等);服务器管理员可以通过远程控制软件进行管理。
DB2动态生成维护脚本
if (NF == 15 && $NF ~ /\*/) printf "index "$1"."$2" "
}' | \
awk '{
if ($2 == "table")
print "db2 reorg table "$1"\ndb2 runstats on table "$1" with distribution and detailed indexes all allow write access";
昨天写的脚本,可以根据reorgchk的结果,动态生成相关的reorg table语句。
三点说明:
1,此脚本中、英文DB2都适用。
2,如果是WINDOWS平台,可以先将reorgchk的结果传到UNIX上,存名为/tmp/reorgchk.txt,然后跳过第一个命令继续。
3,最后的db2rbind语句可根据实际的数据库名,自己修改。
db2 reorgchk update statistics on table all > /tmp/reorgchk.txt
sed 's/表:/Table: /' /tmp/reorgchk.txt | \
awk '{
if (NF == 2 && $1 ~ /^Table/) printf "\n\n"$2" ";
数据库维护要点
数据库维护要点一、系统维护1、启动数据库在install/ 目录下startserver -f RUN_SYBASEstartserver -f RUN_SYB_BACKUP2、关闭数据库isql -UsaPassword:1> shutdown SYB_BACKUP 关闭BACKUP SERVER2> go1>shutdown 关闭SQL SERVER2>go3、监视系统LOG在install/ 目录下,errorlog文件记录SQL Server的所有重大错误,应经常查看,必要时备份到其他地方,并将其删除,否则将不断增长。
另backup.log记录BACKUP Server 的所有错误,同样应维护,有错误及时处理。
4、备份系统数据每次增加系统设备,数据库变化等都应做系统备份。
(1)备份master库。
isql -Usa -SSYBASE键入password,进入数据库。
提示出现1>1> dump database master to “/dev/rmt/0n”若磁带机设备名不清楚,请问系统管理员2> capacity=(略小于磁带容量,单位为Kbytes。
例如磁带容量为2G,则输入2*80%*1024*1024=1677721)3> with init4> go记录备份数据的文件名。
(2)备份sybsystemprocs库1> dump database sybsystemprocs to “/dev/rmt/0n”2> capacity=(同上)3> with init4> go5、恢复系统数据(sa)必须在单用户状态(1) 恢复master系统库:1>load database master from “/dev/rmt/0n”2>with file=”xxxx”3>go(2) 恢复sybsystemprocs系统库:1>load database sybsystemprocs from “/dev/rmt/0n”2>with file=”xxxx”3>go请随时参考SYBASE SQL Server System Administration Guide手册。
mysql数据库日常维护手册
mysql数据库日常维护手册MySQL 数据库的日常维护是确保数据库系统稳定、高效运行的重要任务。
以下是一份MySQL 数据库的日常维护手册,包括一些建议、命令和最佳实践:1. 备份数据库:# 手动备份:```bashmysqldump -u 用户名-p 密码数据库名> 备份文件.sql```# 自动备份:通过cron 或其他调度工具设置定期自动备份任务。
2. 优化数据库表:# 优化表:```sqlOPTIMIZE TABLE 表名;```# 修复表:```sqlREPAIR TABLE 表名;```3. 监控数据库性能:使用工具如MySQL Enterprise Monitor 或Percona Monitoring and Management (PMM) 监控数据库性能。
4. 清理日志:定期清理MySQL 日志文件,如错误日志和慢查询日志。
5. 更新统计信息:```sqlANALYZE TABLE 表名;```6. 管理用户权限:定期审查和更新用户权限,确保合理的安全性。
7. 定期优化查询:通过检查慢查询日志找到性能瓶颈,并优化相关查询。
8. 更新数据库软件:保持MySQL 数据库软件和相关组件最新版本,以获取性能和安全性的改进。
9. 监控存储空间:确保数据库服务器有足够的磁盘空间,并监控存储使用情况。
10. 使用连接池:配置和使用连接池以减轻数据库服务器的负担。
11. 定期重启数据库:定期重启数据库服务以释放资源并确保系统稳定性。
12. 实施故障恢复计划:确保有可行的故障恢复计划,包括备份和恢复策略。
13. 日志记录和审计:启用MySQL 的日志记录和审计功能,以便跟踪数据库活动和发现潜在的安全问题。
14. 定期性能调整:根据数据库使用情况和负载模式进行性能调整,例如调整缓冲池大小、连接数等参数。
15. 定期进行数据库健康检查:使用工具如MySQLTuner 或sys schema 进行数据库健康检查,并根据建议进行优化。
sqlserver 维护计划例子
sqlserver 维护计划例子SQL Server维护计划是一个用于自动执行一系列维护任务的工具,这些任务包括数据库备份、索引重建、数据库完整性检查等。
以下是一个简单的SQL Server维护计划的例子:1. 备份数据库:任务名称:数据库备份描述:每天凌晨备份数据库操作:使用`BACKUP DATABASE`命令备份数据库频率:每天时间:凌晨1点2. 重建索引:任务名称:索引重建描述:每周重建数据库中的索引操作:使用`ALTER INDEX`命令重建索引频率:每周时间:每周三下午3点3. 检查数据库完整性:任务名称:数据库完整性检查描述:每月检查数据库的完整性操作:运行完整性检查的T-SQL脚本频率:每月时间:每月的第一天上午10点以上是一个简单的维护计划例子,你可以根据自己的需求添加或删除任务。
创建和维护计划的步骤如下:1. 打开SQL Server Management Studio (SSMS)。
2. 在对象资源管理器中,连接到你的SQL Server实例。
3. 在对象资源管理器中,右键点击“维护计划”,选择“新建维护计划”。
4. 在“新建维护计划”窗口中,输入计划名称和描述。
5. 在“步骤”页,点击“新建”按钮,添加一个新的维护任务。
6. 在“新建维护步骤”窗口中,输入任务名称和描述,选择操作类型,并输入或浏览操作内容。
7. 根据需要配置频率和时间。
8. 可以继续添加其他维护任务。
完成后,点击“确定”保存维护计划。
9. 如果你想将此计划与作业关联以自动执行,可以在“新建维护计划”窗口中,选择“新建作业”或“使用现有作业”。
10. 最后,点击“确定”保存并关闭窗口。
请注意,这只是一个简单的例子,实际的维护计划可能会更复杂,并包括更多的任务和设置。
在创建和维护计划时,请确保你有足够的权限,并仔细测试计划以确保其按预期工作。
数据库日常运行维护方案
Oracle数据库日常运行维护方案2019年3月1项目背景及目标1.1 项目背景XXX信息化建设经过多年的发展和完善,已经建立成熟的网络环境及业务及管理的各类应用系统,目前在线运行的PC 近XX台,近年来建设的XX业务管理等若干应用信息系统多数是基于Oracle数据库系统的应用。
这些Oracle 数据库产品的标准服务都已经过了服务期。
而各系统随着数据量的逐年增加,陆续出现了性能问题,有必要进行数据库系统的升级及性能优化,以确保应用系统的正常运行,为XXX提供更好的信息服务。
1.2 项目目标➢尽早发现性能瓶颈,及时调整,保障数据库稳定高效工作;对各个系统数据库进行补丁升级服务,安装补丁前需要对补丁的可行性及风险即你想那个分析,并制定升级计划和应急回退计划。
同时要做好系统备份准备及详细的测试工作,确保系统的稳定性、安全性,保障系统业务数据的安全;➢数据库架构的合理化;➢提升应用系统性能,完成各系统数据库的性能调优工作,包括:外部资源调优、行的重新安排调优、SQL 性能调优、表格和索引存储参数设置调优等。
➢各业务持续性得到有效的保证。
2需求分析通过对xxx 技术要求进行详实的分析以及xxx信息系统建设的了解,各应用系统的Oracle产品日常运行维护项目主要从如下几个方面进行:1、由于 xxx 有些系统软件建设的较早,目前存在不同版本的数据库共存的现象,包括:Oralce8、Oracle9I、Oracle10g以及Oracle11g等。
而 Oracle9I 版本之前的数据库 SQL 编程语句还不是业界通用的标准化的语句,它与后面版本的 SQL 编程语句有很大的差别,所以在这方面的性能优化需要做好充分备份的准备。
2、正是由于这些系统建设的较早,基于当时的实际情况,应用系统或数据库都还存在一些不足,针对这些情况软件开发商都开发出相应的补丁提供给用户进行升级以防范风险。
所以在对各个系统数据库进行补丁升级服务之前,需要对补丁的可行性、安全性及风险进行充分的测试和分析。
SQLSERVER_数据库日常维护脚本_精华
/****** Object: StoredProcedure [MYSCRIPT].[SPREUSEDPLANS] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [MYSCRIPT].[SPREUSEDPLANS]--=============================================================--功能:查询某个数据库内各对象使用内存缓存区资源的统计--作者:--时间:--使用:--=============================================================ASDECLARE @SINGLE INT,@REUSED INT,@TOTAL INTSELECT @SINGLE=SUM(CASE(USECOUNTS) WHEN 1 THEN 1 ELSE 0 END),@REUSED=SUM(CASE(USECOUNTS) WHEN 1 THEN 0 ELSE 1 END),@TOTAL=COUNT(USECOUNTS) FROM SYS.DM_EXEC_CACHED_PLANSSELECT '只使用过一次的执行计划的数量(usecounts=1)'=@SINGLE,'重复使用的执行计划的数量(usecounts>1)'=@REUSED,'重复使用执行计划所占比例%'=cast(100.0*@REUSED/@TOTAL as dec(5,2)),'执行计划总数量'=@TOTAL,'只使用过一次的执行计划所耗字节数'=(SELECT SUM(CAST(SIZE_IN_BYTES AS BIGINT)) FROM SYS.DM_EXEC_CACHED_PLANS WHERE USECOUNTS=1 )GO/****** Object: StoredProcedure [MYSCRIPT].[SPLISTRECOMPILE] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [MYSCRIPT].[SPLISTRECOMPILE]--=============================================================--功能:呈现累计最常重新编译的25个执行计划--作者:--时间:--使用:--=============================================================ASSELECT TOP 25 PLAN_GENERATION_NUM,SUBSTRING(QT.TEXT,QS.STATEMENT_START_OFFSET/2+1,(CASE WHEN QS.STATEMENT_END_OFFSET=-1 THEN DATALENGTH(QT.TEXT) ELSE QS.STATEMENT_END_OFFSET END -QS.STATEMENT_START_OFFSET)/2+1) ASSTMT_EXECUTING,qt.text,EXECUTION_COUNT,SQL_HANDLE,DBID,DB_NAME(DBID) DBNAME,QT.OBJECTID,OBJECT_NAME(QT.OBJECTID,QT.DBID) OBJECTNAMEFROM SYS.DM_EXEC_QUERY_STATS QS CROSS APPLY SYS.DM_EXEC_SQL_TEXT(QS.SQL_HANDLE) AS QTWHERE PLAN_GENERATION_NUM>1ORDER BY PLAN_GENERATION_NUMGO/****** Object: StoredProcedure [MYSCRIPT].[SPHIGHESTIO] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [MYSCRIPT].[SPHIGHESTIO]--=============================================================--功能:最耗I/O资源的SQL语句--作者:--时间:--使用:--=============================================================ASselect top 50 (total_logical_reads/execution_count) as [平均逻辑读取次数],(total_logical_writes/execution_count) as [平均逻辑写入次数],(total_physical_reads/execution_count) as [平均实体读取次数],Execution_count [执行次数],substring(qt.text,r.statement_start_offset/2+1,(case when r.statement_end_offset=-1 then datalength(qt.text) else r.statement_end_offset end - r.statement_start_offset)/2+1) as [执行语句] from sys.dm_exec_query_stats as r cross APPLY sys.dm_exec_sql_text(sql_handle) AS qtorder by (total_logical_reads + total_logical_writes) DescGO/****** Object: StoredProcedure [MYSCRIPT].[SPHIGHESTCPUTIME] Script Date: 01/07/201108:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate PROC [MYSCRIPT].[SPHIGHESTCPUTIME]--=============================================================--功能:呈现累计最耗CPU时间的前50个计划--作者:--时间:--使用:清空执行计划高速缓存 dbcc freeproccache--=============================================================ASSELECT TOP 50 TOTAL_WORKER_TIME/1000 AS [总耗CPU时间(ms)],EXECUTION_COUNT [执行次数],QS.TOTAL_WORKER_TIME/QS.EXECUTION_COUNT/1000 AS [平均耗CPU时间(ms)],SUBSTRING(QT.TEXT,QS.STATEMENT_START_OFFSET/2+1,(CASE WHEN QS.STATEMENT_END_OFFSET=-1 THEN DATALENGTH(QT.TEXT) ELSE QS.STATEMENT_END_OFFSET END -QS.STATEMENT_START_OFFSET)/2+1) AS [使用CPU 的语句],qt.text [完整语句], QT.OBJECTID,OBJECT_NAME(QT.OBJECTID,QT.DBID) OBJECTNAMEFROM SYS.DM_EXEC_QUERY_STATS QS CROSS APPLY SYS.DM_EXEC_SQL_TEXT(QS.SQL_HANDLE) AS QTORDER BY TOTAL_WORKER_TIME DESCGO/****** Object: StoredProcedure [MYSCRIPT].[SPBUFFERUSED] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [MYSCRIPT].[SPBUFFERUSED] @DB SYSNAME--=============================================================--功能:查询某个数据库内各个对象使用内存缓存区资源的统计--作者:--时间:--使用:清空内存高速缓存区中既有的数据dbcc dropcleanbuffers 再使用--=============================================================ASDECLARE @SQL VARCHAR(8000)SET @SQL='SELECT P.OBJECT_ID,OBJECT_SCHEMA_NAME(OBJECT_ID,DATABASE_ID) AS SCHEMANAME,OBJECT_NAME(P.OBJECT_ID,B.DATABASE_ID) AS OBJNAME,P.INDEX_ID,BUFFER_COUNT=COUNT(*) FROM '+@DB+'.SYS.ALLOCATION_UNITS A,'+@DB+'.SYS.DM_OS_BUFFER_DESCRIPTORSB,'+@DB+'.SYS.PARTITIONS PWHERE A.ALLOCATION_UNIT_ID=B.ALLOCATION_UNIT_ID AND A.CONTAINER_ID=P.HOBT_ID ANDB.DATABASE_ID=DB_ID('''+@DB+''')GROUP BY B.DATABASE_ID,P.OBJECT_ID,P.INDEX_IDORDER BY BUFFER_COUNT DESC'EXEC(@SQL)GO/****** Object: StoredProcedure [dbo].[sp_write_text] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE proc [dbo].[sp_write_text]@filename varchar(1000),@text varchar(8000)--==================================================--作者:chenwl--时间:2010-09-08--功能:将文本写入文件中--备注:@filename:要操作的文本文件名加路径如c:\abc.txt-- @text:要写入的内容--修改:--==================================================asdeclare @err int,@src varchar(255),@desc varchar(255)declare @obj intexec @err=sp_oacreate 'Scripting.FileSystemObject',@obj outif @err<>0 goto lberrexec @err=sp_oamethod @obj,'OpenTextFile',@obj out,@filename,8,1if @err<>0 goto lberrexec @err=sp_oamethod @obj,'WriteLine',null,@textif @err<>0 goto lberrexec @err=sp_oadestroy @objreturnlberr:exec sp_oageterrorinfo 0,@src out,@desc outselect cast(@err as varbinary(4)) as 错误号,@src as 错误源,@desc as 错误描述--可能会报没权限--执行以下代码--sp_configure 'show advanced options', 1;--GO--RECONFIGURE;--GO--sp_configure 'Ole Automation Procedures', 1;--GO--RECONFIGURE;--GOGO/****** Object: StoredProcedure [dbo].[sp_who2_lock] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate procedure [dbo].[sp_who2_lock]--==================================================--作者:chenwl--时间:2010-09-08--功能:数据库阻塞检测--备注:--修改:--==================================================beginwith Lock(dbName,spid,blocked,sql_handle)as(selectdb_name(dbid),0,blocked,sql_handlefrommaster..sysprocesses awhereBlocked>0 andnot exists(select 1 from Master..Sysprocesses where blocked=a.spid) unionselectdb_name(dbid),spid,blocked,sql_handlefrommaster..sysprocesses awhereBlocked>0)select * from Lock a cross apply sys.dm_exec_sql_text(a.sql_handle)bendGO/****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE procedure [dbo].[sp_who_lock]--==================================================--作者:chenwl--时间:2010-09-08--功能:数据库死锁,阻塞检测--备注:可以使用DBCC INPUTBUFFER(@bl)查看进程的SQL语句,@bl为进程号--修改:--==================================================begindeclare @spid int,@bl int,@intTransactionCountOnEntry int,@intRowcount int,@intCountProperties int,@intCounter int,@sql_handletext nvarchar(max)create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint,sql_handletemp binary(20))IF @@ERROR<>0 RETURN @@ERRORinsert into #tmp_lock_who(spid,bl,sql_handletemp) select 0 ,blocked, sql_handlefrom (select * from master..sysprocesses where blocked>0 ) awhere not exists(select * from(select * from master..sysprocesses where blocked>0 ) bwhere a.blocked=spid)union select spid,blocked,sql_handle from master..sysprocesses where blocked>0 IF @@ERROR<>0 RETURN @@ERROR-- 找到临时表的记录数select @intCountProperties = Count(*),@intCounter = 1from #tmp_lock_whoIF @@ERROR<>0 RETURN @@ERRORif @intCountProperties=0select '现在没有阻塞和死锁信息' as message-- 循环开始while @intCounter <= @intCountPropertiesbegin-- 依次取一条记录select @spid = spid,@bl = bl,@sql_handletext=s2.text from #tmp_lock_who as s1CROSS APPLY sys.dm_exec_sql_text(s1.sql_handletemp) AS s2where Id = @intCounterif @spid =0beginselect @sql_handletext=t2.text from master..sysprocesses as t1CROSS APPLY sys.dm_exec_sql_text(t1.sql_handle) AS t2where spid in(select bl from #tmp_lock_who where spid=0)and t1.spid=@blselect '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10))+ '进程号,其执行的SQL语法如下:'+@sql_handletext--DBCC INPUTBUFFER(@bl)endelsebeginselect '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被进程号SPID:'+ CAST(@bl AS VARCHAR(10))+ '阻塞,其当前进程执行的SQL语法如下:'+@sql_handletext--DBCC INPUTBUFFER(@bl)endselect @intCounter+=1endendGO/****** Object: StoredProcedure [MYSCRIPT].[SP_TEMPDB_USAGE_STATISTICS] Script Date:01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [MYSCRIPT].[SP_TEMPDB_USAGE_STATISTICS]--=============================================================--功能:累计各连接对TempDB的使用量--作者:--时间:--使用:--=============================================================ASSELECTT1.session_id,(T1.internal_objects_alloc_page_count+er_objects_alloc_page_count+TASK_ALLOC) AS [保留或分配的总数据页数],(T1.internal_objects_dealloc_page_count+er_objects_dealloc_page_count+TASK_DEALLOC) as [取消分配的总资料页数]FROM sys.dm_db_session_space_usage AS T1,(SELECT session_id,SUM(internal_objects_alloc_page_count+user_objects_alloc_page_count) AS TASK_ALLOC,SUM(internal_objects_dealloc_page_count+user_objects_dealloc_page_count) AS TASK_DEALLOC FROM sys.dm_db_task_space_usage GROUP BY session_id) AS T2WHERE T1.session_id=T2.session_id AND T2.session_id>50ORDER BY [保留或分配的总数据页数] descGO/****** Object: StoredProcedure [dbo].[SP_TableHasIdentity] Script Date: 01/07/201108:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [dbo].[SP_TableHasIdentity]--==================================================--作者:chenwl--时间:2010-09-08--功能:查询是否存在自增列的Table--备注:--修改:--==================================================ASBEGINSelect * from sysobjects Where objectproperty(id, 'TableHasIdentity') = 1ENDGO/****** Object: StoredProcedure [dbo].[SP_Rebuild_IndexDatabase] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [dbo].[SP_Rebuild_IndexDatabase](@DatabaseName varchar(256))--==================================================--作者:chenwl--时间:2010-09-08--功能:重新生成索引--备注:--修改:--==================================================ASSET NOCOUNT ON;DECLARE @objectid int;DECLARE @indexid int;DECLARE @partitioncount bigint;DECLARE @schemaname sysname;DECLARE @objectname sysname;DECLARE @indexname sysname;DECLARE @partitionnum bigint;DECLARE @partitions bigint;DECLARE @frag float;DECLARE @command varchar(8000);-- ensure the temporary table does not existIF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do')DROP TABLE work_to_do;-- conditionally select from the function, converting object and index IDs to names.SELECTobject_id AS objectid,index_id AS indexid,partition_number AS partitionnum,avg_fragmentation_in_percent AS fragINTO work_to_doFROM sys.dm_db_index_physical_stats (DB_ID(@DatabaseName), NULL, NULL , NULL,'LIMITED')WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;-- Declare the cursor for the list of partitions to be processed.DECLARE partitions CURSOR FOR SELECT * FROM work_to_do;-- Open the cursor.OPEN partitions;-- Loop through the partitions.FETCH NEXTFROM partitionsINTO @objectid, @indexid, @partitionnum, @frag;WHILE @@FETCH_STATUS = 0BEGIN;SELECT @objectname = , @schemaname = FROM sys.objects AS oJOIN sys.schemas as s ON s.schema_id = o.schema_idWHERE o.object_id = @objectid;SELECT @indexname = nameFROM sys.indexesWHERE object_id = @objectid AND index_id = @indexid;SELECT @partitioncount = count (*)FROM sys.partitionsWHERE object_id = @objectid AND index_id = @indexid;-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuildingIF @frag < 30.0BEGIN;SELECT @command = 'ALTER INDEX ' + @indexname + ' ON ' +@schemaname + '.' + @objectname + ' REORGANIZE';IF @partitioncount > 1SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum);EXEC (@command);END;IF @frag >= 30.0BEGIN;SELECT @command = 'ALTER INDEX ' + @indexname +' ON ' +@schemaname + '.' + @objectname + ' REBUILD';IF @partitioncount > 1SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum);EXEC (@command);END;PRINT @command;FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag;END;-- Close and deallocate the cursor.CLOSE partitions;DEALLOCATE partitions;-- drop the temporary tableIF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do')DROP TABLE work_to_do;GO/****** Object: StoredProcedure [dbo].[SP_Rebuild_IndexChip] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [dbo].[SP_Rebuild_IndexChip]--==================================================--作者:chenwl--时间:2010-09-08--功能:SQLServer2008/2005 清除索引碎片--备注:--修改:--==================================================ASset nocount on--使用游标重新组织指定库中的索引,消除索引碎片--R_T层游标取出当前数据库所有表declare R_T cursorfor select name from sys.tablesdeclare @T varchar(50)open r_tfetch next from r_t into @twhile @@fetch_status=0begin--R_index游标判断指定表索引碎片情况并优化declare R_Index cursorfor select ,,s.avg_fragmentation_in_percent from sys.tables tjoin sys.indexes i on i.object_id=t.object_idjoin sys.dm_db_index_physical_stats(db_id(),object_id(@T),null,null,'limited') s on s.object_id=i.object_id and s.index_id=i.index_iddeclare @TName varchar(50),@IName varchar(50),@avg int,@str varchar(500)open r_indexfetch next from r_index into @TName,@Iname,@avgwhile @@fetch_status=0beginif @avg>=30 --如果碎片大于30,重建索引beginset @str='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' rebuild'endelse --如果碎片小于30,重新组织索引beginset @STR='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' reorganize'endprint @strexec (@str) --执行fetch next from r_index into @TName,@Iname,@avgend--结束r_index游标close r_indexdeallocate r_indexfetch next from r_t into @tend--结束R_T游标close r_tdeallocate r_tset nocount offGO/****** Object: StoredProcedure [MYSCRIPT].[SP_CURRENT_TEMPDB_USAGE_STATEMENT] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [MYSCRIPT].[SP_CURRENT_TEMPDB_USAGE_STATEMENT]--=============================================================--功能:当前连接的语句及其对TempDB累计的使用量--作者:--时间:--使用:--=============================================================ASSELECT T1.session_id,(T1.internal_objects_alloc_page_count+er_objects_alloc_page_count+TASK_ALLOC) AS [保留或分配的总数据页数],(T1.internal_objects_dealloc_page_count+er_objects_dealloc_page_count+TASK_DEALLOC) as [取消分配的总资料页数],(SELECT TEXT FROM sys.dm_exec_requests AS R1 CROSS APPLYsys.dm_exec_sql_text(R1.sql_handle) WHERE R1.session_id=T1.session_id) AS [要执行的批处理], (SELECT SUBSTRING(QT.TEXT,R.statement_start_offset/2+1,(CASE WHEN R.STATEMENT_END_OFFSET=-1THEN DATALENGTH(QT.TEXT)ELSE R.statement_end_offset END -R.statement_start_offset)/2+1)FROM sys.dm_exec_requests as R CROSS APPLYsys.dm_exec_sql_text(R.sql_handle) AS QT WHERE R.session_id=T1.session_id) AS [正执行的语法]FROM sys.dm_db_session_space_usage AS T1JOIN SYS.DM_EXEC_REQUESTS T3 ON T1.session_id=T3.session_idLEFT JOIN(SELECTsession_id,SUM(internal_objects_alloc_page_count+user_objects_alloc_page_count) AS TASK_ALLOC,SUM(internal_objects_dealloc_page_count+user_objects_dealloc_page_count) AS TASK_DEALLOC FROM sys.dm_db_task_space_usage GROUP BY session_id) AS T2ON T1.session_id=T2.session_idWHERE T1.session_id>50 AND T1.database_id=2----Tempdb的数据库库IDORDER BY [保留或分配的总数据页数] descGO/****** Object: StoredProcedure [dbo].[SP_BufferUsed] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [dbo].[SP_BufferUsed] @DB_NAME sysname--==================================================--作者:chenwl--时间:2010-10-21--功能:查看某个数据库内各对象使用内存缓存区资源的统计--备注:--修改:--==================================================ASBEGINDECLARE @SQL nvarchar(4000)SELECT @SQL='SELECT p.object_id,OBJECT_SCHEMA_NAME(object_id,database_id) as SchemaName,OBJECT_NAME(p.object_id,b.database_id) as objname,p.index_id,buffer_count=COUNT(*) from ' + @DB_NAME + '.sys.allocation_units a,' + @DB_NAME + '.sys.dm_os_buffer_descriptors b,' + @DB_NAME + '.sys.partitions pwhere a.allocation_unit_id=b.allocation_unit_idand a.container_id=p.hobt_idand b.database_id=DB_ID('''+@DB_NAME+''')group by b.database_id,p.object_id,p.index_idorder by buffer_count desc'exec(@SQL)ENDGO/****** Object: StoredProcedure [dbo].[sp_backupdatabase] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROC [dbo].[sp_backupdatabase](@path NVARCHAR(100))--==================================================--作者:chenwl--时间:2010-09-08--功能:周期性备份数据库代码(保留原来备份的):-- 备份文件名为:原数据库名称+'_'+备份时间.bak--备注:@path:备份路径--修改:--==================================================AS--路径名格式标准化IF RIGHT(@path,1)<>'\' SET @path=@path+'\'--获取文件夹信息DECLARE @t TABLE(id INT IDENTITY,a INT,b INT,c INT)DECLARE @fpath NVARCHAR(3)SET @fpath=LEFT(@path,3)INSERT @t EXEC master..xp_fileexist @fpathINSERT @t EXEC master..xp_fileexist @path--如果指定盘符有误不存在,则返回错误提示:IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)BEGINRAISERROR(N'输入的盘符不存在,请重新输入!',16,1)RETURNEND--如果不存在指定的文件夹,则创建:ELSE IF EXISTS(SELECT 1 FROM @t WHERE b=0 AND id=2)BEGINDECLARE @mddir NVARCHAR(100)SET @mddir='md '+@pathEXEC master..xp_cmdshell @mddirEND--开始备份数据库到指定的目录DECLARE @s nvarchar(4000)SELECT @s=ISNULL(@s+';','')+N'BACKUP database ['+name+'] TO DISK = '''+@path+name+'_'+CONVERT(NVARCHAR(8),getdate(),112)+N'.bak'''FROM master..sysdatabasesWHERE name NOT IN('master','tempdb','model','msdb','pubs')--这里筛选不参加备份的数据库EXEC(@S)GO/****** Object: StoredProcedure [dbo].[pCreateInsertScript] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE proc [dbo].[pCreateInsertScript] (@tablename varchar(256))--==================================================--作者:chenwl--时间:2010-09-08--功能:将表数据生成Insert脚本--备注:exec pCreateInsertScript 'BexmCodeType'--修改:--==================================================asbeginset nocount ondeclare @sqlstr varchar(4000)declare @sqlstr1 varchar(4000)declare @sqlstr2 varchar(4000)select @sqlstr='select ''insert '+@tablenameselect @sqlstr1=''select @sqlstr2='('select @sqlstr1='values (''+'select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name +',' from (select case when a.xtype =173 then 'case when '++' is null then ''NULL'' else'+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+ +')'+' end' when a.xtype =104 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(1),'+ +')'+' end'when a.xtype =175 then 'case when '++' is null then ''NULL'' else'+'''''''''+'+'replace('++','''''''','''''''''''')' + '+'''''''''+' end' when a.xtype =61 then 'case when '++' is null then ''NULL'' else'+'''''''''+'+'convert(varchar(23),'+ +',121)'+ '+'''''''''+' end'when a.xtype =106 then 'case when '++' is null then ''NULL'' else'+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+ +')'+' end' when a.xtype =62 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(23),'+ +',2)'+' end'when a.xtype =56 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(11),'+ +')'+' end'when a.xtype =60 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(22),'+ +')'+' end'when a.xtype =239 then 'case when '++' is null then ''NULL'' else'+'''''''''+'+'replace('++','''''''','''''''''''')' + '+'''''''''+' end' when a.xtype =108 then 'case when '++' is null then ''NULL'' else'+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+ +')'+' end' when a.xtype =231 then 'case when '++' is null then ''NULL'' else'+'''''''''+'+'replace('++','''''''','''''''''''')' + '+'''''''''+' end' when a.xtype =59 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(23),'+ +',2)'+' end'when a.xtype =58 then 'case when '++' is null then ''NULL'' else'+'''''''''+'+'convert(varchar(23),'+ +',121)'+ '+'''''''''+' end'when a.xtype =52 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(12),'+ +')'+' end'when a.xtype =122 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(22),'+ +')'+' end'when a.xtype =127 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(6),'+ +')'+' end'when a.xtype =48 then 'case when '++' is null then ''NULL'' else'+'convert(varchar(6),'+ +')'+' end'when a.xtype =165 then 'case when '++' is null then ''NULL'' else'+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+ +')'+' end' when a.xtype =167 then 'case when '++' is null then ''NULL'' else'+'''''''''+'+'replace('++','''''''','''''''''''')' + '+'''''''''+' end' else '''NULL'''end as col,a.colid,from syscolumns a where a.id = object_id(@tablename)and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36)t order by colidselect @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+')'+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename + ' where 1=1 'print @sqlstrexec( @sqlstr)set nocount offendGO/****** Object: StoredProcedure [dbo].[p_lockinfo] Script Date: 01/07/2011 08:04:16******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate proc [dbo].[p_lockinfo](@kill_lock_spid bit=1, @show_spid_if_nolock bit=1)--==================================================--作者:chenwl--时间:2010-09-08--功能:处理死锁,查看当前进程,或死锁进程,并能自动杀掉死进程,因为是针对死的,所以如果有死锁进程,只能查看死锁进程-- 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程--备注:@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示-- @show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示--修改:--==================================================asdeclare @count int,@s nvarchar(1000),@i intselect id=identity(int,1,1),标志,进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,登陆时间=login_time,打开事务数=open_tran, 进程状态=status,工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,域名=nt_domain,网卡地址=net_addressinto #temptab from(select 标志='死锁的进程',spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address,s1=a.spid,s2=0from master..sysprocesses a join (select blocked from master..sysprocesses group by blocked)b on a.spid=b.blocked where a.blocked=0union allselect '|_牺牲品_>',spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address,s1=blocked,s2=1from master..sysprocesses a where blocked<>0)a order by s1,s2select @count=@@rowcount,@i=1if @count=0 and @show_spid_if_nolock=1begininsert #temptab select 标志='正常的进程',spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,open_tran,status,hostname,program_name,hostprocess,nt_domain,net_addressfrom master..sysprocessesset @count=@@rowcountendif @count>0begincreate table #temptab1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255)) if @kill_lock_spid=1begindeclare @spid varchar(10),@标志 varchar(10)while @i<=@countbeginselect @spid='进程ID',@标志='标志' from #temptab where id=@iinsert #temptab1 exec('dbcc inputbuffer('+@spid+')')if @标志='死锁的进程' exec('kill '+@spid)set @i=@i+1endendelsewhile @i<=@countbeginselect @s='dbcc inputbuffer('+cast('进程ID' as varchar)+')' from #temptab where id=@i insert #temptab1 exec(@s)set @i=@i+1endselect a.*,进程的SQL语句=b.EventInfofrom #temptab a join #temptab1 b on a.id=b.idendGO/****** Object: StoredProcedure [dbo].[devbackupDatabase] Script Date: 01/07/2011 08:04:16 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[devbackupDatabase]--==================================================--作者:chenwl--时间:2010-09-08--功能:异地数据库备份--备注:--修改:--==================================================ASBEGINSET NOCOUNT ON;。
数据库日常维护手册
数据库日常维护手册注,蓝色部分为可执行命令,红色部分为重点注意的。
一、停止、启动群集首先应停止实例和相关服务,最后才是关闭节点应用程序(虚拟 IP、GSD、TNS 监听器和ONS)。
以下命令在oracle用户下执行。
emctl stop dbconsolesrvctl stop instance -d hsdb -i hsdb1srvctl stop instance -d hsdb -i hsdb2srvctl stop nodeapps -n bjhsdb1srvctl stop nodeapps –n bjhsdb2启动节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。
当成功启动节点应用程序后,最后才是启动 Oracle 实例和相关服务,以及企业管理器数据库控制台srvctl start nodeapps -n bjhsdb1srvctl start nodeapps -n bjhsdb2srvctl start instance -d hsdb -i hsdb1srvctl start instance -d hsdb -i hsdb2emctl start dbconsole使用 SRVCTL 启动/停止所有实例srvctl start database -d hsdbsrvctl stop database -d hsdb二、归档管理以下命令是在登入数据库主机后,在sqlplus下执行。
查看是否归档Archive log list在RAC中,归档模式之间的切换要比单机复杂,下面是非归档模式该为归档模式保留一个实例tdb1,停掉其它实例(shutdown immediate)以下操作都在mesoradb1执行:alter system set parameter CLUSTER_DATABASE= false scope=spfile;shutdown immediate检查LOG_ARCHIVE_DEST、LOG_ARCHIVE_FORMAT参数是否设定正确,具体参照reference; startup mount若由非归档模式改为归档模式:alter database archivelog由归档模式改为非归档模式:alter database noarchivelogalter database openalter system set parameter CLUSTER_DATABASE= true scope=spfile;shutdown immediate三、空间管理以下命令可在PL/SQL Developer下执行。
(2021年整理)数据库日常运维操作手册
数据库日常运维操作手册编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(数据库日常运维操作手册)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为数据库日常运维操作手册的全部内容。
数据库日常运维操作手册日常运维操作手册主要针对ORACLE数据库管理员对数据库系统做定期监控:(1)。
每天对ORACLE数据库的运行状态、日志文件、备份情况、数据库的空间使用情况、系统资源的使用情况进行检查,发现并解决问题。
并要有相关的人员负责每天查看,发现问题及时上报分析。
检查每天的数据库备份完成情况.(2). 每周对数据库对象的空间扩展情况、数据的增长情况进行监控、对数据库做健康检查、对数据库对象的状态做检查.(3). 每月对表和索引等进行Analyze、检查表空间碎片、寻找数据库性能调整的机会、进行数据库性能调整、提出下一步空间管理计划。
对ORACLE数据库状态进行一次全面检查(4)根据贵公司数据库的安全策略对ORACLE DB进行加固一.日维护过程1。
1、确认所有的INSTANCE状态正常登陆到所有数据库或例程,检测ORACLE后台进程:$ps –ef|grep ora1。
2、检查文件系统的使用(剩余空间)如果文件系统的剩余空间小于20%,需删除不用的文件以释放空间。
#df –k1.3、检查日志文件和trace文件记录检查相关的日志文件和trace文件中是否存在错误。
A、连接到每个需管理的系统使用’telnet’命令B、对每个数据库,进入到数据库的bdump目录,unix系统中BDUMP目录通常是$ORACLE_BASE/<SID>/bdump#$ORACLE_BASE/<SID>/bdumpC、使用Unix ‘tail’命令来查看alert_〈SID>.log文件#tail $ORACLE_BASE/〈SID>/bdump/alert_〈SID>。
数据库维护脚本
数据库维护脚本------整理了⼏个常⽤的数据库维护的脚本,和⼤家分享,希望能够对⼤家有所帮助,尤其是--初学者。
这些脚本只针对Sql Server 2000,在Sql Server 2005下没有进⾏测试,有些--可能不适⽤。
如果有错误,请联系我<Yahongq111@>----/********************************************************************************* * FielName : backup.sql* Function : ⾃动备份* Author : Yahong<Yahongq111@>* Date : 2005-5-10 2005-5-19 2006-8-1 2007-09-18* Version : 00 01 02 03** Remark :* 2006-08-01 增加差异备份和完全备份两种情况,⽣成多个备份副本* 2008-09-18 增加备份⼀个实例中的所有数据库的情况,并在备份后清除⽇志**********************************************************************************/use masterdeclare @DbName varchar(255),@dir varchar(256),@dir_db varchar(256),@verb varchar(256),@cmd varchar(256),@backup_name varchar(256),@dynamic_name varchar(10),@disk_name varchar(256),@copy nvarchar(100),@today datetime,@weekday int--建⽴⽹络连接exec xp_cmdshell 'net use K: /delete'exec xp_cmdshell 'net use I: /delete'exec xp_cmdshell 'net use K: \\193.254.40.118\backup backup /user:Web\backup 'exec xp_cmdshell 'net use I: \\172.16.8.48\databackup backup /user:QA-SERVER-TEST\backup'--设定名字set @today=getdate()set @dynamic_name=convert(varchar(10),@today,120)set @dir='K:\'+@dynamic_nameset @dir_db=@dir+'Database'set @verb='mkdir '--建⽴⽬录set @cmd=@verb+@dir_dbexec xp_cmdshell @cmddeclare cur_database cursor forward_only read_only forselect name from sysdatabaseswhere dbid>4 --系统数据库的dbid<=4open cur_databasefetch next from cur_databaseinto @DbNamewhile @@fetch_status=0beginset @backup_name= @DbName+'_'+@dynamic_nameset @disk_name=@dir_db+'\'+@backup_name+'.bak'--添加备份设备EXEC sp_addumpdevice 'disk',@backup_name, @disk_nameBACKUP DATABASE @DbName TO @backup_nameelse --其他时候进⾏差异备份BACKUP DATABASE @DbName TO @backup_name with differential--清理⽇志backup log @DbName with no_log--释放设备exec sp_dropdevice @backup_name--复制备份副本到其他地⽅set @copy='copy '+@disk_name+' I:'exec xp_cmdshell @copy--备份下⼀个数据库fetch next from cur_databaseinto @DbNameendclose cur_databasedeallocate cur_database--删除⽹络连接exec xp_cmdshell 'net use K: /delete'exec xp_cmdshell 'net use I: /delete'/******************************************************************************** File Name : Restore.sql* Function : 数据库还原* Author : Yahong<Yahongq111@>* Version : 00* Date : 2007-09-18* Remark :********************************************************************************/use masterdeclare@DbName varchar(255) --数据库的名字,@WholeFileName varchar(255) --完全备份的⽂件名,@DifferentFileName varchar(255) --差异备份的⽂件名,@MasterFileName varchar(255) --数据⽂件名,注意他们都是逻辑名称,@LogFileName varchar(255) --⽇志⽂件名,@TargetDir varchar(255) --还原后数据库⽂件所在的路径,如果没有指定该参数, --则必须存在与原数据库相同的路径declare @WholeDeviceName varchar(255),@DifferenctDeviceName varchar(255),@TargetMasterFileName varchar(255),@TargetLogFileName varchar(255)--建⽴⽹络链接exec xp_cmdshell 'net use K: \\172.16.8.48\200709 backup /User:qa-server-test\backup'--在这⾥设置需要备份的⽂件等信息set @DbName='CCTQA' --需要还原的数据库的名字,注意不要搞错了,否则--覆盖了其他的数据库,可别说我没有提醒你set @WholeFileName='CCTQA_2007-09-14.bak' --完全备份⽂件--以下4⾏如果没有,不要指定,把他们注释掉就⾏了set @DifferentFileName='CCTQA_2007-09-17.bak' --最后⼀次差异备份⽂件set @MasterFileName='CCTQA_Data' --数据⽂件set @LogFileName='CCTQA_Log' --⽇志⽂件set @TargetDir='D:\CCTQA\Databae' --⽬标路径--添加还原设备set @WholeDeviceName=@DbName+'WholeDevice'set @WholeFileName='K:\'+@WholeFileNameexec sp_addumpdevice 'disk',@WholeDeviceName,@WholeFileName--开始备份if(isnull(@DifferentFileName,'')<>'') --如果具有差异备份的还原begin--添加差异备份还原的设备set @DifferenctDeviceName=@DbName+'DifferenctDevice'set @DifferentFileName='K:\'+@DifferentFileNameexec sp_addumpdevice 'disk',@DifferenctDeviceName,@DifferentFileName--备份if(isnull(@TargetDir,'')='')restore database @DbName from @WholeDeviceNamewith NORECOVERYelse --如果还原后的数据库⽂件的路径与备份前的路径不⼀致restore database @DbName from @WholeDeviceNamewith NORECOVERY,move @MasterFileName to @TargetMasterFileName,move @LogFileName to @TargetLogFileNamerestore database @DbName from @DifferenctDeviceNameendelsebegin --只有完全备份的还原if(isnull(@TargetDir,'')='')restore database @DbName from @WholeFileNameelserestore database @DbName from @WholeFileNamewith move @MasterFileName to @TargetMasterFileName,move @LogFileName to @TargetLogFileNameend--释放备份设备exec sp_dropdevice @WholeDeviceNameif(isnull(@DifferentFileName,'')<>'')exec sp_dropdevice @DifferenctDeviceName--删除⽹络链接exec xp_cmdshell 'net use K: /delete'/************************************************************************** File Name : ShrinkLog.sql* Function : 收缩数据库的⽇志⽂件* Author :Yahong<Yahongq111@>* Version : 00* Date : 2007-09-16* Remark :**************************************************************************/----第⼀步:设置需要收缩的数据库,找到需要收缩数据⽂件--use cctqaselect Size/128 Size,Name from sysfiles/*declare @LogName varchar(255),@TargetSize int----哭都哭不回来了。
数据库日常维护常用的脚本部分收录
数据库日常维护常用的脚本部分收录有些数据库语句可能平时用得不多,所以使用的时候总是难免上网查询,略嫌麻烦,今日在CSDN论坛看到有贴收录这些语句,就顺手牵羊copy了一份,本想copy了就结束了,但和部分朋友一样,真正用到它们的时候有时会发现难免会出错,于是,择日不如撞日,就在今天花点时间在SQL SERVER 2008中运行试试。
之前并没怎么注意SQL2008的语法与之前版本的不同,因为常用的select等语句都一样,一直以为2008应该与2005的版本几乎无差。
不料这一试,果然试出了问题,这才发现,以前从书本上见过的backup语句和dump语句已经在2008里面消失了……废话不多说,把收录的语句及备注贴上来,便于以后查询使用~~1、数据库备份操作:1.declare @sql varchar(8000)2.set @sql='backup database smallerp to disk=''d:\'+RTRIM(CONVERT(varchar,getdate(),112))+'.bak'''3.exec(@sql);4.(备注:引号不可缺少任意一个,否则会报错)2、删除5天前的备份文件:1.declare @sql varchar(8000)2.set @sql='del d:\'+RTRIM(CONVERT(varchar,getdate()-5,112))+'.bak'''3.exec master..xp_cmdshell @sql;4.(备注:xp_cndshell默认该组件会被阻止,需要先启用它才可正常操作:使用如下语句将其启用EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;)3、收缩数据库语句:1.dump transaction smallerp with no_log;2.(备注:这句话中会提示transaction附近有语法错误,原来在SQL2008中已经不再使用此法来收缩数据库了。
Oracle DBA 数据库日常维护手册 常用SQL 脚本
Oracle数据库日常维护【版本整理日期:2011/02/26 】版本整理人:1634068400@本文档包含以下内容:1.Oracle数据库日常维护2.Oracle DBA 常用管理脚本3.Oracle DB 常用SQL 语句/******************************************************** (若跳转不成功,请复制到浏览器或联系Q) /item.htm?id=7437120468Metalink Sharing ********************************************************/在Oracle数据库运行期间,DBA应该对数据库的运行日志及表空间的使用情况进行监控,及早发现数据库中存在的问题。
一、Oracle警告日志文件监控Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:l数据库的启动、关闭,启动时的非缺省参数;l数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;l对数据库进行的某些操作,如创建或删除表空间、增加数据文件;l数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA -600)DBA 应该定期检查日志文件,根据日志中发现的问题及时进行处理问题处理 启动参数不对 检查初始化参数文件因为检查点操作或归档操作没有完成造成重做日志不能切换 如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;有人未经授权删除了表空间 检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限出现坏块 检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建表空间不够增加数据文件到相应的表空间 出现ORA-600 根据日志文件的内容查看相应的TRC文件,如果是Oracle 的bug ,要及时打上相应的补丁二、数据库表空间使用情况监控(字典管理表空间)数据库运行了一段时间后,由于不断的在表空间上创建和删除对象,会在表空间上产生大量的碎片,DBA 应该及时了解表空间的碎片和可用空间情况,以决定是否要对碎片进行整理或为表空间增加数据文件。
MariaDB数据库日常维护项目方案
MariaDB数据库日常维护项目方案项目目标本项目的目标是确保MariaDB数据库的正常运行和高效性能,以满足组织的数据存储和管理需求。
通过实施日常维护措施,提高数据库的可靠性和可用性,减少潜在风险和故障可能性。
维护措施以下是我们推荐的MariaDB数据库日常维护措施:1. 数据库备份定期创建数据库备份,以防止数据丢失或数据库损坏。
备份可以采用定时自动化方式进行,确保备份数据的完整性和一致性。
备份数据的存储应当分离于数据库服务器,以防止单点故障。
2. 数据库优化进行数据库性能优化,包括定期的索引优化和查询优化。
通过分析慢查询日志和查询执行计划,识别性能瓶颈并进行相应优化。
确保合理的索引设计和优化查询以提升数据库的响应速度和效率。
3. 硬件和操作系统监控实时监控数据库服务器的硬件状态和操作系统性能指标。
监控关键指标如CPU使用率、内存利用率、磁盘空间和网络流量,及时发现并解决硬件故障或资源瓶颈问题。
可以使用监控工具来实现自动化监控和报警。
4. 安全措施加强数据库的安全性,包括但不限于设置强密码、限制远程访问、定期更新数据库软件和补丁、实施访问控制策略等。
确保敏感数据的保护和合规性,防止未经授权的访问和数据泄漏。
5. 日志监控和审计启用数据库的日志功能,并定期监控和审计数据库日志。
及时发现异常事件和潜在安全问题,采取相应的措施进行排查和应对。
日志监控和审计记录的保存应符合法规和合规要求。
6. 故障恢复和灾备建立有效的故障恢复和灾备策略,包括数据库故障恢复、数据恢复和灾难恢复。
规划并测试故障恢复计划,确保在故障或灾难事件中能够快速恢复数据库的可用性和数据完整性。
结束语通过实施以上的数据库日常维护措施,我们可以提高MariaDB 数据库的稳定性和性能,减少潜在风险和故障对组织的影响。
在实施维护计划时,我们建议制定详细的操作步骤和时间表,并定期评估和更新维护计划,以确保其与组织需求的一致性和有效性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--完整备份,每周一次USE MasterGOdeclare@str varchar(100)set@str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar, getdate(),20),'-',''),' ',''),':','')+'.bak'BACKUP DATABASE[demo]TO DISK=@strWITH RETAINDAYS=15,NOFORMAT,NOINIT,NAME=N'Demo完整备份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO/*******************差异备份作业*******************/--截断日志USE MasterGOBACKUP LOG Demo WITH NO_LOGGO--收缩日志文件USE DemoGODBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)GO--差异备份,每天一次USE MasterGOdeclare@str varchar(100)set@str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar, getdate(),20),'-',''),' ',''),':','')+'.diff'BACKUP DATABASE[Demo]TO DISK=@strWITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,NAME=N'Demo差异备份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO--日志备份,每小时一次USE DemoGOdeclare@str varchar(100)set@str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,g etdate(),20),'-',''),' ',''),':','')+'.trn'BACKUP LOG[Demo]TO DISK=@strWITH RETAINDAYS=3,NOFORMAT,NOINIT,NAME=N'Demo日志备份',SKIP,NOREWIND,NOUNLOAD,STATS=10GO--删除过期的备份文件,每天两次declare@str varchar(100),@dir varchar(100),@fileName varchar(30)set@dir='del D:\DBtext\jgj\DBABak\'set@filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-', ''),' ',''),':',''),8)set@str=@dir+'fullbak'+@filename+'*.bak'exec xp_cmdshell @strset@filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',' '),' ',''),':',''),8)set@str=@dir+'diffbak'+@filename+'*.diff'exec xp_cmdshell @strset@filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',' '),' ',''),':',''),8)set@str=@dir+'logbak'+@filename+'*.trn'exec xp_cmdshell @str-- 如何删除 SQL2005 过期的数据库备份文件呢?在 SQL2005 数据库中,不可以自动删除过期的备份文件,所以借用第三方插件完成此功能。
-- 方式一:通过 Forfiles 删除指定目录下过期的备份文件目的:删除目录 i: \sqldataup 中天前的 . bak 文件:步骤:1、定义 FORFILES 批处理脚本如下:C: \> FORFILES / P i: \sqldataup / M *. bak / C "cmd /C del /Q @path" / d -5如果执行成功则返回当前盘符 C: \>。
-- 如果没有需要删除的文件则返回信息错误 : 用指定的搜索标准没有找到文件。
比如:--C:\>FORFILES /P i:\sqldataup /M *.bak /C "cmd /C del /Q @path" /d -5-- 错误 : 用指定的搜索标准没有找到文件。
2、通过计划任务调用批处理脚本如图所示,图太长请看这里3、当然也可以用 SQLAgent 调用 CMDEXEC 完成批处理作业。
方式二:如果在 SQL2008 中因为默认安装 Powershell 1.0程序,故可以用 Powershell 编写脚本来完成定时删除过期文件。
太多内容,请看文章/claro/archive/2009/08/18/4458417.aspx。
--最好备份日志,以后可通过日志恢复数据。
以下为日志处理方法一般不建议做第4,6两步第4步不安全,有可能损坏数据库或丢失数据第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.--*/--下面的所有库名都指你要处理的数据库的库名1.清空日志DUMP TRANSACTION库名WITH NO_LOG2.截断事务日志:BACKUP LOG库名WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成--收缩数据库DBCC SHRINKDATABASE(库名)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1)4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)a.分离数据库:企业管理器--服务器--数据库--右键--分离数据库b.在我的电脑中删除LOG文件c.附加数据库:企业管理器--服务器--数据库--右键--附加数据库此法将生成新的LOG,大小只有500多K或用代码:下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
a.分离EXEC sp_detach_db @dbname='库名'b.删除日志文件c.再附加EXEC sp_attach_single_file_db @dbname='库名',@physname='c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'5.为了以后能自动收缩,做如下设置:企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"--SQL语句设置方式:EXEC sp_dboption '库名', 'autoshrink', 'TRUE'6.如果想以后不让它日志增长得太大企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:alter database库名 modify file(name=逻辑文件名,maxsize=20)--查看表的索引信息exec sp_helpindex tb--结合sys.indexes和sys.index_columns,sys.objects,sys.columns查询索引所属的表或视图的信息select as表名, as索引名, as列名,i.type_desc as类型描述,is_primary_key as主键约束,is_unique_constraint as唯一约束,is_disabled as禁用fromsys.objects oinner joinsys.indexes ioni.object_id=o.object_idinner joinsys.index_columns iconic.index_id=i.index_id and ic.object_id=i.object_idinner joinsys.columns conic.column_id=c.column_id and ic.object_id=c.object_idgo--查询索引的键和列信息select as表名, as索引名, as字段编号,fromsysindexes i inner join sysobjects ooni.id=o.idinner joinsysindexkeys kono.id=k.id and i.indid=k.indidinner joinsyscolumns conc.id=i.id and k.colid=c.colidwhere='表名'---查询索引操作的信息select*from sys.dm_db_index_usage_stats--查询指定表的统计信息(sys.stats和sysobjects联合查询) select,--表名,--统计信息的名称auto_created,--统计信息是否由查询处理器自动创建user_created--统计信息是否由用户显示创建fromsys.statsinner joinsysobjects oons.object_id=o.idwhere='表名'go--查看统计信息中列的信息select,--表名,--统计信息的名称sc.stats_column_id,---列名fromsys.stats_columns scinner joinsysobjects oonsc.object_id=o.idinner joinsys.stats sonsc.stats_id=s.stats_id and sc.object_id=s.object_id inner joinsys.columns consc.column_id=c.column_id and sc.object_id=c.object_idwhere='表名'--查看统计信息的明细信息dbcc show_statistics--查看索引自动创建的统计信息exec sp_autostats '对象名'--关闭自动生成统计信息的数据库选项alter datebase 数据库名set auto_create_statistics off--创建统计信息create statistics统计信息名称on表名(列名)[with[[fullscansample number{percent|rows}][norecompute]]go解释一下上面的参数:fullscan:指定对表或视图中所有的行收集统计信息sample number{percent|rows}:指定随机抽样应读取的数据行数或者百分比 sample选项不能与fullscan选项同时使用norecompute:指定数据库引擎不自动重新计算统计信息--计算随机抽样统计信息create statistics统计信息名称on表名(列名)with sample 5percent---创建统计信息,按5%计算随机抽样统计信息go--创建统计信息exec sp_createstats--参数自己去查下帮助,在这里不一一列举--修改统计信息update statistics表名|视图名索引名|统计信息名,索引名|统计信息名,.....[with[[fullscansample number{percent|rows}][norecompute]]---参数与create statistics 语句相似,下面介绍几种常用应用1.更新指定表的所有统计信息update statistics表名2.更新指定表的单个索引的统计信息update statistics表名索引名3.对表进行全面扫描,更新统计信息update statistics表名(列名) with fullscan--获取磁盘读写情况select@@total_read as'读取磁盘的次数',@@total_write as'写入磁盘的次数',@@total_error as'磁盘写入错误数',getdate() as'当前时间'--获取数据库文件的I/O统计信息select*from fn_virtualfilestats(null,null)--两个参数database_id--指定数据库编号,如果为null,则为所有数据库实例返回I/O统计信息file_id--文件的编号,如果为null,则为所有文件返回信息--获取I/O工作情况select@@id_busy,--SQL自上次启动以来的用于执行输入和输出操作的时间@@timeticks, --每个时钟周期对应的微秒数@@id_busy*@@timeticks as'I/O 操作毫秒数',getdate() as'当前时间'--查看SQL SEVER CPU活动,工作情况select@@cpu_busy,--自上次启动以来的工作时间@@timeticks, --每个时钟周期对应的微秒数@@cpu_busy*cast(@@timeticks as float)/1000as'cpu工作时间(秒)', @@idie*cast(@@timeticks as float)/1000as'CPU空闲时间(秒)' getdate() as'当前时间'--获取网络数据包统计信息selectgetdate() as'当前时间',@@pack_received as'输入数据包数量',@@pack_sent as'输出数据包数量',@@packet_error as'错误包数量'--启动AWEsp_configure 'show advanced options',1reconfiguregosp_configure 'awe enable',1--启动AWE选项,用于支持超过4G内存具体用法见笔记三gosp_configure 'show advanced options',0reconfigurego--指定游标集中的行数sp_configure 'show advanced options',1reconfiguregosp_configure 'cursor threshold'--指定游标集中的行数,超过此行数,将异步生成游标键集gosp_configure 'show advanced options',0reconfigurego/*配置选项 'show advanced options' 已从 0 更改为 1。