数据库管理员

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

8
生成测试数据的大型数据集的工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 很多时候,当试图提出一种有效的数据库设计时,最佳的做法是建立两个示例数据库,将它们填充数据,并对它们运行一些查询,以查看哪个数据库性能更好。 有没有一种工具可以相对快速地生成(理想情况下直接进入数据库)大型(约10,000条记录)测试数据集?我正在寻找至少与MySQL兼容的产品。

1
如何在SQL Azure上更改现有的主键?
我想修改SQL Azure表上的现有主键。 它当前有一个列,我想添加另一列。 现在,在SQL Server 2008上,这简直是小菜一碟,只是在SSMS里做了。做完了 如果我从SQL Server编写PK,这就是它的样子: ALTER TABLE [dbo].[Friend] ADD CONSTRAINT [PK_Friend] PRIMARY KEY CLUSTERED ( [UserId] ASC, [Id] ASC ) 但是,在SQL Azure上,当我尝试执行上述操作时,它当然会失败: Table 'Friend' already has a primary key defined on it. 很好,因此我尝试删除密钥: Tables without a clustered index are not supported in this version of SQL Server. …

4
在许多视图上修改DEFINER
更新后备份我的数据库时遇到问题。我一直在寻找系统原因,以找出原因。我运行的一个查询返回了此结果。 Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES 经过调查后,这些视图的定义者似乎是已从系统中清除的旧开发者帐户。带有此问题的数据库和视图很少使用,并且大多数用于存档目的。 带有定义器的视图大约不存在40个。是否有一种简单的方法可以一次将定义器更改为其他帐户?有没有一种方法可以使mysqldump简单地将所有视图转储到文件中,以便我可以编辑该文件并重新创建视图?
25 mysql  view 

3
Windows 2008R2上SQL 2008R2的建议页面文件大小
此Microsoft文章- 如何确定64位版本的Windows Server 2008和/或Windows 2008 R2的适当页面文件大小,提供了计算64位Windows 2008和Windows 2008R2的页面文件大小的指南。毫无疑问,这对于通用服务器来说效果很好。我想知道针对在Windows 2008 / R2 64位上运行的SQL Server 2008R2的指导是什么? 我假设我们希望内存中的数据少到页面文件,否则SQL可能两次在磁盘上打数据。SQL Server甚至允许内存中的数据访问页面文件吗?我已经通过SQL Server 2008 R2联机丛书寻求指导,但是还没有提到页面文件的使用。 这是一个潜在的使用场景:给具有64GB RAM的物理服务器,整个64GB RAM是否需要页面文件?我们是否应该为96GB的页面文件做好准备?对于单个文件,这似乎有点过分。我知道传统的看法是Windows会将页面文件耦合到内存,以尝试在RAM上更容易地换出应用程序,但这是真的吗?小于64GB的页面文件会在此处影响性能吗?

6
当不存在sysadmin帐户时,如何在SQL Server 2008中向用户添加sysadmin
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我有一个正在运行的SQL Server 2008实例。不幸的是,在测试过程中,我取消了登录名的sysadmin权限,但现在无法读取(因为我没有sysadmin权限)。 除SA外,该实例没有其他sysadmin帐户。 我仅针对Windows身份验证进行了设置,因此将注册表中的LoginMode修改为2,以便可以使用Sql身份验证以SA身份登录。确实确实将登录模式设置为“混合”,但是默认情况下SA用户被禁用,由于我没有sysadmin权限,因此我无法重新启用它。 如何启用SA登录,以便进入系统管理员并将其重新分配给我的普通帐户?是否也有一个注册表设置,或者它存储在master数据库中?

