我可能心胸狭窄,但是如果我创建了一个外键约束并且一行被更新或删除,如果子表的列被设置为 NULL,我将失去该连接。
故意保留这些孤立行的目的是什么?
检查我的 SQL Server 日志,我看到几个这样的条目:
Date: 08-11-2011 11:40:42
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:42
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Date: 08-11-2011 11:40:41
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:41
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Run Code Online (Sandbox Code Playgroud)
等等..这可能是中国人对我的 SQL Server 的攻击吗???!我在 ip-lookup.net 上查找了 IP 地址,它说它是中文的。 …
我们的 QA 环境的所有数据库名称都带有“test”后缀。例如,生产中的 dbname1 在 QA 中会有一个对应的 dbname1test。(这主要是为了防止 prod/qa 配置混淆)。
有一些表我想将实际生产表复制到 QA 中。我不确定我会如何告诉它说“从那里的 dbname1 复制到那里的 dbname1test”
这甚至可能吗?
背景
我正在为大约 4 名程序员和 4 名设计师的小型网络团队创建一个新的开发流程,该团队在未来具有明显的发展潜力。我们的产品是一个中央应用程序,它为我们设计和托管的客户网站提供支持。
以前,我们都通过 FTP 在开发服务器上工作,使用单个开发数据库。这“工作” *了一段时间,但我们正在进入一个新的发展方向,所以它是成熟的时间我们的进程。
我们使用 Percona Server 5.5,但这应该是数据库不可知的,以保持低成本的想法。
目标:
我正在考虑为数据库开发创建持续集成 (CI) 流程,并考虑到以下几点:
- 开发人员拥有数据的本地副本来运行开发代码
- 能够将数据库结构回滚到以前的变更集
- 能够将新功能架构更改与架构设计修复更改分开
- 能够在本地修改数据库结构进行测试
初始概念
我已经使用 SVN 和 LiquiBase 在下面勾勒了一个过程,尽管它完全删除了#4.
- 从主干创建一个“开发”分支
- 中央“开发”数据库服务器从“开发”分支运行
- 本地开发者被设置为开发分支的奴隶(
#1如上提供)- liquibase 变更集定期提交到开发分支,该分支执行提交后挂钩以更新中央开发数据库(这将渗透到作为该开发服务器的从属运行的本地机器)(liquibase
#2上面提供)- 当功能或架构修复准备好进行 QA 时,DBA (me) 会将相应的更改从开发分支合并到主干中。此行为将创建一个 sql 脚本以应用于临时数据库服务器。
- 临时服务器应该反映 TRUNK,它应该具有与生产相同的结构,加上 QA 中的更改
- 在临时服务器上执行 sql 脚本后,对更改进行一些 QA。
- 如果一切看起来不错,标记结构。这将生成由 DBA 在生产中手动运行的 .sql 脚本(如果需要,可用于非高峰时间)
这个过程要求所有开发人员都运行同一个“开发”分支,这意味着在任何给定时间只有一个版本的数据库模式(不确定我是否想要这个)。
这也意味着对架构的任何更改都无法在本地进行测试,如果做得不好,可能会影响其他开发人员。在我们的环境中,开发人员可能会添加新表,但很少修改现有结构。作为 DBA,设计修复由我完成。但是无法在本地测试修复是我最大的问题。
如何调整上述流程以允许本地开发,同时仍保持相对最新的数据副本(如我提议的流程中的复制所提供的那样)?我不要求数据是最新的,甚至是最后一周。
我正在考虑为我的数据库设置主从复制。从服务器将用于冗余和可能的报告服务器。但是,我遇到的最大问题之一是我们的数据中心已经用尽了电源。因此,添加另一台物理服务器不是一种选择。
就 CPU 而言,我们现有的数据库服务器的利用率相当低(四核上的平均负载从未真正超过 1)。所以主要的想法是放入一些新驱动器并将内存加倍(从 8GB 到 16),并在同一台物理机器上运行第二个 mysql 实例。每个实例都有单独的数据库磁盘。
这个想法有什么问题吗?
编辑(更多信息):我(幸运的是)从来没有发生过任何足以关闭服务器的事情,但我正在努力提前计划。我们当然有可以从中恢复的每晚备份。但我认为,如果主服务器的驱动器出现故障(如果整台机器出现故障,显然不会),将冗余数据放在单独的磁盘上会提供更快的解决方案。
至于报告方面,我们要报告的任何表都是 MyIsam。因此,在正在写入的同一表上进行昂贵的读取可能会使服务器陷入困境。我的假设是,只要我们在主服务器上投入足够的 RAM(因为 cpu 负载还不是问题),有一个要报告的从服务器就不会影响主服务器。
在阅读我的 70-433 试卷时,我想到了一些我认为不起作用的东西,但我相信它确实有效。这段话是这样写的:
该列还必须标记为PERSISTED,这意味着 SQL Server 将计算列的表达式的结果物理存储在数据行中,而不是每次在查询中引用时计算它。
由此我明白了两件事:
读完后,我觉得这有点奇怪,因为我在以前的项目中设法在非持久化列上创建了索引。
如何为未持久化的东西创建索引,从长远来看这是否有害?
为了证明这一点,我运行了以下 SQL 语句:
CREATE TABLE testTable
(
ID INT IDENTITY(1,1) PRIMARY KEY,
telephone VARCHAR(14),
c_areaCode AS (SUBSTRING(telephone,0,5)),
cp_areaCode AS (SUBSTRING(telephone,0,5)) PERSISTED
)
INSERT INTO testTable VALUES('09823 000000');
INSERT INTO testTable VALUES('09824 000000');
INSERT INTO testTable VALUES('09825 000000');
CREATE NONCLUSTERED INDEX IX_NotPersisted ON testTable(c_areaCode);
CREATE NONCLUSTERED INDEX IX_Persisted ON testTable(cp_areaCode);
Run Code Online (Sandbox Code Playgroud)
然后运行以下查询:
DBCC FREEPROCCACHE
DBCC FREESYSTEMCACHE('ALL');
DBCC DROPCLEANBUFFERS
GO
SELECT cp_areaCode FROM testTable;
GO
SELECT c_areaCode …Run Code Online (Sandbox Code Playgroud) 当我使用错误的密码连接到mysql服务器,并且测试计数结束时max_connect_errors,我发现Aborted_connects我测试的计数也出现了,但主机仍然没有被阻塞。
那么Aborted_connects超过max_connect_errorsthen host_name 是否被阻止?
我在学校学到的只是将数据保存到表中的 SQL。现在我正在研究一个数据存储在 XML 文件中的项目。此外,每个 XML 都包含对可视文件 (JPEG) 的引用。
XML 本身包含一千多个坐标点,以及有关数据的附加信息。
在我看来,将这些信息存储在表格中是没有意义的。此外,我也无法使用 SQL 存储 JPEG 文件。
什么是合适的解决方案,或者我这边的推理是否有错误?
如您所见,我对数据库很陌生。因此,欢迎任何建设性的建议、链接和建议。
我正在为一个我想在夏天开始的新项目研究各种数据库类型和 DBMS。
我已经在 MySQL 和 postgreSQL 中构建了系统,现在我想扩展我在数据库方面的知识和经验。
我的项目将是一种社交网络/聚合知识的东西。(还没有开发出一个术语来描述它)。
我一直在看:
系统要求:
我想知道您是否可以指出我应该研究的任何其他数据库系统。
我也看过对象关系数据库,我非常喜欢它们与 PHP 对象(PDO)一起工作的想法,但是它们的性能似乎有点差。
鉴于这里将有 DBA,对您操作过的这些系统的任何反馈都将不胜感激。
谢谢
mysql ×4
replication ×2
sql-server ×2
development ×1
foreign-key ×1
myisam ×1
nosql ×1
null ×1
performance ×1
scalability ×1
trigger ×1
xml ×1