我需要从表 A 中获取一些数据,使用一些逻辑,然后将一行或多行插入表 B。我有一个 PLSQL 块,它使用游标从表 A 中引入数据,执行所有需要的逻辑,然后插入所需的行。
问题是表 B 中有重复的行 - 这是野兽的本性。但我需要最终结果是一个没有重复的表 B。
它是 Oracle,所以临时表是错误的形式 - 实现此目的的最佳方法是什么?
我需要从表 A 中获取一些数据,使用一些逻辑,然后将一行或多行插入表 B。我有一个 PLSQL 块,它使用游标从表 A 中引入数据,执行所有需要的逻辑,然后插入所需的行。
问题是表 B 中有重复的行 - 这是野兽的本性。但我需要最终结果是一个没有重复的表 B。
它是 Oracle,所以临时表是错误的形式 - 实现此目的的最佳方法是什么?
我有 PL/SQL 匿名块,它创建一个表(使用execute immediate
),然后将数据插入到表中。
当块编译时,它给了我一个ORA-00942: table or view does not exist错误。
好吧,不,它不存在,但它会在插入发生之前创建。如果我在编译之前创建表,它将起作用。
我该如何处理?
我正在创建几十个表作为 CREATE TABLE AS SELECT (CTAS)。SELECT 语句的唯一区别是在 WHERE 子句中为 TEAM_ID 指定不同的值。我是 Oracle 新手,我认为我可以使用绑定变量来加快进程,但 DDL 语句中不允许使用这些变量。
我的数据非常大 - 500+ 百万行。
我最好的速度选择是什么?目前我们正在使用nologging
CREATE TABLE 语句。/*+ append */
使用提示和绑定变量显式创建表和 INSERT 会更好吗?或者是否nologging
超过绑定变量的收益?
(我确信这是一个“取决于”的场景,但我什至不知道它取决于什么......)
我有一个相当简单的问题证明很难搜索。
我需要创建一个将被分区并将(大量)数据加载到其中的表。
在我插入数据后创建带有分区的表或添加分区是否更有效?
补充:为了确保我理解完整的图片,如果我要截断这个表然后再次加载(大量)数据,我应该删除分区然后在加载后添加吗?
补充#2:如果我可以按分区的顺序插入数据,我认为这会比没有更快吗?
我是数据仓库环境中的数据库设计人员。我习惯于处理最多 100 万行的表,现在我面临着超过 50 亿行的表。与“效率工具箱”中的工具有什么显着差异吗?我是否可以相信我以前对索引、分区等的了解,或者这些特定工具中的某些工具对如此大的数据是否有帮助而不是帮助?还有其他处理表格的技巧吗?
(已经找到了一篇关于将7 亿行更新为相同值的好帖子)
我们有一个用户要离开,我需要知道他拥有的每个数据库对象。是否有可以提供此信息的查询?
我基本上在这里提出了同样的问题 -忽略重复插入的最佳方法?- 除了在我的情况下它是 SQL Server。
我有一张表格,其中列出了已故人员 ID。源数据库中有很多地方可以指示一个人已故。我想从这些位置中的每一个插入到这个主表中,但是一个人可能在多个地方被指示为已故。
理想情况下(我认为)我只想以最有效的方式忽略重复的关键错误。(因此,我不想在我的 INSERT 语句中检查主表的 ID。)
(与解决我的问题有关需要提高视图性能的建议)
我们将实施一种机制来跟踪 SQL Server 2008 应用程序数据库中的更改。程序员担心 INSERT 速度受到负面影响,因此我着手测试三种情况:没有跟踪更改的机制、更改跟踪和更改数据捕获 (CDC)。
在我的所有测试中,INSERT 的速度似乎没有显着差异。这有意义吗?在从我们的要求列表中删除此问题之前,我想确保我没有忽略任何内容。
(注意:我的测试显示了与 UPDATES 的差异,但我们只关心 INSERTS)
编辑:我的测试相对简单,插入到类似生产的表中,但有 250K。这些过程运行了 5 分钟多,所以我很高兴这对我们的环境来说已经足够了。
我正在尝试做一些非常简单的事情,但我很困惑为什么它不起作用。
我有一个列 ( sysjobschedules.next_run_date
from msdb
),它是一个 varchar,格式类似于 yyyymmdd。我想将其转换为日期时间。我使用了相当直接的命令CONVERT(datetime,next_run_date,112)
,但我不断收到错误算术溢出错误将表达式转换为数据类型日期时间。
此列中的三个不同值是 20120802、20120803 和 20120806。使用上面相同的函数,我能够成功转换所有三个字符串。
我觉得我一定错过了一些明显的东西......?
我需要对一些 SSRS 报告的部署和安全性做出决定,并希望就最合适的方法提供一些建议。
我们有 40 多个站点,它们只能访问其站点的信息。每个站点都可以访问多个报告,例如 Report A、Report B 等。对于每个站点,报告名称为Report A - Site 1、Report B - Site 1等。对于每个报告(Report A),有是主报告(报告 A - 主)。主报告是报告本身 - 数据集和格式 - 并包含站点名称的隐藏参数。每个站点的报告链接到此主报告并传入站点名称。因此,如果报告发生更改,则在一处进行更改。
请注意,将报告限制为数据库中特定于站点的信息是不可能的。我们的数据源使用服务帐户,所有用户对信息的访问都在门户网站中处理。
现在是时候授予用户访问这些报告的权限了。当前设置为所有报告和主报告都在一个文件夹中。对每个报告的访问单独控制,用户必须有权访问主报告及其站点报告。
我强烈希望为每个站点设置一个文件夹并以这种方式控制访问。显然,随着添加特定站点的报告,这将使其变得更容易,并且将控制访问的是超级用户。我担心这会使报告的部署变得异常困难。由于链接机制,所有 40 多个版本(加上Master)都在同一个 BIDS 项目中——每次更改部署到 40 个不同的位置似乎是一场噩梦。
我想知道是否有其他人遇到过类似的挑战并找到了解决它的好方法。我玩过链接报告,但是站点报告无法“找到”主报告,即使链接副本放在同一文件夹中也是如此。
编辑:为了澄清和使用确切的术语,主报告是每个站点报告的子报告。
我有一个表Table_A
和一个视图View_A
,它是Table_A
.
如果我拒绝用户SELECT
,Table_A
用户仍然可以使用视图View_A
。
有没有一种方法可以在用户尝试使用视图时强制视图返回错误?
这里的真实案例是一个包含大约 20 个表和数百个视图的数据库。用户访问在逻辑上与表相关联,因此我们希望阻止人们使用基于这些表的视图。
(这是索引是否消耗内存的延续?)
一位数据库开发人员认为我们遇到了内存问题。他发现一些标准查询的运行时间有所增加——从不到 10 秒增加到大约两分半钟。他查看了服务器上的任务管理器,发现内存使用率很高,现在想占用一些当前分配给操作系统的内存并将其释放给 SQL Server。
我们在 SQL Server 2008 上,一台 64 位机器,未启用 AWE,最小 4096 MB,最大 10240 MB。
我发现 Brent Ozar 的A Sysadmin's Guide to Microsoft SQL Server Memory表明任务管理器不可靠。我还发现我们的页面预期寿命并不表示内存压力。(通过Pinal Dave 的查询检查。)
我还应该去哪里看?我还应该检查什么?我想向数据库开发人员报告,以证实他的怀疑或证明他们是不正确的。
编辑:修改了我的实际问题。我很欣赏并同意,由于内存问题以外的原因,这些查询极有可能变慢。然而,我处于一种情况,我需要证明记忆不是全面的罪魁祸首。也就是说,证明少数查询由于其他原因变慢并不能完成我的任务。我想了解在哪里可以获得此类信息以及我应该检查哪些指标。
我刚刚开始了解 SQL Server 上的内存使用情况。使用SQL Server 2008 R2 "Ghost Memory" 问题答案中的查询时?,我发现单个数据库占用了缓冲池中的大部分空间。进一步看,使用sys.allocation_units
and sys.indexes
,我确认这可能是由于数据库中大量使用索引造成的。大多数索引都是聚集的。
另一位数据库开发人员认为我们在服务器上存在内存问题 - 由于没有可用内存,查询开始运行很长时间。
我的问题是——这些索引的使用,以及它们在缓冲池中的存在,是否会占用其他进程可用的内存?
我已经在SQL Server 2008 中设置了一个预定义的复制警报(如此处概述)和复制警告警报:事务复制延迟似乎不起作用。这是由错误 14161 触发的。
我在网络上发现了很多表明这是一个错误的帖子,但这些帖子太旧了,我不确定情况是否仍然如此。
这仍然是一个损坏的功能吗?如果是这样,有人可以建议解决方法吗?
编辑/附加信息:我看到有许多脚本已在类似问题中突出显示。为了完善我的问题,我想确认这是一个错误,我正在寻找一种开箱即用的解决方法……也就是说,只是将 SQL Server 代理警报写入到的另一种方法让它工作...
我们一直收到来自特定 SSRS 用户的投诉,称她的报告运行缓慢。我调查ExecutionLog
了数据库中的表,ReportServer
发现了一些奇怪的事情。
相当一致,TimeDataRetrieval
比其他用户长得多。TimeProcessing
和都TimeRendering
接近其他用户的平均值。
我很困惑。这些报告都使用作为服务帐户运行的相同共享数据源。我想如果这是一个蹩脚的用户计算机问题,我会看到渲染时间的差异。如果有网络问题,也是一样。
我不知道还有什么地方可以看 - 有什么想法吗?
这是一个挑战。我正在处理表格ReportServer.Schedule
,并且有一个名为DaysOfWeek
. 我在这里可能没有使用正确的术语,但这是一个整数,可以从中得出 SSRS 订阅设置为在一周中的哪几天运行。每一天都分配了一个数字,如下所示:
订阅设置运行的总天数就是此列中的数字。因此,从周一到周五运行的订阅在此列中的值为62
。
我想要的最终结果是一个视图,它根据这个数字派生出每天的 T/F 标志,这样我每天都有一列。我目前正在探索的方法是将这个整数转换为 base-2,这样我就可以将它转换为 varchar 并解析出天数。在此示例中,结果将为 111110。
最后的转折——我没有能力在这个数据库中创建函数或存储过程,所以我强烈倾向于在一条SELECT
语句中解决这个问题……
(如果迫在眉睫,我将移动原始数据并在单独的数据库中使用一个函数 - 并且已经在网上找到了一些。)
是否可以在 SQL Server 2008 中设置警报,以便在特定类别的作业失败时发送电子邮件?
我想知道,因为我想在 SSRS 订阅失败时设置电子邮件 - 所有这些订阅都是Report Server类别中的作业。
编辑- 事实证明,当 SSRS 订阅失败时,作业本身不会失败,所以我的问题不适用于 SSRS 订阅监控使用。但是我仍然想知道我们在我们的环境中运行的其他工作
是否可以设置带有加密附件的 SSRS 电子邮件订阅?
POST ANSWER-ACCEPT 更新: RSReportServer.config 文件中的SMTPUseSSL开关对我有帮助吗?
更多更新:不,SMTPUseSSL开关无法让我到达那里。我在这里验证了下面的答案:
The default e-mail delivery extension does not provide support for digitally signing or encrypting outgoing mail messages.
我想知道是否可以验证设置为发送电子邮件的 SSRS 订阅是否将其发送到真实地址。也就是说,如果我输入了一个无效的电子邮件地址,我能否发现从目标服务器发回了无法投递的邮件?
我使用一个电子邮件地址对此进行了测试,当我从 Outlook 向它发送电子邮件时,该地址确实返回了无法送达的消息。订阅运行后,它的状态简单地说Mail sent to [email protected]
。
我们的解决方案:我们使用通用电子邮件地址设置共享 Outlook 帐户。我们这些有权创建订阅的人可以访问此电子邮件帐户。然后,我们修改了RSReportServer.config
ReportServer 上的文件以从这个新的通用地址发送电子邮件。现在,只要将订阅设置为发送到错误的电子邮件地址,我们就可以在共享的 Outlook 收件箱中看到发送失败。呜呼!