数据库管理员

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

1
在视图中创建一个新列并为其分配数据类型
这是我的查询: CREATE VIEW VIEW2 AS SELECT [Column1], (NULL) AS column2 VARCHAR(10) FROM VIEW1; 第三行出现错误。 如果我这样离开查询,但未指定Column2的数据类型,则该查询有效,但是默认数据类型为int,而我想使用VARCHAR。 CREATE VIEW VIEW2 AS SELECT [Column1], (NULL) AS column2 FROM VIEW1; 你能帮忙吗?谢谢! 注意:VIEW1中只有Column1。Column2不在VIEW1中,它是具有NULL值的生成的列。

2
加载从mysqldump创建的数据时,如何显示警告?
我有一个很大的.sql文件,其中有大量插入...值...语句。这些语句中的许多语句在执行期间都会生成警告。如何获得mysql打印警告? 如果命中了control-C,则导入将停止,然后将我放回OS命令行。 这是运行SQL的示例输出: Query OK, 9827 rows affected, 5403 warnings (0.20 sec) Records: 9827 Duplicates: 0 Warnings: 5403 Query OK, 9859 rows affected, 5247 warnings (0.20 sec) Records: 9859 Duplicates: 0 Warnings: 5247

1
一个表占用多少内存?
有没有办法找出一个表在SQL Server(2005及更高版本)中占用了多少内存? 例如,假设我有一个包含3000万条记录的表。我想知道缓冲区高速缓存中当前有多少个属于此表的页面,包括索引,数据和文本/图像页面。 我是通过Pinal Dave找到此查询的,但似乎此查询仅返回按索引分配的页面(无论是聚集的还是未聚集的页面)。

2
如何检查统计信息的最后执行时间?
最近,我们的索引遇到了许多问题,我们的DBA团队将其归因于最近没有运行过的统计信息。这让我感到疑惑-如何检查统计信息是否最近通过SQL Management Studio更新了? 如果这个问题不能很好地解释这个问题,我深表歉意-直到现在,我才被引入统计数据,在此之前,只要遇到性能相关问题,它就会查找索引。 编辑: 我正在使用以下内容,但收到语法错误: use *databasename* exec sp_autostats *schema.tablename* 我收到的错误是: Msg 102, Level 15, State 1, Line 2 Incorrect syntax near '.'. 为什么是这样?

1
为什么计算执行计划需要这么长时间?
我们的一位客户刚刚升级到新服务器。 对于特定的存储过程,首次执行该过程要花费三分钟以上的时间。随后的运行少于1秒。 这使我相信,最初的三分钟主要用于计算执行计划。然后,后续运行只需使用缓存的计划即可立即运行。 在我们的测试数据库上,大约需要5秒钟来计算同一步骤的计划。 我看不出计划本身有什么可怕的-尽管我不认为计划的相关性,因为计划显示了运行查询所花费的时间,而不是计算自身。 该服务器是16核,具有24 GB内存。不会发生繁重的CPU或内存负载。 是什么会导致仅在特定数据库上如此缓慢的计算? 我可以采取什么步骤找到问题的原因? 编辑 因此,我设法访问服务器并使用SET SHOWPLAN_XML ON运行查询。 我可以确认查询的CompileTime占用了查询执行时间的99%。该StatementOptmEarlyAbortReason是“超时”,我们与他们的数据库副本的原因是MemoryLimitExceeded测试数据库。

1
如何从LDF文件恢复数据?
我们正在使用SQL 2005 Express Edition。我们想从LDF文件中读取数据,以恢复一些已删除的记录。 我们尝试使用ApexSQL的试用版,这对我们有很大帮助。而不是寻求第三方软件,我们试图找出如何自己读取日志文件的方法。 我们如何从LDF文件读取和恢复数据?


2
确定Oracle会话客户端字符集?
我知道数据库字符集(NLS_CHARACTERSET中的select * from v$nls_parameters;)和客户端字符集(客户端环境设置NLS_LANG)如何交互。 但是,我无法确定的是,对于已建立的会话,如何或是否可以确定Oracle认为当前客户端特征集是什么。 这有可能吗? 注:SELECT * FROM NLS_SESSION_PARAMETERS;不不包含字符集(上10G2)。 明确说明我要完成的工作: NLS_LANG在客户端环境中设置为任意值(例如GERMAN_GERMANY.WE8MSWIN1252) 数据库应用程序[*]启动并建立与Oracle数据库的连接/会话。 数据库应用程序[*]希望“询问” Oracle(而不是其OS环境)Oracle将承担的客户端字符集。 [*]:如果数据库应用程序是sqlplus,则示例如下所示: ... sqlplus /nolog connect user/pass@example *magic command*; CLIENT CHARACTERSET = ... 杰克的回答中提出了两个要点: 借助Oracle,谁做的字符集转换。它是客户端库代码还是在服务器端完成? 看起来是客户端,客户端需要公开此设置-客户端库/工具假定此设置是什么。是否可以查询任何Oracle客户端库/工具(sqlplus,OCI / OCCI,Pro * C等)?

