数据库管理员

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

4
使用* tables *作为表值参数(TVP)
MS SQL 2008支持TVP:一项有用的功能,用于将数据批量上传到存储的过程中进行处理。 除了创建用户定义的类型外,还可以利用现有的表定义吗?例如,是否可以创建具有以下签名的存储过程? CREATE PROCEDURE usp_InsertProductionLocation @TVP **LocationTable** READONLY 该文档似乎表明这是不可能的。 样本代码 /* Sample code from: http://msdn.microsoft.com/en-us/library/bb510489.aspx */ USE AdventureWorks2008R2; GO /* Create a table type. */ CREATE TYPE LocationTableType AS TABLE ( LocationName VARCHAR(50) , CostRate INT ); GO /* Create a procedure to receive data for the table-valued …

2
通过第三个数据库使用同一登录名连接两个数据库是否更安全?
我们有以下设置: 包含私有数据的多生产数据库,桌面软件使用该数据库 公共网站的Web数据库,需要来自私有数据库的一些数据 一个中间数据库,其中包含一些视图和存储过程,这些视图和存储过程从私有数据库中提取数据 当前,网站登录到Web数据库,并且Web数据库连接到中间数据库以提取数据或在生产数据库上执行存储过程。所有数据库都在同一SQL实例上,并且整个过程使用相同的用户帐户。 该用户帐户具有对Web数据库和中间数据库的完全访问权限,但只能访问和私有数据库的特定视图和存储过程 这真的比仅使公共数据库直接连接到私有数据库更安全吗? 似乎中间数据库只是使事情复杂化,因为使用同一登录名来访问所有数据库中的数据,并且它已经仅限于专用数据库中所需的视图/ SP。我希望将其删除。

5
MySQL IS NULL / IS NOT NULL行为不正确?
请查看此表: mysql> desc s_p; +-------------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | s_pid | int(10) unsigned | YES | MUL | NULL | | | sm_id | int(10) …
18 mysql  count 

1
是否可以为数据库创建别名或同义词?
是否可以创建数据库别名或同义词?我希望能够做的是将NewDatabaseName别名化为OldDatabaseName,以防止不得不重写大量代码。 背景故事:我遇到一个客户,遇到一个可笑的自我引发的问题。他们有一个带有SQL Server后端的第三方应用程序。用户已经使用Visual Basic针对该数据库编写了自定义报告,所有数据库连接信息都硬编码在他们的程序中。 最近,第三方软件重命名了他们的数据库。现在,所有报告EXE都失败了。 哦,他们也没有很多源代码。 我忍住了笑声,说我会做什么。

2
MySQL-更改实时数据库的innodb_file_per_table
我有一个大型的MySql数据库(150GB),只是现在我才注意到,将innodb_file_per_table设置为off会导致整个数据库托管在一个文件中(ibdata1)。我想激活innodb_file_per_table它并追溯地将数据库分成几个文件,执行此操作的最佳方法是什么?
18 mysql  innodb  my.cnf 

3
PostgreSQL 9.1中的自动故障转移
如何在PostgreSQL 9.1中设置两个相同的服务器以进行自动故障转移。 操作系统 从源代码编译的Centos 5 PostgreSQL 9.1 postgres用户帐户在两台机器上都存在,并且具有ssh无密码密钥来连接到两台机器。 我当前的设置: 主服务器配置: postgresql.conf: listen_address = '*' wal_level = hot_standby max_wal_senders = 3 checkpoint_segments = 16 wal_keep_segments = 8 archive_mode = on archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"' pg_hba.conf: host replication all 10.0.66.1/32 trust host replication all 10.0.66.2/32 trust 备用服务器 postgresql.conf和pg_hba.conf与主服务器上配置的相同。 recovery.conf: standby_mode = …

3
错误消息“通过聚合或其他SET操作消除了空值”中“ SET”的含义
今天,当我运行同事的脚本时,我看到了上面的“ ANSI警告”消息(并且我不知道很多语句中的哪一条导致显示警告)。 在过去,我忽略了这一点:我避免自己置空,因此消除它们的任何事情在我的书中都是一件好事!但是,今天“ SET”一词在我的身边大喊大叫,我意识到我不知道在这种情况下该词的含义是什么。 基于第一个大写字母,我的第一个想法是它指的是SET关键字,意思是“赋值”,例如 UPDATE <table> SET ... ...ON DELETE SET NULL... SET IDENTITY_INSERT <table> ON 根据SQL Server帮助,“ ANSI警告”功能基于ISO / ANSI SQL-92,其规范仅在小节标题中使用了“设置操作”一词,因此在标题中使用了“设置操作”一词。数据分配部分。但是,在快速搜索错误消息之后,我看到了一些示例,这些示例SELECT似乎没有涉及任何分配。 基于SQL Server警告的措辞,我的第二个想法是隐含set的数学含义。但是,我不认为SQL中的聚合严格来说是一种设置操作。即使SQL Server团队将其视为设置操作,将“设置”一词用大写字母的目的是什么? 在谷歌搜索时,我注意到一条SQL Server错误消息: Table 'T' does not have the identity property. Cannot perform SET operation. 在相同情况下,相同的“设置操作”一词只能指代IDENTITY_INSERT属性的分配,这使我回到了最初的想法。 谁能阐明这个问题?
18 sql-server 

4
SQL Server最大内存不限制对RAM的使用
我希望您对此提供意见。我有一个sql server 2008r2 Ent。埃德 具有16个内核和64GB RAM的64位。截至20111014,有一个完全修补的SQL Server实例。 最大ram设置为60000MB。在线几天后,根据任务管理器,免费ram的数量为0。 如果我将最大RAM更改为低于53GB,几天后它将稳定下来并有一些可用RAM。 是sql进程根据任务管理器分配ram。我该如何解决真正的问题?不用说,我已经做了很多测试,但是还没有按照我的喜好解决。当可用的内存降低到0时,我们不会得到典型的内存短缺。 更新1: 受到此页面上与RAM相关的另一个问题的启发,网址为/dba//a/7062/2744。我用这两个来查看RAM的用途。 SELECT TOP ( 10 ) [type] AS [Memory Clerk Type] , SUM(single_pages_kb) AS [SPA Mem, Kb] FROM sys.dm_os_memory_clerks GROUP BY [type] ORDER BY SUM(single_pages_kb) DESC OPTION ( RECOMPILE ) ; SELECT DB_NAME(database_id) AS [Database Name] , COUNT(*) * …

2
为什么我不能使用NEWSEQUENTIALID()作为列的默认值?
我试图在Management Studio中创建一个表,并在阅读了有关新功能(从SQL 2005开始)后NEWSEQUENTIALID(),以为我会尝试一下。 这就是我在做什么: 但这不是让我。我收到的错误消息是: 'FormTemplate (Forms)' table - Error validating the default for column 'FormTemplateId'. 我在这里错过了一个把戏吗?我肯定在运行SQL Server 2008 R2。

3
为什么表的数据空间会占用原始数据大小的4倍?
我有一个具有490 M行和55 GB表空间的表,所以每行约167字节。该表包含三列:a VARCHAR(100),a DATETIME2(0)和a SMALLINT。该VARCHAR字段中文本的平均长度约为21.5,因此原始数据应为每行32字节左右:22 + 2表示VARCHAR,6表示DATETIME2,2表示16位整数。 请注意,上面的空间仅是数据,而不是索引。我正在使用“属性” |“属性”下报告的值 储存| 一般| 数据空间。 当然必须有一些开销,但是每行135个字节似乎很多,尤其是对于大表而言。为什么会这样呢?其他人看到过类似的乘数吗?哪些因素会影响所需的额外空间量? 为了进行比较,我尝试创建一个包含两个INT字段和1 M行的表。所需的数据空间为16.4 MB:每行17个字节,而原始数据为8个字节。另一个带有INT和的测试表与VARCHAR(100)实际表填充相同的文本,每行使用39个字节(44 K行),我希望其中有28个字节。 因此,生产表的开销要大得多。这是因为它更大吗?我希望索引大小大约为N * log(N),但我不明白为什么实际数据所需的空间是非线性的。 在此先感谢您提供任何指导! 编辑: 列出的所有字段均为NOT NULL。实际表在该VARCHAR字段和该DATETIME2字段上按该顺序具有聚集的PK 。对于这两个测试,第一个INT是(集群)PK。 如果很重要:该表记录了ping结果。这些字段是URL,Ping日期/时间和延迟(以毫秒为单位)。数据会不断添加,并且永远不会更新,但是会定期删除数据,以使每个URL每小时仅减少几条记录。 编辑: 这里的一个非常有趣的答案表明,对于具有大量读写的索引而言,重建可能没有好处。就我而言,所消耗的空间是一个问题,但是如果写性能更重要,则松散的索引可能会更好。

2
如何在Oracle中声明和使用变量?
我的主要技能是使用SQL Server,但是有人要求我对Oracle查询进行一些调优。我编写了以下SQL: declare @startDate int select @startDate = 20110501 我得到这个错误: declare @startDate int select @startDate = 20110501 Error at line 1 ORA-06550: line 1, column 9: PLS-00103: Encountered the symbol "@" when expecting one of the following: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> …

3
缩小VARCHAR列的大小有什么意义吗?
到处搜寻有关VARCHAR2Oracle 的列大小是否影响性能的报告似乎不一。 我想VARCHAR稍微谈谈大小问题,并希望对此有所了解: 给定要存储在(Oracle)数据库中的(多行)自由文本字段(不是名称之类的简短内容),在没有达到最大VARCHAR容量(VARCHAR2(4000)在Oracle上)的情况下(在性能或其他方面)有什么意义(选择Oracle)较小的值,例如1024或512,因为无论如何在98%的情况下,这可能就足够了。

2
触发器:将已删除的行移至存档表
我的restrictionsPostgreSQL数据库中有一个小表(约10行),每天都会删除和插入值。 我想要一个名为的表restrictions_deleted,将从中删除的每一行都restrictions将被自动存储。由于restrictions具有序列号,因此不会重复。 如何在PostgreSQL中编写这样的触发器?

2
我们可以在MySQL 5.0 Replication中做什么来解决带宽问题?
我正在开发一个在客户端PC(Win)上运行的应用程序,该PC配置有MySQL服务器5.1实例,该实例将充当远程主服务器的只读从属服务器。远程主服务器有几十个模式,但是每个客户端只需要一个模式,因此我在my.ini中提供了copy-do-db设置,以仅复制客户端所需的模式。复制是可行的,但是当我们的客户进入仅通过3G无线访问互联网(按数据用量收费)的地区时,他们很快就会超出数据计划的限制,并遇到了昂贵的问题。 据我了解,MySQL将所有模式的所有事务都写入单个binlog文件中,这意味着每个客户端必须下载在主服务器上的每个模式上执行的所有事务,然后一旦下载,则对每个复制应用数据库过滤器- 客户端的my.ini文件中的do-db设置。 为了最大程度地减少这种低效率,我采用了slave_compressed_protocol = 1设置,该设置似乎将传输的数据减少了50%,但仍然导致我们的客户的数据流量迅速超过了3G账单。 我无法想象我是唯一面对这个问题的人,所以我敢肯定,通过设置x = y,我将获得大量有关如何实现这一目标的答案。但是,我找不到有关这种设置的任何文档,也找不到推荐的方法。 到目前为止,这是我对可能的解决方案的想法,请提供反馈或替代路线: 为每个模式设置“代理”从属(在不同的框上,或在具有不同的MySQL实例/端口的同一框上) 配置代理从属服务器,使其仅复制客户端希望复制的一个数据库。 将客户端的MySQL实例配置为相应代理从属的从属。 这应该导致客户端仅提取其架构的binlog数据。不利的一面(据我所知)是,它极大地增加了我们设置的复杂性,可能使其更加脆弱。 有什么想法吗?这种方法还能行吗? 注意,我们正在RedHat上运行MySQL 5.0服务器,但是如果它可以解决的话,我们可以升级到5.5。

3
如何在Sql Server中存储Web服务器日志的'n'天?
为了更快地进行报告和性能分析,我们希望将Web服务器日志插入Sql Server。这将使我们能够实时查看流量模式,问题和速度下降。 我们有一个守护程序,用于侦听来自负载均衡器的请求/响应事件,并将批量插入数据库。 但是,我们每天可获得大约1 GB的日志,而我们只需要保留大约一周的时间(至少以这种原始形式)。 存储此数据的最佳方法是什么,删除旧条目的最佳方法是什么? 我们已经讨论过将每天的数据存储在自己的表中,例如,Log_2011_04_07将具有当天的所有条目,然后删除最旧的表。可以创建一个视图来涵盖所有的日间表格,以方便查询。可行吗?

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.