数据库管理员

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

9
数据库为只读或具有只读文件,因此无法升级。使数据库或文件可写,然后重新运行恢复
我已经收到一个数据库文件,有关加载该文件的说明是安装SQL Server 2005,然后使用SQL Server Management Studio将其附加。 安装完所有内容后,我尝试附加MDF文件,但是它告诉我: 文件“ D:{folderName} {filename} .LDF”的目录查找失败,并出现操作系统错误21(未找到错误) LDF文件未随数据库一起提供,因此大概应该自动生成它。 现在,D驱动器是我的CD驱动器所在的位置,因此它无法在其中找到任何内容。尝试在此创建任何东西也不会有任何运气。 为什么要尝试在特定路径下查找日志文件?为什么不在数据库文件所在的位置? 如何附加此数据库? 我意识到,当我选择要附加的数据库时,“数据库详细信息”下将出现三个条目。MDF,NDF和LDF。LDF的“当前文件路径”指向上面的D驱动器路径,因此我将其删除。 这次,当我点击“确定”时,我得到了另一个错误消息: 数据库为只读或具有只读文件,因此无法升级。 使数据库或文件可写,然后重新运行恢复。 文件激活失败。物理名称D:{文件夹} {文件} .LDF可能不正确。 新的日志文件“ ...”已创建。(Microsoft SQL Server,错误:3415) 因此,现在它在与数据库文件相同的文件夹中创建一个新的日志文件,这很好,但是似乎存在安全问题。 附加信息: 这些说明要求我使用登录名“ sa”,它似乎是sysadmin帐户。我使用该登录名连接到我的SQL Server实例。 我检查了它不是只读的文件属性。该目录也不是只读的。允许所有ACL。 我无法附加数据库。当我尝试附加它时,它会引发一条错误消息“附加数据库失败”。 关闭SSMS并以管理员身份重新打开它没有影响。 select SERVERPROPERTY('ProductVersion')返回9.00.4035.00。数据库中还有一个名为“ dbdata.ini”的文件,该文件的内容为“ IsSql2000 = 1”,因此大概是要在SQL Server 2000中加载的。我看看是否可以在2000年使用它。

1
使用CTE INSERT的结果进行插入以提供唯一的ID值
我正在写一份工作,将数据从旧设计转换为新设计。在此过程中,我需要从插入中获取ID到单独的表中,并在插入目标表中使用它,如下所示: CREATE TABLE t1 { t1_id BIGSERIAL, col1 VARCHAR }; CREATE TABLE t2 { t2_id BIGSERIAL, col2 VARCHAR, -- renamed from col1 to avoid confusion t1_id BIGINT REFERENCES t1.t1_id }; 我定义了与以下形式匹配的SQL: WITH ins AS ( INSERT INTO t1 (t1_id) VALUES (DEFAULT) RETURNING t1_id ) INSERT INTO t2 (col1, t1_id) SELECT …

3
SQL Server错误“对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问”的帮助
因此,我们遇到了一个有趣的问题,即用户试图在SQL Server 2008 R2中查询视图时收到以下错误: 消息7415,级别16,状态1,行1对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问已被拒绝。您必须通过链接服务器访问此提供程序。 研究此问题后,我发现了很多文章,列出了对OPENROWSET参数进行更改,注册表值更改,AdHoc DI分布式查询等的内容。(链接到下面的文章) http://www.johnsoer.com/blog/?p=538 http://www.remotedbaexperts.com/Blog/dba_tips/2010/09/ad-hoc-access-to-ole-db-provider-microsoft-ace-oledb-12-0-has-been-denied/ 按照上述链接中的步骤操作后,我们仍然会收到错误消息。 需要注意的是,当我们创建一个测试帐户并给它一个sa时-它运行得很好。我的具有管理员访问权限的同事也可以毫无问题地运行查询。 该查询是从托管该实例的服务器的本地excel文件中获取的。 有人知道2008年有其他修复程序吗?