1
Postgres客户端复制(\ copy)命令没有访问临时表的权限?
我正在生成SQL命令列表,以导出一些最终使用psql -f运行的数据。所有查询都获得相同的数据子集,所以我认为我会考虑将资格限定在内,并在诸如此类的临时表中放入合格用户ID的列表。 create temporary table tmp_export_users as (select id from users where ...) 然后参考我的\ copy命令中的内容 \copy (select ... from table where user_id in (select id from tmp_export_users)) TO 'filename.csv' WITH CSV HEADER 这些都在同一个文件中,每行一个,然后运行它们-f我得到了以下错误:复制命令看不到临时表,因此我猜想客户端复制命令实际上不能使用相同的postgres会话为psql。 那是对的吗?有没有办法改变这种行为?


4
母版上的吨数吨中继日志
到目前为止,我有一个拥有298个中继bin文件的主文件,可以追溯到298天。 .cnf中没有中继日志定义 和 mysql> show variables like '%relay%'; +---------------------------------+----------------+ | Variable_name | Value | +---------------------------------+----------------+ | innodb_overwrite_relay_log_info | OFF | | max_relay_log_size | 0 | | relay_log | | | relay_log_index | | | relay_log_info_file | relay-log.info | | relay_log_purge | ON | | relay_log_space_limit | 0 | +---------------------------------+----------------+ 重置从站将其清除,但随后它们才开始重新生成。 …

1
表压缩如何影响SQL Server的缓冲池?
我很好奇SQL Server的缓冲池如何受到压缩数据表的影响。 是否像在磁盘上一样压缩了内存中的数据,还是对其进行了完全解压缩? 如果将数据压缩存储在缓冲池中,则在执行一条语句时,给定时间将多少个瞬时解压缩的数据保存在内存中;行/页,整个表(假设有足够的可用页来保存数据)还是“取决于”?

1
数据库用户和服务器登录名以及它们之间的映射
我在家中有一个SQL Server 2008 R2 Express Edition实例,在客户端的服务器上有一个实例,我正在使用该实例来开发使用Access作为前端的应用程序。该应用程序有5个独立的登录名,我可以在连接字符串中使用(基于用户所在的访问组)。家庭实例具有多个数据库-其中一些与该应用程序无关 随着时间的推移,我已经在每个实例中手动创建了登录名(可能以不同的顺序)。 我希望能够(不止一次)从正在使用的数据库的家用计算机中进行备份,并使用还原将其加载到客户端的实例上,只需将备份集中的文件移动到实际位置即可。还原过程中在此服务器上使用的文件。我不理解的是数据库用户和登录名之间的映射。 我以为名称的对应关系就足够了,但是在尝试解决还原数据库的用户似乎未映射到服务器登录名的问题时,我遇到了Transact-SQL ALTER USER语句,尤其是有关使用WITH LOGIN的参考以及有关“ SID”的一些讨论。 由于(我假设)服务器登录名在每个实例中都有不同的SID,是否表示在实例之间加载备份后,我必须使用一系列ALTER USER WITH LOGIN命令再次重新连接映射?

1
为什么“从源表中将*选择到目标表中”比“从源表中将*选择到目标表中”要快
这个标题就是问题。我很好奇知道答案。有人告诉 选择进入是最少登录到简单恢复模型数据库中的。。。我根本没有进入。 微软摘录: SELECT ... INTO的日志记录数量取决于对数据库有效的恢复模型。在简单恢复模型或批量记录的恢复模型下,批量操作的记录最少。使用最少的日志记录,使用SELECT…INTO语句比创建表然后用INSERT语句填充表更有效。 寻求帮助 谢谢

1
估计索引对SQLite数据库大小的影响
我正在尝试为包含多个索引列的SQLite DB估计数据库大小(在磁盘上)。这些列的类型为(SQLite)Integer和String。用这些列估算每行的大小很简单,但是由于索引,我不确定如何考虑额外的每行填充。最好的方法是什么?
9 index  sqlite  size 

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.