随笔分类 - mssql
摘要:首先,我需要强调下,这篇主旨是揭示堆表的删除记录找回的原理,我所考虑的方面并不适用于每个人的每种情况,望大家见谅~ 很多朋友认为数据库在简单模式下,堆表误删除一条记录,是无法找回的,因为没有日志记录。其实不然,某种意义上是可以找回的,因为堆表在删除记录时,没有回收空页面的前提下,只更改了行偏移,实际数据没有被物理删除,所以利用这点,测试了下恢复数据,果然成功了,但是还有点问题没有研究出结果:如果不关闭页面校验,除了更改偏移量,删除数据时还需要更改页眉,这点还没时间去琢磨,所以恢复数据时还要能推断出页眉的16进制对应关系,有兴趣的朋友可以分享下经验给我。这里为了排除页眉的校验错误,关闭后测试..
阅读全文
摘要:SQL Server Insert 操作效率(堆表 VS 聚集索引表) “SQL Server的Insert操作在堆表或者聚集索引表的时候,哪个效率更高?为什么高?” 之前有同事问过我这个问题,为了确保日志库的记录效率,于是我做了简单测试了,首先要先强调几点概念: 堆表:没有聚集索引的表,记录通过IAM页以及PFS页来确定哪页有空闲空间。 聚集索引表:有聚集索引的表,记录是根据聚集键值所在页的键值逻辑顺序维护的Demo:如下 分别对堆表和聚集表进行5个并发线程,每个线程各10000次循环插入 1. 堆表测试--1. 创建一张堆表create table Insert_Test...
阅读全文
摘要:原因及解决方案:此为文件写入权限问题,可如下操作解决(XP系统IIS5下尝试可行)1、资源管理器->工具->文件夹选项->查看 不选"使用简单文件共享"2、右击该xml文件(或者该文件所在文件夹),选"属性"点"安全"添加"aspnet",选中“写入”赋予写入权限,或者选"完全控制",然后确定即可。以下为网络获取在windows2003服务器IIS6下出现该错误提示的参考解决方案,在此摘录仅供备份参考:解决方案一在需要进行读写操作的目录下添加Network Service这个帐
阅读全文
摘要:之前写过一篇关于SQL Server 访问MySQL 数据库的文章,最近正好又遇到需要访问Oracle 的情况,将配置过程记录下来也供大家参考。准备工作事先在需要访问Oracle 数据库的主机上完成以下工作:1. 安装SQL Server 数据库:SQL Server 2008 R2 Express2. 安装Oracle 客户端访问程序:Oracle 10g Client3. 配置Oracle 客户端tnsnames.ora 文件,其中需要注意文件中的数据库别名“ORADB”,该名称在下文创建Linked Server 时将会使用到。ORADB = (DESCRIPTION = (A...
阅读全文
摘要:ALTER FUNCTION [dbo].[fn_subordinates1](@root AS INT) RETURNS @Subs TABLE( empid INT NOT NULL PRIMARY KEY NONCLUSTERED, lvl INT NOT NULL, UNIQUE CLUSTERED(lvl, empid) )ASbegin declare @lv int set @lv=0insert @Subs values(@root,@lv)while @@rowcount>0begin set @lv=@Lv+1; insert @subs select b.empid
阅读全文
摘要:DECLARE @login nvarchar(30)-- 查詢設定密碼逾期的登入帳號SELECT @login = name FROM sys.sql_loginsWHERE (type = 's') AND (is_expiration_checked = 1)-- 計算登入帳號密碼已使用天數SELECT @login AS 'login', DATEDIFF(d, CAST(LOGINPROPERTY(@login, 'PasswordLastSetTime') AS datetime), GETDATE()) AS 'pwd_us
阅读全文
摘要:虚拟机共享磁盘,VMware稍显复杂,没想到,VirtualBox却如此简单,下面是详细的步骤 一:添加磁盘二:选择创建一个新的磁盘三:选择VDI类型四:固定大小(此处必须要选此项)五:指定磁盘大小及存放位置,下一步六:创建七:已创建、加载完毕,确定八:点击“管理”菜单,选择“虚拟介质管理”九:选中刚刚创建的磁盘,点击Modify(或右键选择Modify)十:选择“共享”,确定十一:关闭管理窗口十二:选择另一台虚拟机,点击“设置”十三:选择“存储”-“控制器”-“增加磁盘”十四:选择已存在的磁盘,点击后,找到刚刚创建好的磁盘,确定十五:磁盘已加载至此,本块磁盘已共享至两台虚拟机服务器另:Vir
阅读全文
摘要:今天维护计划任务时,经常出现,c001f011错误,到网上找了一些解决方案,如下:创建维护计划失败。其他信息:从 ICLassFactory 为CLSID为{17BCA6E8-A95D-497E-B2F9-AF6AA475916F}的COM组件创建实例失败,原因是出现以后错误:c001f011.(Microsoft.SqlServer.ManagedDTS)从ICassFactory为CLSID为{17BCA6E8-A950-497E-B2F9-AF6AA475916F}的COM组件创建实例失败,原因是出现以下错误:c001f011.(Microsoft.Server.manageDTS)解决
阅读全文
摘要:问题:开启SQLServer2008之后,本地管理员组不再需要手动添加,因为在安装的时候已经默认添加。你甚至只需要把当前用户手动添加到本地管理员用户即可。这意味着,特别是如果你不使用混合认证模式(或者忘记了sa密码),你可能会被拒绝登录自己的SQLServer实例。我遇到过一个情景,一个职员离开,但是他的windows账号,只拥有SQLServer管理员权限,会完全阻塞系统。当然也只有这个人知道sa密码。作为本地管理员甚至域管理员将对你没有帮助。典型的解决方案是以单用户模式重启SQLServer。但是,这将要求一定时间的停机。对于某些系统,这是不可接受的。并且依靠管理服务器的需要,可能没有切实
阅读全文
摘要:问题: 我在我的应用程序中使用简单的查询/存储过程访问一个很大的表。但执行了很长时间。在where子句中,我使用了有索引并且高选择性(selective)并且没有用函数包裹的字段。但是看起来就像没有使用索引一样,问题出在那里?解决方案: 出现这种微秒的问题原因可能是作为参数的数据类型与查询中的数据类型不一致。在这种情况下,SQLServer将会要么把where中的列,要么把参数的数据类型隐式转换为更高级或者更低级的数据类型。当作为被查询列被转换时(转换竞争中的牺牲者),将引起扫描(scan)来满足查询请求。让我们看看以下两个例子,第一个例子使用示例数据库AdventureWorks,我们将通过
阅读全文
摘要:问题:在SQL Server Management Studio中可以运行作业但是用T-SQL运行则失败,反之亦然.分析:这种情况多数为执行时上下文(Context)安全性问题。在SSMS中执行的时候,T-SQL语句是在当前登录名下运行的。但是作业在SQL Server Agent中是以SQL Server Agent 服务(SQL Server Agent Service account)运行的,如果SQL Server Agent的账号与在SSMS中执行T-SQL的账号不一样或者权限不同的话,作业就会失败。本人的实践是使用高权限的账号来运行SQL Server Agent,并且具有独立账号
阅读全文
摘要:参照完整性在设计数据库时需要重视,在我作为DBA的生涯中,看到很多设计走了极端的路子。在进入DELETE CASCADE选项的详细说明前,先来看看另外一个选项,可以在具有外键的表中设置UDPATE CASCADE选项。在我的工作生涯中,我从来没有遇到过必须通过外键来更新一列或多列。创建实例表:在本例中,创建两个表,并用外键关联起来。主表有99999行记录,子表对于每条父记录,有19条记录。下面是创建语句:-- Table creation logic--parent tableCREATE TABLE [dbo].[Order]([OrderID] [bigint] NOT NULL,[Ord
阅读全文
摘要:使用情景:有时候会发现在触发器中的业务逻辑没有执行,可能是因为触发器的逻辑错误所引起的。但是有时候却是因为一些触发器被禁用了。 由于SQLServer默认不跟踪触发器的启用还是禁用。且禁用触发器的命令(Disable Trigger)不在默认跟踪里面捕获。但是可以在服务器级别的跟踪(不是使用Profiler)获取这些信息,捕获SQL:StmtCompleted并在TextData列筛选,但是对于负载较重的系统,这样会有比较大的影响。 如果你的是企业版,可以考虑使用一个新特性:SQL Server Audit。可以使用DATABASE AUDIT SPECIFICATION来捕获这些事件。使用步
阅读全文
摘要:-----------------------------------------------------------------------创建主密钥use masterCreate MASTER KEY ENCRYPTIONBY PASSWORD = 'zhouwei123!'GO--创建证书,用于透明数据加密CREATE CERTIFICATE TDE_Server_CertificateWITH SUBJECT = 'Server-level cert for TDE'GO--第一步:现在开始透明加密USE cteGOCREATE DATABASE EN
阅读全文
摘要:异构数据库中对应的同一对象的数据类型与定义的长度是否一致,如果是基本的结构不一致的话,请先调整一致,再试;反之若是其它数据库对象的话:我建议你刷新一下数据库对象: 使用如下的脚本,EXEC SP_REFRESHVIEW '对象名'这样问题就可以解决EXECUTE sp_refreshview N'dbo.v_Employee_Company';
阅读全文
摘要:--drop table test CREATE TABLE test ( name VARCHAR(12), scores INT ) INSERT INTO test SELECT '周杰伦',230 UNION SELECT '周星驰',100 UNION SELECT '成龙',150 UNION SELECT '李连杰',200 UNION SELECT '莉莉',260 SELECT * FROM test /* name scores 成龙 150 莉莉 260 李连杰 200 周杰伦 230 周星驰
阅读全文
摘要:CREATE TABLE #files ( id INT IDENTITY(1, 1) , name VARCHAR(500) )DECLARE @dir VARCHAR(600)= 'E:\DataBaseBackup\'DECLARE @dir1 VARCHAR(600)= 'dir ' + @dirDECLARE @day INT= 8 --大于等于8天的备份INSERT #files ( name ) EXEC xp_cmdshell @dir1;WITH cte AS ( SELECT name = @di...
阅读全文
摘要:修改SQL server 2008服务器排序规则 SQL Server 2008安装好后,发现服务器排序规则不对,又不想重装SQL Server。 假设当前默认实例的服务器排序规则是:Chinese_PRC_CI_AS,要修改成SQL_Latin1_General_CP1_CI_AS 步骤: 在CMD模式 1、 进入SQL Server 安装文件所在目录(setup.exe文件所在目录) 2、 运行命令:Net stop mssqlserver 3、 Setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver...
阅读全文
摘要:--重建之前--记录配置信息 --SELECT * FROM sys.configurations;--确认还原后的系统数据库文件位置. --SELECT name, physical_name AS current_file_location --FROM sys.master_files --WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb')); --确认版本信息 --SELECT --SERVERPROPE
阅读全文
摘要:在用SQL Server 2005进行一项测试:如何一次删除所有用户数据库时,没注意到当前数据库是master,结果,把这里的一些表都给删除了,从而,数据库引擎可以正常使用,但如果右击任一数据库,都会出现查找master里的一个表的操作(对象名 master.dbo.spt_values' 无效。 (Microsoft SQL Server,错误: 208)),而这个表被我删除了,所以就运行不成功了,想压缩数据库还行用SQL语句,很麻烦。在网上找的大都是SQL Server 2000 master数据库重建帖子,关于SQL Server 2005 重建master的帖子基本上都是只有提
阅读全文