位置: 编程技术 - 正文

SqlServer 实用操作小技巧集合第1/2页(sql server使用教程(图文))

编辑:rootadmin
包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等 (一)挂起操作 在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用,解决办法: 到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 删除PendingFileRenameOperations (二)收缩数据库 --重建索引 DBCC REINDEX DBCC INDEXDEFRAG --收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE (三)压缩数据库 dbcc shrinkdatabase(dbname) (四)转移数据库给新用户以已存在用户权限 exec sp_change_users_login 'update_one','newname','oldname' go (五)检查备份集 RESTORE VERIFYONLY from disk='E:dvbbs.bak' (六)修复数据库 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 有3个参数: --REPAIR_ALLOW_DATA_LOSS -- 执行由 REPAIR_REBUILD 完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。 --REPAIR_FAST 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。 --REPAIR_REBUILD 执行由 REPAIR_FAST 完成的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。 --DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY SQL SERVER日志清除的两种方法 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 方法一 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 方法二 删除数据库中重复数据的几个方法 数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… 方法一 declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max delete from 表名 where 主字段 = @id fetch cur_rows into @id,@max end close cur_rows set rowcount 0 方法二 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。 1、对于第一种重复,比较容易解决,使用 select distinct * from tableName 就可以得到无重复记录的结果集。 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp 发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。 2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集 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即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列) 更改数据库中表的所属用户的两个方法 大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户…… --更改某个表 exec sp_changeobjectowner 'tablename','dbo' --存储更改全部表 CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch @OldOwner as NVARCHAR(), @NewOwner as NVARCHAR() AS DECLARE @Name as NVARCHAR() DECLARE @Owner as NVARCHAR() DECLARE @OwnerName as NVARCHAR() 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 SQL SERVER中直接循环写入数据 没什么好说的了,大家自己看,有时候有点用处 declare @i int set @i=1 while @i< begin insert into test (userid) values(@i) set @i=@i+1 end 无数据库日志文件恢复数据库方法两则 数据库日志文件的误删或别的原因引起数据库日志的损坏 方法一 1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名) 6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用 数据库的脚本创建一个新的数据库,并将数据导进去就行了. USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO UPDATE SYSDATABASES SET STATUS = WHERE NAME='置疑的数据库名' Go sp_dboption '置疑的数据库名', 'single user', 'true' Go DBCC CHECKDB('置疑的数据库名') Go update sysdatabases set status = where name='置疑的数据库名' Go sp_configure 'allow updates', 0 reconfigure with override Go sp_dboption '置疑的数据库名', 'single user', 'false' Go 方法二 事情的起因 昨天,系统管理员告诉我,我们一个内部应用数据库所在的磁盘空间不足了。我注意到数据库事件日志文件XXX_Data.ldf文件已经增长到了3GB,于是我决意缩小这个日志文件。经过收缩数据库等操作未果后,我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道:“无论如何都要保证数据库日志文件存在,它至关重要”,甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的。我真是不知道我那时候是怎么想的?! 这下子坏了!这个数据库连不上了,企业管理器在它的旁边写着“(置疑)”。而且最要命的,这个数据库从来没有备份了。我唯一找得到的是迁移半年前的另外一个数据库服务器,应用倒是能用了,但是少了许多记录、表和存储过程。真希望这只是一场噩梦! 没有效果的恢复步骤 附加数据库 _Rambo讲过被删除日志文件中不存在活动日志时,可以这么做来恢复: 1,分离被置疑的数据库,可以使用sp_detach_db 2,附加数据库,可以使用sp_attach_single_file_db 但是,很遗憾,执行之后,SQL Server质疑数据文件和日志文件不符,所以无法附加数据库数据文件。 DTS数据导出 不行,无法读取XXX数据库,DTS Wizard报告说“初始化上下文发生错误”。 紧急模式 怡红公子讲过没有日志用于恢复时,可以这么做: 1,把数据库设置为emergency mode 2,重新建立一个log文件 3,把SQL Server 重新启动一下 4,把应用数据库设置成单用户模式 5,做DBCC CHECKDB 6,如果没有什么大问题就可以把数据库状态改回去了,记得别忘了把系统表的修改选项关掉 我实践了一下,把应用数据库的数据文件移走,重新建立一个同名的数据库XXX,然后停掉SQL服务,把原来的数据文件再覆盖回来。之后,按照怡红公子的步骤走。 但是,也很遗憾,除了第2步之外,其他步骤执行非常成功。可惜,重启SQL Server之后,这个应用数据库仍然是置疑! 不过,让我欣慰的是,这么做之后,倒是能够Select数据了,让我大出一口气。只不过,组件使用数据库时,报告说:“发生错误:-,未能在数据库 'XXX' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。” 最终成功恢复的全部步骤 设置数据库为紧急模式 停掉SQL Server服务; 把应用数据库的数据文件XXX_Data.mdf移走; 重新建立一个同名的数据库XXX; 停掉SQL服务; 把原来的数据文件再覆盖回来; 运行以下语句,把该数据库设置为紧急模式; 运行“Use Master Go sp_configure 'allow updates', 1 reconfigure with override Go” 执行结果: DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。 接着运行“update sysdatabases set status = where name = 'XXX'” 执行结果: (所影响的行数为 1 行) 重启SQL Server服务; 运行以下语句,把应用数据库设置为Single User模式; 运行“sp_dboption 'XXX', 'single user', 'true'” 执行结果: 命令已成功完成。 ü 做DBCC CHECKDB; 运行“DBCC CHECKDB('XXX')” 执行结果: 'XXX' 的 DBCC 结果。 'sysobjects' 的 DBCC 结果。 对象 'sysobjects' 有 行,这些行位于 5 页中。 'sysindexes' 的 DBCC 结果。 对象 'sysindexes' 有 行,这些行位于 7 页中。 'syscolumns' 的 DBCC 结果。 ………