3
正确使用查询表
我在弄清楚如何为何时何地在数据库中使用查找表放置良好的边界时遇到了麻烦。我看过的大多数资料都说我永远不会有太多,但是在某些时候,似乎数据库会被分解成很多部分,尽管它可能是有效的,但不再可管理。这是我正在使用的东西的综合示例: 假设我有一个名为“雇员”的表: ID LName FName Gender Position 1 Doe John Male Manager 2 Doe Jane Female Sales 3 Smith John Male Sales 假装数据更加复杂并且包含数百行。我看到可以移至查找表的最明显的东西是位置。我可以创建一个名为Positions的表,并将Positions表中的外键粘贴到Position列中的Employees表中。 ID Position 1 Manager 2 Sales 但是,在信息变得难以管理之前,我可以继续将信息分解为较小的查找表吗?我可以创建一个性别表,并在单独的查找表中将1对应于Male,将2对应于Female。我什至可以将LNames和FNames放入表中。所有“ John”条目都被外键1替换,该外键指向FName表,该表说ID为1对应于John。但是,如果您像这样在这个兔子洞中走得太远,那么Employees表就会变成一堆外键: ID LName FName Gender Position 1 1 1 1 1 2 1 2 2 2 3 2 1 1 …

3
我应该为哪种多语言网站选择哪种排序规则?
归类对查询速度有影响吗?表格的大小会根据排序规则进行更改吗? 如果我想建立一个必须支持所有可能语言的网站(以Google为例),那么推荐的整理方法是? 我将需要存储诸如之类的字符日本語,我在网站上的搜索将必须返回something以作为sóméthíng输入,并且它也必须不区分大小写。 我怎么知道哪个是最好的选择?哪种排序规则更适合这种情况?

3
如何取消SQL Server中的应用锁定请求?
该sp_getapplock存储过程有以下返回值: 0:成功同步授予锁。 1:在等待释放其他不兼容的锁之后,已成功授予该锁。 -1:锁定请求超时。 -2:锁定请求被取消。 -3:锁定请求被选为死锁受害者。 -999:表示参数验证或其他调用错误。 我正在编写一个用于sp_getapplock在数据访问层中调用的包装器,我想知道在什么情况下可以返回-2,以便抛出描述性且有用的异常。显而易见,返回值-1和-3意味着什么,我可以轻松创建导致返回这些值的测试条件。我如何设法获得-2的返回值?

2
LC_CTYPE对PostgreSQL数据库有什么影响?
因此,我几乎没有使用PostgreSQL的Debian服务器。从历史上看,这些服务器和PostgreSQL是使用Latin 9字符集进行本地化的,那时还不错。现在,我们必须处理波兰语,希腊语或中文这样的问题,因此对其进行更改已成为一个日益严重的问题。 当我尝试创建UTF8数据库时,收到消息: 错误:编码UTF8与语言环境fr_FR不匹配详细信息:所选的LC_CTYPE设置需要编码LATIN9。 很少有几次我和我的老朋友Google进行过相关的研究,而我发现的过程过于复杂,例如更新Debian LANG,使用正确的字符集重新编译PostgreSQL,编辑所有LC_系统变量和其他晦涩的解决方案。所以暂时,我们将这个问题搁置一旁。 最近,它又回来了,希腊人想要的东西,而拉丁9人不想。当我再次调查这个问题时,一位同事走近我说:“不,很简单,看。” 他没有编辑任何内容,没有做魔术,他只是执行以下SQL查询: CREATE DATABASE my_utf8_db WITH ENCODING='UTF8' OWNER=admin TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1 TABLESPACE=pg_default; 而且效果很好。 我实际上一无所知LC_CTYPE='C',我很惊讶没有在Google的第一个解决方案上甚至在Stack Overflow上都没有使用它。我环顾四周,只在PostgreSQL文档中找到一个提及。 当LC_CTYPE为C或POSIX时,允许使用任何字符集,但是对于LC_CTYPE的其他设置,只有一个字符集可以正常工作。由于initdb冻结了LC_CTYPE设置,因此在集群的不同数据库中使用不同编码的明显灵活性要比实际更具理论性,除非您选择C或POSIX语言环境(从而禁用任何实际语言环境感知)。 因此,让我感到奇怪的是,这太容易了,太完美了,缺点是什么?而且,我很难找到答案。所以我在这里发布: tl; dr:在特定的本地化环境中使用的缺点是什么LC_CTYPE='C'?这样做不好吗?我应该打破什么?

2
适用于MySQL的事务性DDL工作流程
我有点惊讶地发现,DDL语句(alter table,create index等)隐含在MySQL提交当前事务。来自MS SQL Server,能够在本地事务中进行数据库更改(然后被回滚)的能力是我工作流程的重要组成部分。对于连续集成,如果由于某种原因导致迁移失败,则使用回滚,以便至少我们不会使数据库处于半迁移状态。 人们在将MySQL与迁移和持续集成结合使用时如何解决这两个问题?

