数据库管理员

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

2
为什么IDENTITY_INSERT ON一次只能在一个表上使用?
在这种情况下,一次只能在一个数据库表中将IDENTITY_INSERT设置为ON,但是为什么呢?由于IDENTITY列不是全局唯一的,所以我无法想到可能由于将标识同时插入一个以上的表而引起的任何危险情况(至少没有比使用IDENTITY INSERT进行伪造更危险)。 很少使用IDENTITY INSERT,但是硬限制的原因是什么?
20 sql-server 

1
列存储索引的结构是什么?
代号Denali为SQL Server 2012的新功能之一是Columnstore索引。 我对常规的旧行存储索引了解很多,例如b树结构,叶级页面和b树页面之间的存储差异,所包含字段的影响,优化使用它们,键顺序等。 我很难获得有关columnstore索引内部的任何良好信息。 结构如何? 有树吗?还有其他结构吗? 数据如何组织? 哪种类型的特定运算符最适合使用它? 使用其他反图案时要避免使用它们? 我可以找到的很多关于它们的内容基本上与“正常”索引完全相反,即,没有键的顺序,没有包含的字段,仅是非聚集的。 任何见解都表示赞赏。


7
DBA是否需要了解除SQL之外的其他系统语言编程方法?
除了“仅SQL”外,数据库管理员还需要在多大程度上了解系统或应用程序级别的编程语言(例如.NET或PHP)? 就此问题而言,由于该问题与SQL领域之外的台式机或服务器语言有关,因此未考虑针对此答案的SQL标准特定版本(SQL ANSI 86,SQL ISO 87,SQL:2008)。

2
如何仅捕获和处理特定的Oracle异常?
从这个和这个我猜想,对于ORA-00955没有预定义的命名系统异常。 如何重写以下内容以仅捕获错误ORA-00955? begin EXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1'; exception when OTHERS then Null; end; BTW是否有仅通过提供错误代码来捕获错误的语法?
20 oracle  exception 



1
如何在SQL Server DDL中使用事务?
我有一个登录表,所有插入都通过一个存储过程完成。 CREATE TABLE dbo.LogTable( LogRefnr int IDENTITY(1, 1) NOT NULL, LogQuery varchar(255) NOT NULL, LogTime datetime NOT NULL, logQueryDuration int NULL, LogSessionID int NULL, CONSTRAINT PK_Log PRIMARY KEY CLUSTERED (LogRefnr) ) go Create procedure DBO.LogInsert ( @Query varchar(255), @time datetime, @duration int, @SessinID int) as begin Insert into LogTable ( …

4
为什么要先对NULL排序?
为什么当我们在列中有一个NULL值并按值升序排序时,这些NULL首先排序? select 1 as test union all select 2 union all select NULL union all select 3 union all select 4 order by test 结果是 NULL 1 2 3 4 我一直认为NULL表示“不确定”或可能的“未知”。如果是这样,那么由于该值可能大于所有其他值,它们是否会排在最后?(或者这是某处的排序选项?) 我使用的是SQL Server 2008R2,但我怀疑在所有SQL Server以及所有RDBMS中都是如此。

5
空列会占用表中的空间吗?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我有从非常基本的信息保存的表。只是一个标题和一些日期字段。有一个称为注释的字段,该字段为varchar(4000),大多数情况下,我们将其保留为空白,但有时会在此处输入大量数据。这真的是一个糟糕的设计吗?还是这只是效率低下? 我认为为此列创建一个单独的表会更好。 注意:这是sql server 2008

6
是否有任何好的免费工具来管理PostgreSQL数据库?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 以前,我曾使用phpmyadmin来管理MySQL数据库,但现在我想管理PostgreSQL数据库。PostgreSQL数据库位于服务器上,而不是网络服务器上,因此我不使用PHP。 是否有任何好的免费工具来管理PostgreSQL数据库? 我已经尝试过pgAdmin III,但是与我以前使用的phpmyadmin相比,它不是一个直观的应用程序。PostgreSQL DBA通常使用什么?他们使用像pgAdmin III这样的图形工具还是主要是命令行工具?

2
索引与分区
为什么不能仅通过索引来实现性能改进,所以其他技术(如表分区)变得必要吗?这个问题仅与性能有关,当然可以将不同的分区放入不同的表空间中,这还会产生其他索引无法实现的效果。 或者换句话说,仅在性能方面是明智的:索引是否可以实现与表分区相同的性能改进?

5
命名表和视图时应遵循什么标准?
命名表和视图时应遵循什么标准?例如,将tbl_之类的东西放在表名的开头是个好主意吗?是否应该以ct_,lut_或codes_之类的方式指定代码/查找表?还有其他的做/不做的事情吗? 我使用的是MS SQL Server,并且有许多数据库和许多表,因此最好将我们作为标准并带有一些支持性的理由使用。

1
如何获得MAX行
在SQL Server中,我总是很难获得数据集的最大行数,我正在寻找一种方法列表,以获取有关性能和可维护性的一些指导来检索最大行数。 样品表: DECLARE @Test TABLE (ID INT IDENTITY(1,1), name VARCHAR(50), dateOfBirth DATETIME, TaxNumber varchar(10)) INSERT INTO @Test (name, dateOfBirth, TaxNumber) SELECT 'Fred', convert(datetime, '25/01/1976', 103), '123' UNION ALL SELECT 'Bob', convert(datetime, '03/03/1976', 103), '234' UNION ALL SELECT 'Jane', convert(datetime, '13/06/1996', 103), '345' UNION ALL SELECT 'Fred', convert(datetime, '14/02/1982', 103), …
20 sql-server 

2
重建事务日志
我们有一个非常大的数据库(〜6TB),该数据库的事务日志文件已删除(在SQL Server关闭的同时,我们已经尝试过: 分离并重新附加数据库;和 删除事务日志文件 ...但是到目前为止没有任何效果。 我们目前正在运行: ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>') ...但是鉴于数据库的大小,这可能需要几天才能完成。 问题 上面的命令与下面的命令有区别吗? DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) 我们应该REPAIR_ALLOW_DATA_LOSS代替执行吗? 值得注意的是,数据是从其他来源派生的,因此可以重建数据库,但是我们怀疑,与重新插入所有数据相比,修复数据库要快得多。 更新资料 对于那些得分较高的用户:该ALTER DATABASE/REBUILD LOG命令在36小时后完成并报告: 警告:数据库“ dbname”的日志已重建。事务一致性已丢失。RESTORE链已损坏,并且服务器不再在先前的日志文件上具有上下文,因此您将需要知道它们是什么。 您应该运行DBCC CHECKDB来验证物理一致性。数据库已置于仅dbo模式。当准备好使数据库可用时,您将需要重置数据库选项并删除所有额外的日志文件。 然后,我们运行了一个DBCC CHECKDB(花了大约13个小时),这是成功的。可以说,我们都已经了解了数据库备份的重要性(并授予项目经理对服务器的访问权限...)。

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.