1
频繁的“随机” SQL Server连接超时
在过去的几天中,我们的客户一直在间歇性地与我们的数据库服务器建立连接超时。 同一页面上的多次Ajax调用多次连接到服务器,成功与失败混合在一起,有时特定的网站用户遇到连接问题,而其他用户则来自同一站点。 我不确定问题是否出在数据库或服务器本身上,但是我们可能在同一服务器上存在与其他数据库的连接问题。 该服务器是运行Windows Server 2008 RC的Amazon Cloud VPC,SQL Server的版本是SQL Server 2008 R2。如果需要,我可以提供更多信息。 有人可以给我任何有关如何调试它的提示吗?也许有几种方法可以测试连接? 非常感谢。

1
为什么我创建的基于函数的索引会降低成本,但不会出现在解释计划明细表中?
抱歉,列/表的名称很糟糕,但是由于这是一个工作项目,因此我想确保可以问清楚。我只是希望至少了解为什么我没有看到我的功能索引被使用,所以我在生产环境中添加此索引感觉更好。 该查询使用的是我创建的视图,该视图具有许多不同的列,并带有执行以下操作的where子句: .... AND e.sysid = NVL(wi.ALPHAid, -999) AND NVL(wi.ALPHAid, -999) <> -999 AND NVL(wi.BRAVOid, -999) = -999 AND NVL(wi.CHARLIEid, -999) = -999 ... 据我了解,如果您通过函数传递列,而需要创建基于函数的索引,则Oracle无法使用索引。因此,在创建索引之前,我需要在解释计划中获得以下费用: 计划哈希值:1233409744 ------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | …
8 oracle  index  explain 

2
MySQL不释放内存
在对它执行任何大的插入或选择语句之后,MySQL似乎想将整个表保留在缓存中(表大小=〜20GB)。现在我的innodb缓冲池是20GB。总内存为32GB。我将提供一些内存使用情况以及innodb状态的输出以及mysqltuner的输出。过去几天一直让我发疯。请帮忙!感谢您提供任何反馈意见,如果您需要更多信息,请告诉我。 同样,执行“刷新表”只会关闭并在内存中重新打开它们。至少我认为这是正在发生的事情。这是我执行一堆插入操作之前innodb当前的内存状态: ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 21978152960; in additional pool allocated 0 Dictionary memory allocated 6006471 Buffer pool size 1310719 Free buffers 347984 Database pages 936740 Old database pages 345808 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single …
8 mysql  innodb  memory 



1
仅给出字段名称,如何访问NEW或OLD字段?
我正在写一个验证触发器。触发器必须验证数组的总和等于另一个字段。由于我有很多这种验证的实例,因此我想编写一个过程并创建多个触发器,每个触发器都有一组不同的要检查的字段。 例如,我具有以下架构: CREATE TABLE daily_reports( start_on date , show_id uuid , primary key(start_on, show_id) -- _graph are hourly values, while _count is total for the report , impressions_count bigint not null , impressions_graph bigint[] not null -- interactions_count, interactions_graph -- twitter_interactions_count, twitter_interactions_graph ); 验证必须确认impressions_count = sum(impressions_graph)。 我被卡住是因为我不知道如何NEW从plpgsql中动态访问字段: CREATE FUNCTION validate_sum_of_array_equals_other() …

1
将XML转换为MySQL表
我有一个采用以下格式的大XML文件,我需要将此文件转换为MySQL表。请让我知道我该怎么做? ~~~~~~~~~~~ <host starttime="1392325468" endtime="1392325486"><status state="up" reason="user-set"/> <address addr="192.168.0.2" addrtype="ipv4"/> <hostnames> </hostnames> <ports><extraports state="filtered" count="2"> <extrareasons reason="no-responses" count="2"/> </extraports> <port protocol="udp" portid="22"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="ssh" method="table" conf="3"/></port> <port protocol="udp" portid="123"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="ntp" method="table" conf="3"/></port> </ports> </host> ~~~~~~~~~~~
8 mysql  xml 



