小编Jac*_*las的帖子

SQL Server - Tempdb 数据/日志文件放置

目前我们在同一驱动器上获得了 TEMPDB 数据(数据文件数:2)和日志文件。

在监控过程中,我们发现了 TempDB 上的 I/O 问题。

我们有一个额外的驱动器可用 - 我们应该将 TempDB 日志文件移动到新驱动器,还是应该将第二个 TEMPDb 数据文件移动到新驱动器上以帮助我们减少 I/O 问题?

sql-server

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

列出包含在其他组中的值组的最佳方法是什么

例如,从这样的表开始:

create table t as 
select 'A' as x, level as y from dual connect by level<=5
union all 
select 'B' as x, level+2 as y from dual connect by level<=5
union all 
select 'C' as x, level as y from dual connect by level<=3
union all 
select 'D' as x, level+2 as y from dual connect by level<=3;

alter table t add primary key (x, y);

select * from t;

X Y                      
- -
A 1                      
A 2                      
A …
Run Code Online (Sandbox Code Playgroud)

oracle

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

比较 SQL Server 2008 中的 DISTINCT、GROUP BY 和 ROW_NUMBER() 与数据仓库工作负载

我最近听到了这样的建议:“如果您使用的是 DISTINCT,我会挑战您修复您的代码。” 但是,我想知道这个建议背后的考虑因素,以及这是否意味着我应该以不同的方式处理以下问题。

问题背景

我有一个非规范化的日期维度表(Kimball 星型架构)。在这张表中,我折叠了几个第三范式表:日期、绝对周、绝对月和年。对于这些折叠表中的每一个,我都有一个表示唯一标识的列、一个文本名称列和一个数字手动排序索引。这是显示结构的示例行,数字仅用于说明(为便于阅读采用垂直形式):

  • 日期编号:20110507
  • 日期名称:2011 年 5 月 7 日
  • 日期订单:17813
  • 周号:201118
  • :2011 年第 18 周
  • 周订单:617
  • 月号:201105
  • MONTHNAME:2011年5月
  • 月订单: 74
  • 年份编号:2011
  • 年份名称: 2011
  • 年订单: 41

为了便于理解,我选择使用日期维度表,但该问题可以转换为任何其他涉及层次结构的维度表。

问题概要

我想用相关的文本字段检索一组不同的周和月组合。

可能的解决方案

1. 与众不同

SELECT DISTINCT MonthId, WeekId, YearName, MonthName, WeekName
  FROM DimDate
Run Code Online (Sandbox Code Playgroud)

请注意,我不能排除 MonthId 或 WeekId,因为我不能假设自由文本字段是唯一的。

2. 分组依据

SELECT MIN(YearName), MIN(MonthName), MIN(WeekName)
  FROM DimDate
 GROUP BY MonthId, WeekId
Run Code Online (Sandbox Code Playgroud)

3. 行号

