小编Bra*_*adC的帖子

存储信用卡信息

我可以存储用户信用卡的到期日期和最后4位数吗?原因是我们可以通知用户他们的卡即将过期,并且他们应该将他们的帐户更改为新卡.存储最后四位数字将允许用户识别他们使用我们的系统存储的卡.

security credit-card

27
推荐指数
1
解决办法
4998
查看次数

匿名化客户数据以进行开发或测试

我需要使用真实的客户信息(姓名,地址,电话号码等)获取生产数据并将其移至开发环境中,但我想删除任何真实的客户信息.

这个问题的一些答案可以帮助我生成新的测试数据,但是如何在生产数据中替换这些列,但保留其他相关列?

假设我有一张有10000个假名的桌子.我应该使用SQL更新进行交叉连接吗?或者做类似的事情

UPDATE table
SET lastname = (SELECT TOP 1 name FROM samplenames ORDER By NEWID())
Run Code Online (Sandbox Code Playgroud)

sql data-scrubbing

18
推荐指数
3
解决办法
3万
查看次数

JDBC连接到非常繁忙的SQL 2000:selectMethod = cursor vs selectMethod = direct?

在尝试帮助应用开发团队在SQL 2000服务器(来自单独的应用服务器上的一堆Java应用程序)上遇到性能问题的过程中,我运行了一条SQL跟踪并发现所有对数据库的调用都充满了API Server Cursor语句(sp_cursorprepexec,sp_cursorfetch,sp_cursorclose).