1
如何在PostgreSQL上回收磁盘空间?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 5年前。 我在本地安装了9.1数据库,只有几个表具有cca。300 mio记录,数据库增长到约20 GB。之后,我发出delete from命令从中删除所有记录(我应该使用过truncate,但我不知道)。因此,我对数据库进行了充分的清理以回收磁盘空间,但这无济于事。我的问题看起来与此相同,但是没有提供解决方案。我已经检查了此线程和有关“恢复磁盘空间”的文档,但仍然找不到解决方案。我使用此代码来获取所有表的大小 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY …

4
MySQL中继日志已损坏,如何解决?尝试过但失败了
当计算机突然关闭时,MySQL v5.1.61中继已损坏。我试图修复它,但是没有用。 - 我如何解决它?我做错什么了吗? 据我所知,损坏的MySQL中继日志很容易修复: change master to master_log_file='<Relay_Master_Log_File>', master_log_pos=<Exec_Master_Log_Pos>; 其中Relay_Master_Log_File和按Exec_Master_Log_Pos以下方式列出: mysql> show slave status; 但是,当我这样做时change master status ...,出现了主键冲突错误。那怎么可能?上面的过程不正确,还是缺少一些+1? (目前,我只是将--master-data mysqldump从主服务器重新导入到从服务器,这解决了问题。但是,将来,这样做可能不合适。) 以下是有关我的特定问题的详细信息: mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: the-master-host Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000021 Read_Master_Log_Pos: 33639968 …

3
与替代整数键相比,自然键在SQL Server中提供的性能更高还是更低?
我是代理键的粉丝。我的发现存在确认偏倚的风险。 我在这里和http://stackoverflow.com上看到的许多问题都使用自然键而不是基于IDENTITY()值的替代键。 我在计算机系统方面的背景告诉我,对整数执行任何比较运算都比比较字符串快。 该评论使我质疑我的信念,因此我认为我将创建一个系统来研究我的论点,即在SQL Server中用作键的整数比字符串快。 由于小型数据集之间的区别可能很小,因此我立即想到了两个表的设置,其中主表具有1,000,000行,而辅助表在主表中的每一行有10行,总共有10,000,000行。辅助表。我的测试的前提是创建两组这样的表,一组使用自然键,一组使用整数键,然后对一个简单的查询运行计时测试,例如: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Key = Table2.Key; 以下是我作为测试平台创建的代码: USE Master; IF (SELECT COUNT(database_id) FROM sys.databases d WHERE d.name = 'NaturalKeyTest') = 1 BEGIN ALTER DATABASE NaturalKeyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE NaturalKeyTest; END GO CREATE DATABASE NaturalKeyTest ON …

2
更改表检查约束
在SQL Server的对象资源管理器中,选择并编写外键约束脚本时,将生成以下代码。 USE [MyTestDatabase] GO ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID]) REFERENCES [dbo].[T1] ([T1ID]) GO ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1] GO 最后一条语句“ ALTER TABLE CHECK CONSTRAINT”的目的是什么?是否运行它似乎并不重要。它不会对现有的不良数据失败,也不会更改对新数据强制实施约束的情况。 谢谢!

4
是否为不同的产品类型创建单独的表?
我正在设计数据库,并且对我的最初设计决策有第二个想法... 产品类型如下...型号,零件,替换零件套件和选件。 选项A(第一种设计):我计划为上述产品类型提供单独的表格。我想说每个表中大约75%的字段是相同的。 由于需要在每个产品类型之间创建关联,因此我将它们创建为单独的表格。例如,一个模型可以有很多选项,而一个选项可以有很多模型。一个选项也可以有很多部分,而一个部分可以有很多选择...等等。 选项B:除了创建单独的表格外,我还可以创建一个名为Product的表格,其中包含模型,零件,备件套件和选件。我可以使用一个称为类型的字段来区分模型,选项等。我认为不利的一面是,某些产品类型永远不会使用多个字段(留空)。我猜这就是“最佳实践”发挥作用的地方。 选项B将大大降低数据库设计的复杂性。在提取查询数据时,我也不必担心引用一堆表...

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.