WITH grp AS (
  SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server query

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

如果“之后”DDL 触发器导致错误,DDL 是否回滚?

已建议该DDL在逻辑上进行这样的事情:

begin
    COMMIT;
    perform any appropriate pre-DDL trigger code;
    do the ddl;
    perform any appropriate post-DDL trigger code;
    COMMIT;
exception
    when others then
         ROLLBACK;
         raise;
end;
Run Code Online (Sandbox Code Playgroud)

这表明触发器中的任何错误都会导致 DDL 回滚。是这种情况吗?

trigger oracle ddl rollback

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

获取最近的具有更高“bar”的前一行的“foo”值

从这个初始数据:

select level as foo, mod(ora_hash(level),4) as bar from dual connect by level<9;
/*
FOO                    BAR                   
---------------------- ----------------------
1                      3                     
2                      2                     
3                      3                     
4                      3                     
5                      2                     
6                      0                     
7                      3                     
8                      2                      
*/
Run Code Online (Sandbox Code Playgroud)

我想获取foo, bar, prev_foo每一行prev_foo的值,其中是foo最近的“上一个”行(由foo唯一的排序定义)的值,使得bar该行中的值大于bar当前行中的值。换句话说,我想要这个结果:

/*
FOO                    BAR                    PREV_FOO                 
---------------------- ---------------------- ----------------------
1                      3                                           
2                      2                      1                   
3                      3                                          
4                      3                                           
5                      2                      4                     
6                      0                      5                    
7                      3                                           
8                      2                      7                     
*/
Run Code Online (Sandbox Code Playgroud)

我如何实现这一目标?

oracle oracle-10g-r2

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

是否有 pgadmin 插件的存储库?

我已经将 PostgreSQL 与 PGAdmin III 一起使用了一段时间,但一直困扰着我,有一个插件菜单选项是空的。我在谷歌上搜索了一些并在这里和那里找到了一个插件,但我想知道是否有我错过的存储库?

如果您不知道 repo 但知道其他插件,请也让我知道它们。

postgresql pgadmin

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

如何在一个语句中组合“删除”和“插入”操作?

对于以下数据,我希望能够删除一些行并插入其他行并给出以下结果。这是否可以通过单个语句(例如使用merge语句)实现?

create table product(product_id integer primary key);
insert into product(product_id) values(1);
insert into product(product_id) values(2);
insert into product(product_id) values(3);

create table split( parent_id integer not null references product, 
                    child_id integer not null references product,
                    primary key(parent_id, child_id) );

insert into split(parent_id, child_id) values(1,2);
insert into split(parent_id, child_id) values(1,3);

create table sale(sale_at date, product_id integer references product);

insert into sale(sale_at, product_id) values(sysdate, 1);
insert into sale(sale_at, product_id) values(sysdate, 1);
insert into sale(sale_at, product_id) values(sysdate, 1);
insert into …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2

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

如何在没有“cluster”命令的排他锁和日志开销的情况下实现行集群?

CLUSTER大表上的命令可能需要很长时间,并且在运行时会阻止对表的读取和写入

我不需要按索引顺序对表中的数据进行严格排序,我只希望通常一起查询的行更有可能位于同一个数据库块中,而不是均匀地分散在表中(这是它们的分布)由于日期插入表格的方式的性质,自然有)。

它可以产生很大的不同。在下面的示例中,唯一的区别是insert有一个额外的,order by mod(g,10)以便测试数据由 预先聚类host_id。当获取一个特定host_id.

是否有某种方法可以在没有排它锁和cluster命令的日志记录开销的情况下实现这种集群?

create schema stack;
set search_path=stack;
--
create table foo(host_id integer, bar text default repeat('a',400));
insert into foo(host_id) select mod(g,10) from generate_series(1,500000) g;
create index nu_foo on foo(host_id);
explain analyze select count(bar) from foo where host_id=1;
/*
                                                            QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=30188.66..30188.67 rows=1 width=404) (actual time=1129.858..1129.859 rows=1 loops=1)
   ->  Bitmap Heap Scan on foo  (cost=919.27..30066.46 rows=48883 width=404) (actual time=253.149..1110.013 …
Run Code Online (Sandbox Code Playgroud)

postgresql clustering postgresql-9.3

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

我可以在包含主键列的复合外键上使用 `on delete set null` 吗?

文件说

限制和级联删除是两个最常见的选项。RESTRICT 防止删除引用的行。NO ACTION 意味着如果检查约束时仍然存在任何引用行,则会引发错误;如果您未指定任何内容,则这是默认行为。(这两个选择之间的本质区别是 NO ACTION 允许将检查推迟到事务的后期,而 RESTRICT 不允许。) CASCADE 指定当删除引用的行时,应自动删除引用它的行以及。还有另外两个选项:SET NULL 和 SET DEFAULT。当引用的行被删除时,这些会导致引用行中的引用列分别设置为空值或它们的默认值. 请注意,这些并不能免除您遵守任何约束条件。例如,如果操作指定了 SET DEFAULT 但默认值不满足外键约束,则操作将失败。

但是没有说明on delete set null如果只有一个外键列可以为空,或者如果它只是将可空部分设置为空,是否会失败,是吗?

postgresql foreign-key postgresql-9.3 cascade

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

Oracle 审计:为什么登录少于注销的 0.1%?

我在数据库中通过清理看到以下数量的登录、注销和注销:

SQL> select action_name, count(*) qty
from Dba_audit_session
group by action_name
order by 1;  2    3    4

ACTION_NAME                        QTY
--------------------------- ----------
LOGOFF                         1946180
LOGOFF BY CLEANUP               754683
LOGON                             1026
Run Code Online (Sandbox Code Playgroud)

登录少于注销的 0.1% 是没有意义的。

任何想法为什么?

oracle audit oracle-9i

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