看起来他们正在指定一些强制使用服务器端游标的连接字符串属性,一次只检索128行数据:(来自http://msdn.microsoft.com/en-us/library/Aa172588)

当API游标属性或属性设置为默认值以外的任何值时,SQL Server的OLE DB提供程序和SQL Server ODBC驱动程序使用API​​服务器游标而不是默认结果集.每次调用获取行的API函数都会生成到服务器的往返,以从API服务器游标中获取行.

更新:有争议的连接字符串是JDBC连接字符串参数selectMethod=cursor(它启用我们上面讨论过的服务器端游标)与替代字符串selectMethod=direct.他们一直使用selectMethod=cursor来自所有应用程序的标准连接字符串.

从我的DBA角度来看,这只是令人讨厌(它使用无用的垃圾混乱了跟踪),并且(我推测)导致许多额外的app-to-SQL服务器往返,降低了整体性能.

他们显然做了测试改变(只是大约60个不同的应用程序连接中的一个),selectMethod=direct但遇到了一些问题(我没有详细说明),并担心应用程序中断.

所以,我的问题是:

  • 可以使用selectMethod=cursor较低的应用程序性能,正如我试图争论的那样?(通过增加已经具有非常高的查询/秒的SQL服务器上所需的往返次数)
  • selectMethod=JDBC连接上是应用程序透明设置吗?如果我们改变它,这会打破他们的应用吗?
  • 更一般地说,什么时候应该使用cursorvs direct

交叉发布到SF.

编辑:收到实际技术细节,保证对标题,问题和标签进行重大编辑.

编辑:添加赏金.还为SF问题添加了赏金(这个问题主要集中在应用程序行为上,SF问题主要集中在SQL性能上.)谢谢!!

sql-server-2000 jdbc cursor selectmethod

11
推荐指数
1
解决办法
1万
查看次数

单个SQL SELECT中有多少个表"太多"?

作为MS SQL 2000和2005的DBA,我经常看到巨大的选择查询JOINing 7-10甚至更​​多表.但是,我发现,性能往往会受到影响,并且查询变得非常难以调试和/或改进.

因此,当我应该考虑其他查询方法时,有一个"经验法则",比如临时表来保存初步结果吗?或者有一点之后,SQL查询优化器只是没有很好地找出最佳计划?

sql-server

10
推荐指数
1
解决办法
2万
查看次数

CHECKPOINT与TSQL中的COMMIT一样工作吗?

我通常在我的存储过程中使用完全显式事务(BEGIN TRANSACTION .... COMMIT).我只是跑过一个旧的,而是在代码中的某些地方使用"CHECKPOINT".

这不会做同样的事情,对吧?即使数据库处于简单模式,整个事情仍然会作为一个大事务运行,即使有一堆检查点卡在中间?

sql t-sql sql-server transactions

8
推荐指数
2
解决办法
5843
查看次数

如何计算SQL Server 2005中存储过程的SIZE?

我被要求对特定数据库中使用的空间进行全面细分.我知道我可以在SQL Server 2005中使用sys.dm_db_partition_stats来计算数据库中每个使用的空间大小,但有没有办法确定数据库中存储过程的个别和总大小?(当然,没有打开每一个并计算字符数.)

存储过程使用的总空间不太可能很大(与实际数据相比),但有数百个,它可能会相加.

t-sql stored-procedures sql-server-2005

6
推荐指数
1
解决办法
7745
查看次数

使用过滤器减少SQL跟踪的开销

我们有一台SQL 2000服务器,它具有各种各样的工作,这些工作在一天中的不同时间运行,甚至在一个月的不同日期运行.通常,我们只使用SQL分析器在很短的时间内运行跟踪以进行性能故障排除,但在这种情况下,这实际上不能让我对通过该数据库对数据库运行的查询类型有一个很好的全面了解.一天,一周或一个月的过程.

如何最小化长时间运行的SQL跟踪的性能开销?我已经知道了:

  • 执行跟踪服务器端(sp_ create_trace),而不是使用SQL事件探查器UI.
  • 跟踪文件,而不是数据库表(这会给数据库服务器增加额外的开销).

我的问题是关于过滤器.如果我添加一个过滤器只记录运行超过一定持续时间或读取的查询,它仍然必须检查服务器上的所有活动,以决定是否需要记录它,对吧?因此,即使使用该过滤器,跟踪是否会为已经处于不可接受性能边缘的服务器创建不可接受的开销水平?

sql-server sql-server-2000 sql-server-profiler

6
推荐指数
1
解决办法
2427
查看次数

将数字列表分成大致相等的总数

我知道我的问题可能没有“完美”的解决方案(这听起来像是背包或垃圾箱包装问题的变体),但这是我的情况:

我想将 SQL 数据库表列表分成 n 个(假设为 7 个)大小大致相同的堆(这样我可以在整个星期内大致平均地分配一些维护任务)。

假设我有 100 个表(这可能更高或更低,但不太可能高于 5000),范围从 1 到 10,000,000(当然,更大的表不太常见)。

我最初的想法是按字母顺序(伪随机)对表格进行排序,然后从头开始遍历,当总数超过 Sum(Size)/7 时移动到下一组。对于某些数据库,这可能会正常工作,但如果两个巨大的表彼此相邻,则这会导致非常不平等的组。(这并不像听起来那么不可能,考虑两个巨大的表,Account_History 和 Account_History_Archive)。

是否有任何普遍接受的技术可以为各种源数据提供“良好”的结果?我倾向于更简单的技术,而不是更精确的分组(如果某些日子的维护时间比其他日子稍长,没什么大不了的)。

sql algorithm np-complete bin-packing

5
推荐指数
1
解决办法
1329
查看次数

使用SQL Server 2005 Management Studio时,SQL Server 2000数据库中是否存在损坏的危险?

在前一次对SQL DBA职位的采访中,我提到我更喜欢SQL 2005 Management Studio应用程序与旧版2000企业管理器/查询分析器.正在采访我的DBA表示,他们在使用2005 MS进行更改时,在2000个数据库中遇到了某种数据库损坏,因此他们现在总是使用Enterprise Manager.

他有点模糊,但我得到的印象是他在讨论在进行服务器级或数据库级设置更改时遇到的某种损坏,而不仅仅是例行的SQL更新等.

有人听说过这样的事吗?我最终没有采取这个立场,所以我无法跟进以获得更多信息.

sql sql-server ssms enterprise-manager

4
推荐指数
1
解决办法
277
查看次数

使用WHERE子句的子查询与传统连接?

当加入表的一个子集时,有什么理由偏好这些格式中的一种而不是另一种格式?

子查询版本:

SELECT ...
FROM Customers AS c
INNER JOIN (SELECT * FROM Classification WHERE CustomerType = 'Standard') AS cf
    ON c.TypeCode = cf.Code
INNER JOIN SalesReps s ON cf.SalesRepID = s.SalesRepID
Run Code Online (Sandbox Code Playgroud)

vs最后的WHERE子句:

SELECT ...
FROM Customers AS c
INNER JOIN Classification AS cf ON c.TypeCode = cf.Code
INNER JOIN SalesReps AS s ON cf.SalesRepID = s.SalesRepID
WHERE cf.CustomerType = 'Standard'
Run Code Online (Sandbox Code Playgroud)

最后的WHERE子句感觉更"传统",但第一个可以说更清晰,特别是当连接变得越来越复杂时.

只有其他原因,我可以想到更喜欢第二个是第一个"SELECT*"可能会返回以后没有使用的列(在这种情况下,我可能只需要返回cf.Code和Cf. SalesRepID)

sql sql-server

4
推荐指数
1
解决办法
6044
查看次数

由于类型转换而未使用索引?

由于特定表上的全表扫描,我的进程表现不佳.我已经计算了统计数据,重建了现有的索引,并尝试为此表添加新索引,但这还没有解决问题.

隐式类型转换可以停止使用索引吗?其他原因呢?全表扫描的成本比索引查找大1000左右.

编辑:

SQL语句:

select unique_key 
from src_table 
where natural_key1 = :1 
and natural_key2 = :2 
and natural_key3 = :3;
Run Code Online (Sandbox Code Playgroud)
  • natural_key1的基数很高,但有一种类型转换.
  • 自然键的其他部分是低基数,并且未启用位图索引.
  • 表大小约为1,000,000条记录.

Java代码(不易修改):

ps.setLong(1, oid);
Run Code Online (Sandbox Code Playgroud)

这与列数据类型:varchar2冲突

database oracle indexing performance

3
推荐指数
2
解决办法
8596
查看次数

使用SQL"消息"窗格的结果

我有一个现有的SQL 2005存储过程,由于某种原因,它将结果输出到SSMS 中的" 消息"窗格而不是" 结果"窗格.(它实际上已经编译并部署到我们所有服务器的CLR程序,并用于另一个日常进程.所以我无法更改它,我只想使用它的输出.)

为了便于讨论,这里的存储过程的行为方式相同:

CREATE PROCEDURE [dbo].[OutputTest] 
    @Param1  int, @Param2 varchar(100)
AS
BEGIN
    SET NOCOUNT ON;
    PRINT 'C,10000,15000';
    PRINT 'D,30000,90000';
    PRINT 'E,500,50000';
END
Run Code Online (Sandbox Code Playgroud)

因此,那里没有实际的SELECT语句,如果你运行它,你只会在Messages窗格中看到这些结果.

我有什么方法可以这些结果用作更大查询的一部分吗?把它们放在临时表或其他东西,所以我可以解析它们?

没有"正常的东西"有效,因为这里没有真正的"输出":

INSERT INTO #output
EXEC OutputTest 100, 'bob'
Run Code Online (Sandbox Code Playgroud)

只是表明

C,10000,15000
D,30000,90000
E,500,50000

(0 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

在消息窗格上,临时表实际上没有任何内容.

sql-server ssms sql-server-2005

2
推荐指数
1
解决办法
7739
查看次数