推荐整理分享SqlServer 实用操作小技巧集合第1/2页(sql server使用教程(图文)),希望有所帮助,仅作参考,欢迎阅读内容。

SqlServer 实用操作小技巧集合第1/2页(sql server使用教程(图文))

文章相关热门搜索词:sqlserver基础操作,sqlserver使用,sqlserver的使用教程,sqlserver使用,sql server实用教程,sql server实用教程,sql server 使用方法,sql server实用教程,内容如对您有帮助,希望把文章链接给更多的朋友!

sql中all,any,some用法 --All:对所有数据都满足条件,整个条件才成立,例如:5大于所有返回的idselect*from#Awhere5All(selectidfrom#A)go--Any:只要有一条数据满足条件,整个条件成立

最常用的SQL语句 (1)数据记录筛选:sql="select*from数据表where字段名=字段值orderby字段名[desc]"sql="select*from数据表where字段名like'%字段值%'orderby字段名[desc]"sql="selecttop*from数

SQL语法 分隔符理解小结 两者主要的区别在于:分隔的标识符被括在双引号中(Transact-SQL也支持方括号的使用:[标识符])并且是区分大小写的。单引号只用于字符串的定界。

标签: sql server使用教程(图文)

本文链接地址:https://www.jiuchutong.com/biancheng/349470.html 转载请保留说明!

上一篇:MSSQL 计算两个日期相差的工作天数的语句(mysql中计算两个日期之间的天数)

下一篇:sql中all,any,some用法(sql的all和any)

  • 公益事业捐赠的范围是什么
  • 什么时候做计提的会计分录
  • 个人承包工程如何避税
  • 小微企业十万免税从什么时候开始
  • 营业外收入在所得税表中填入哪个科目
  • 购销印花税会计分录
  • 政府补助收入计算有了新变化
  • 企业哪些研发费用可以资本化?
  • 商品进销差价账户的用途性质及核算内容
  • 代付其他公司货款会计分录
  • 发票没开完可以领取吗?
  • 异地预缴税款怎么做分录
  • 居民委员会有没有纳税人识别号吗
  • 企业向职工发放的奖金属于
  • 税务登记需要什么资料2022
  • 增值税专用发票有效期是多长时间
  • 餐饮发票可以抵扣成本吗
  • 手撕发票怎么报销给单位,怎么打印抬头和日期
  • 核销外管证需要什么手续
  • 产品调试费计入什么科目
  • 办公室房租计入什么科目
  • 对方公司税务注销了发票没有开给我怎么办
  • 生产成本的工料有哪些
  • 日工资计算的三种方法
  • 公积金社保报销会计分录怎么写?
  • 经营所得的含义
  • linux小技巧
  • hkc中文是什么意思
  • 发生债务重组收益的分录
  • 代理的认定
  • 调制解调器的作用包括
  • 相思树学名叫什么
  • 房产前期开发
  • 2020年农业病虫害
  • 车船税发票丢失
  • 小规模纳税人本年累计金额
  • 小规模未开票收入如何申报增值税
  • 以前年度损益调整在利润表中怎么填
  • 计算机视觉的应用
  • php中自定义函数的语法格式
  • 交所得税怎么记账
  • 报税系统如何导出发票
  • 关联广告是什么意思
  • 快递费报销要明细吗
  • 企业购进材料取得增值税专用发票
  • 收到固定资产抵账账务处理
  • 公司的货款直接转给股东个人了,该怎么转到公司
  • 信用卡的还款方式怎么查
  • 银行承兑汇票是什么意思
  • 期末账项调整的内容包括
  • 结转本年利润的账务处理
  • 购销合同印花税按70%
  • 2018城镇医疗保险缴费
  • 工程用油计入什么科目
  • 农产品收购发票如何抵扣进项税
  • 增资协议书范本合同
  • 为什么零售业只进不出呢
  • Suse Linux 10中MySql安装与配置步骤
  • mysql数据库随机取数据
  • mysql绿色版配置
  • 如何备份还原电脑系统
  • mac硬盘挂载软件
  • window8系统更新
  • xp开始菜单栏怎么还原
  • Win8.164位/32位KB3096053补丁下载 主要修复KB3069114安装问题
  • win8磁盘占用率高怎么处理
  • win7系统玩游戏怎么样
  • awk实现wc功能
  • perl package
  • unity3d官方教程
  • 高通平台工具下载
  • unity方法大全
  • jquery移动端ui框架
  • js的模块化可以怎么做
  • linux echo echo
  • 怎么监控键盘输入
  • 重庆市电子税务局官网登录入口注册
  • 广东省纳税信用等级
  • 河南省税务局冯伟
  • 飞度节油模式在哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设