数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答


3
我应该使用哪种PowerShell技术与SQL Server通讯?
我最终希望使用PowerShell替换用于SQL实例监视器的旧KornShell脚本。但是,我很难过,无法理解PowerShell可以与SQL Server实际进行通信的所有不同方式。不确定是否全部都是这些,但是这里有5种完全不同的方式可以查询SQL Server的版本: 1. SQLConnection .NET类 $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=MyServer;Database=Master;Integrated Security=True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = "Select @@version as SQLServerVersion" $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $SqlAdapter.Fill($DataSet) $SqlConnection.Close() $DataSet.Tables[0] 2. WMI提供者 $sqlProperties = Get-WmiObject -computerName "MyServer" -namespace root\Microsoft\SqlServer\ComputerManagement10 …

4
用户'root'@'%'的访问被拒绝
我以前在MySQL中访问root用户就好了。但是最近,我不再能够。 我可以正常登录: mysql -u root -p 这是登录后的mysql状态: mysql> status -------------- mysql Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2 Connection id: 37 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu) Protocol version: 10 Connection: …

5
删除/插入时,对同一排他锁定的集群键(使用NHibernate)上的SQL死锁
我已经在这个僵局问题上研究了好几天了,无论我做什么,它都会以一种或多种方式持续存在。 首先,一般的前提是:我们具有与VisitItems具有一对多关系的Visits。 VisitItems相关信息: CREATE TABLE [BAR].[VisitItems] ( [Id] INT IDENTITY (1, 1) NOT NULL, [VisitType] INT NOT NULL, [FeeRateType] INT NOT NULL, [Amount] DECIMAL (18, 2) NOT NULL, [GST] DECIMAL (18, 2) NOT NULL, [Quantity] INT NOT NULL, [Total] DECIMAL (18, 2) NOT NULL, [ServiceFeeType] INT NOT NULL, [ServiceText] NVARCHAR …

7
将Oracle DMP文件导入到oracle的全新安装中
一个客户向我们发送了我们需要测试的Oracle数据库。我们不使用Oracle或没有任何内部Oracle专业知识。 我们需要设置数据库,以便我们可以连接到数据库并调试问题。 我重新安装了Oracle 9(客户端正在运行的版本)和管理工具。 为了我的一生,我无法获取它来导入数据。它不应该如此复杂。我一定弄错了。 我试过了: imp 'sys/password AS SYSDBA' file=c:\database.dmp full=yes log=implog.txt 并得到: Connected to: Personal Oracle9i Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production Export file created by EXPORT:V09.02.00 via conventional path Warning: the objects were exported by …
29 oracle  import 

7
如何在Oracle 11g中创建表空间?
我在Oracle中不太熟练,并且我一直在尝试创建一个TABLESPACE,它不断为我提供无效文件名的错误消息。以下是我使用的语法: SQL> create Tablespace HRMT 2 datafile 3 size 4 ; size * ERROR at line 3: ORA-02236: invalid file name 我的书和所有我曾建议我访问的网站都建议我为DATAFILE指定文件路径,当我指定路径时,会收到另一条错误消息。 SQL> create tablespace vania 2 datafile 'home/oracle/hait/' 3 size 10M 4 ; create tablespace vania * ERROR at line 1: ORA-01119: error in creating database file 'home/oracle/hait/' ORA-27040: …
29 oracle 

4
我怎样才能知道为什么在某个表上插入会很慢?
我知道,出于多种原因,在SQL表上执行INSERT操作可能会很慢: 桌子上是否存在INSERT TRIGGER 许多必须检查的强制约束(通常是外键) 当在表的中间插入一行时,页面在聚集索引中拆分 更新所有相关的非聚集索引 阻止桌面上的其他活动 IO写响应时间差 ...我错过了什么? 如何确定我的具体情况中哪个责任人?如何衡量分页与非聚集索引更新与其他所有内容的影响? 我有一个存储的过程,一次插入大约10,000行(从临时表中),每10k行大约需要90秒。这太慢了,因为它会导致其他sps超时。 我已经查看了执行计划,并且看到了INSERT CLUSTERED INDEX任务和FK查找中的所有INDEX SEEKS,但仍不能确定为什么要花这么长时间。没有触发器,但是表中确实有少数FKey(似乎已正确索引)。 这是一个SQL 2000数据库。

4
为什么OS身份验证被认为对Oracle数据库的安全性较差?
根据《Oracle数据库安全性指南》,Oracle将弃用OS身份验证 请注意,REMOTE_OS_AUTHENT参数在Oracle Database 11g第1版(11.1)中已弃用,并且保留该参数仅是为了向后兼容。 此外,大多数安全信息和工具都将 OS(外部)身份验证视为安全问题。我试图理解为什么会这样。我看到了操作系统身份验证的一些优点: 如果没有OS身份验证,则应用程序必须将密码存储在各种应用程序中,每个应用程序都具有自己的安全模型和漏洞。 域身份验证已经必须是安全的,因为如果不是这样,则数据库安全性只会减慢对数据库的访问,但不能阻止它。 与必须创建一个更安全的域密码的用户相比,创建一个更安全的域密码的用户可以创建的安全性更高,因为必须连接的不同数据库的数量会增加。

10
如何获得夏令时之前或之后的某个日期的UTC与当地时间之间的正确偏移量?
我目前使用以下方法从UTC日期时间获取本地日期时间: SET @offset = DateDiff(minute, GetUTCDate(), GetDate()) SET @localDateTime = DateAdd(minute, @offset, @utcDateTime) 我的问题是,如果夏令时发生在GetUTCDate()和之间@utcDateTime,那么@localDateTime最终会减少一个小时。 是否有简单的方法可以将utc转换为非当前日期的本地时间? 我正在使用SQL Server 2005

4
使用SQL CLR标量函数模拟HASHBYTES的可伸缩方法是什么?
作为ETL流程的一部分,我们将暂存中的行与报表数据库进行比较,以找出自从上次加载数据以来是否实际更改了任何列。 比较是基于表的唯一键和所有其他列的某种哈希值。我们目前使用HASHBYTES该SHA2_256算法,并且发现如果许多并发工作线程都在调用,则该算法无法在大型服务器上扩展HASHBYTES。 在96台核心服务器上进行测试时,以每秒哈希数衡量的吞吐量不会增加超过16个并发线程。我通过将并发MAXDOP 8查询数从1 更改为12进行测试。测试MAXDOP 1显示了相同的可伸缩性瓶颈。 作为一种解决方法,我想尝试一个SQL CLR解决方案。这是我尝试陈述要求的尝试: 该功能必须能够参与并行查询 函数必须是确定性的 该函数必须接受NVARCHAR或VARBINARY字符串的输入(所有相关列都串联在一起) 字符串的典型输入大小为100-20000个字符。20000不是最大值 哈希冲突的机会应大致等于或优于MD5算法。CHECKSUM对我们不起作用,因为有太多的碰撞。 该功能必须在大型服务器上很好地扩展(随着线程数量的增加,每个线程的吞吐量不应显着降低) 对于Application Reasons™,假定我无法保存报表的哈希值。这是一个不支持触发器或计算列的CCI(还有其他我不想讨论的问题)。 HASHBYTES使用SQL CLR函数进行仿真的可扩展方式是什么?我的目标可以表示为在大型服务器上每秒获得尽可能多的哈希,因此性能也很重要。我对CLR感到很糟糕,所以我不知道该如何完成。如果它激励任何人回答,我计划在可能的情况下尽快为这个问题添加赏金。下面是一个示例查询,它非常粗略地说明了用例: DROP TABLE IF EXISTS #CHANGED_IDS; SELECT stg.ID INTO #CHANGED_IDS FROM ( SELECT ID, CAST( HASHBYTES ('SHA2_256', CAST(FK1 AS NVARCHAR(19)) + CAST(FK2 AS NVARCHAR(19)) + CAST(FK3 AS NVARCHAR(19)) + CAST(FK4 AS NVARCHAR(19)) + …

4
如何找出谁删除了一些SQL Server数据
我的老板昨天从一个客户那里询问,询问他们如何找到谁删除了他们在SQL Server数据库中的某些数据(如果重要的话,这是速成版)。 我以为可以从事务日志中找到它(假设它没有被截断)-这正确吗?如果是这样,您实际上将如何找到这些信息?

1
全文索引维护准则
维护全文索引应考虑哪些准则? 我应该重新构建或重新组织全文目录(请参阅BOL)吗?什么是合理的维护节奏?可以使用什么启发式方法(类似于10%和30%的碎片阈值)来确定何时需要维护? (下面的所有内容只是有关此问题的详尽信息,并显示了我到目前为止的想法。) 额外信息:我的初步研究 有关b树索引维护的资源很多(例如,该问题,Ola Hallengren的脚本以及其他站点上有关该主题的大量博客文章)。但是,我发现这些资源都没有提供用于维护全文索引的建议或脚本。 有微软的文档是提到整理基表的B树索引,然后对全文目录执行REORGANIZE可以提高性能,但它并没有任何更具体的建议碰。 我也发现了这个问题,但它主要集中在变更跟踪(如何将对基础表的数据更新传播到全文索引中),而不是可以最大程度地提高索引效率的定期维护类型。 额外信息:基本性能测试 此SQL Fiddle包含可用于创建具有AUTO更改跟踪的全文本索引的代码,并在修改表中的数据时检查索引的大小和查询性能。当我在生产数据的副本(而不是小提琴中的人造数据)上运行脚本的逻辑时,以下是在每个数据修改步骤之后看到的结果的摘要: 即使此脚本中的update语句设计得相当不错,但这些数据似乎表明定期维护有很多好处。 额外信息:初步构想 我正在考虑创建每晚或每周的任务。看来此任务可以执行REBUILD或REORGANIZE。 因为全文索引可能非常大(数以千万计的行),所以我希望能够检测目录中的索引何时足够零散,以确保需要进行REBUILD / REORGANIZE。对于哪种启发式方法可能有意义,我还不清楚。

5
如何以超级用户身份输入Mongo或重置用户?
我在玩弄权限并将自己锁定在Mongo数据库之外。我很确定我是通过尝试显式添加对数据库的访问权限来完成此操作的,但是我改写了仅允许对数据库的权限的方法。因此,我实际上被锁定在Mongo数据库之外,如果我拥有添加用户特权,那么我阅读的所有内容都会告诉我如何创建超级用户。现在,我认为我没有任何拥有该特权的用户。有没有办法以所有访问权限进入数据库?我拥有服务器并具有root用户访问权限。
29 mongodb 

3
评估合理的缓冲池大小的确定方法是什么?
我试图提出一种理智的方法来了解max server memory (mb)设置是否合适(应该设置得更低还是更高,或者保持原样)。我知道max server memory (mb)应该始终足够低以为操作系统本身等留出空间。 我正在查看的环境有几百台服务器;我需要一个可靠的公式来确定缓冲池的当前大小是否合适,因为RAM是按分配给每个服务器的每GB的成本来计算的。整个环境已虚拟化,分配给VM的“物理” RAM可以轻松更改。 我现在正在查看一个特定的SQL Server实例,它的PLE为1,100,052秒,相当于12.7天(服务器已启动的时间)。该服务器的最大服务器内存设置为2560MB(2.5GB),其中实际仅提交了1380MB(1.3GB)。 我读过几个项目,包括一个由Jonathan Keheyias(职位),另一个由保罗·兰德尔(岗位),和其他几个人。Jonathan提倡监视每4GB缓冲池中的PLE在300以下,因为它太低了。对于上述SQL Server实例,300 * (2.5 / 4) = 187目标PLE确实非常低,低于300。此实例具有290GB的SQL Server数据(不包括日志文件),仅用于集成测试。假设在过去的12天代表该服务器的典型用法的,我想说的max server memory (mb)设置可能会降低。 在规模的另一端,我有另一台集成测试服务器,其PLE为294,其max server memory (mb)设置仅为1GB。该服务器仅具有224MB的SQL Server数据(不包括日志),并且正在运行某些BizFlow数据库。该服务器可能会受益于更高的max server memory (mb)设置。 我正在考虑为可能分配过多内存的目标提供一个良好的起点,其中包括: SELECT RamMB = physical_memory_in_bytes / 1048576 , BufferPoolCommittedMB = bpool_committed * 8192E0 / 1048576 , BufferPoolCommitTargetMB = …

4
EF Code First对所有字符串使用nvarchar(max)。这会损害查询性能吗?
我有一些使用“实体框架代码优先”创建的数据库;应用程序正常运行,总的来说,我对Code First的功能感到非常满意。根据需要,我首先是一名程序员,然后是DBA。我正在阅读有关DataAttributes的内容,以在C#中进一步描述我想要数据库做什么;我的问题是:将这些nvarchar(max)字符串放在表中会给我带来什么惩罚(请参见下面的示例)? 此特定表中有几列;在C#中,它们的定义如下: [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; set; } public string Message { get; set; } public string Source { get; set; } public DateTime Generated { get; set; } public DateTime Written { get; set; } 我希望根据名称,来源,生成的和书面查询和/或排序。我希望“名称和源”的长度为0至50个字符,偶尔最多为150个字符。我希望此表的开头很小(<100k行),但随着时间的推移会显着增长(> 1m行)。显然,消息可能大小不一,可能不会被查询。 我想知道,是否将我的“名称”和“源”列定义为nvarchar(max)当我从未期望它们大于150个字符时对性能产生影响?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.