2
SQL Server性能:PREEMPTIVE_OS_DELETESECURITYCONTEXT主导等待类型
我昨天接到一个客户的电话,该客户抱怨他们的SQL Server上的CPU使用率过高。我们正在使用SQL Server 2012 64位SE。服务器正在运行Windows Server 2008 R2 Standard,2.20 GHz Intel Xeon(4核),16 GB RAM。 在确定罪魁祸首实际上是SQL Server之后,我在这里使用DMV查询在顶部等待实例。前两个等待是:(1)PREEMPTIVE_OS_DELETESECURITYCONTEXT和(2)SOS_SCHEDULER_YIELD。 编辑:这是“最等待查询”的结果(尽管有人违反了我的意愿今天早晨重新启动了服务器): 我们进行了大量的计算/转换,所以我可以理解SOS_SCHEDULER_YIELD。但是,我很好奇PREEMPTIVE_OS_DELETESECURITYCONTEXT等待类型以及为什么它可能是最高的。 最好的说明/讨论,我可以找到这个等待类型,可以发现在这里。它提到: PREEMPTIVE_OS_等待类型是离开数据库引擎的调用,通常是对Win32 API的调用,它们正在SQL Server外部执行代码以执行各种任务。在这种情况下,它将删除以前用于远程资源访问的安全上下文。相关的API实际上被命名为DeleteSecurityContext() 据我所知,我们没有任何外部资源,例如链接服务器或文件表。而且,我们不进行任何模拟操作,等等。备份是否可能导致备份激增或域控制器出现故障? 到底什么会导致这成为主要的等待类型?如何进一步跟踪此等待类型? 编辑2:我检查了Windows安全日志的内容。我看到了一些可能感兴趣的条目,但不确定这些是否正常: Special privileges assigned to new logon. Subject: Security ID: NT SERVICE\MSSQLServerOLAPService Account Name: MSSQLServerOLAPService Account Domain: NT Service Logon ID: 0x3143c Privileges: SeImpersonatePrivilege Special privileges …

2
与SQL Server中的派生表相比,使用临时表是否有优势?
我读到派生表比临时表具有更好的性能,但是无论如何,许多SQL Server开发人员都喜欢第二个表。为什么?我必须对大数据(数百万条记录)进行查询,并且我想确保使用的是最佳选择。 CREATE TABLE A( id BIGINT IDENTITY(1,1) NOT NULL, field1 INT NOT NULL, field2 VARCHAR(50) NULL, ); CREATE TABLE B( id INT IDENTITY(1,1) NOT NULL, field1 VARCHAR(10) NULL, field2 INT NULL ); INSERT INTO A (field1,field2) VALUES (1,'a'),(2,'b'),(3,'c'),(2,'d'),(5,'e'), (6,'f'),(7,'g'),(8,'h'),(9,'i'),(2,'j'); INSERT INTO B (field1,field2) VALUES ('a',1),('b',2),('c',3),('d',4),('e',5), ('f',6),('g',7),('h',8),('i',9),('j',2),('k',3); DECLARE @begin INT=0,@end …

1
MySQL错误:无法写入二进制日志
我有一个系统(从另一个开发公司继承),但是我还不知道其所有功能。构造: -网络客户端/应用程序(symfony 1.4) -数据库-MySQL。 项目部署在2台服务器上: 1台:nginx服务器+ PHP + DB Master; 第2名:DB从站。 当DB Master的Web客户端修改数据时,DB Slave可以正常工作,并且数据具有正常的复制过程。当MySQL Management Client修改数据时,我会收到一条通知: 无法执行语句:由于BINLOG_FORMAT = STATEMENT,并且至少一个表使用了仅限于基于行的日志记录的存储引擎,因此无法写入二进制日志。当事务隔离级别为READ COMMITTED或READ UNCOMMITTED时,InnoDB仅限于行记录 然后,DB Slave崩溃,复制过程中断(错误插入...重复条目...)。 当我尝试使用Java应用程序/模块(在事务内部运行)插入数据时,类似的通知也会以相同的文本发生(在这种情况下-错误),并且在异常之后,事务会回滚并且不会发生任何修改。 如何解决此问题并使系统正常工作,并使修改DB Master和DB Slaves上的数据以正常模式工作成为可能?
8 mysql  logs  errors 

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.