我正在使用 Oracle 11gR1。作为项目的一部分,我必须通过禁用一些可能导致数据库损坏的约束(触发器和检查约束)来执行多个更新语句。
如果数据库损坏,我必须完全重新导入它,这是一项耗时的额外任务。
我对 Oracle Flashback 特性知之甚少。Flashback 会帮助我避免这些不必要的导入吗?如果出现任何问题,我可以设置一些稳定点并切换回那里吗?
有人可以给我简要介绍一下这个功能吗?
如果它符合我的要求,我会努力学习。
我尝试使用以下步骤计算审计日志表的使用情况:
AUD$
)测量 dba 段上使用的字节。
select tablespace_name,bytes from dba_segments
where tablespace_name ='SYSTEM'
and SEGMENT_NAME = 'AUD$';
Run Code Online (Sandbox Code Playgroud)重新计算统计数据。
检索统计数据中使用的字节。
select NUM_ROWS * AVG_ROW_LEN as BYTE_USED
from DBA_TABLES where TABLE_NAME = 'AUD$';
Run Code Online (Sandbox Code Playgroud)我从#3 得到的值是#5 的两倍多,为什么分配太多了?
如何配置 SQL Server 2012 以使用多个 NIC?
我有一台带有 4 个 NIC 的服务器。我想使用 2 个 NIC 来查询我的数据库,并使用 2 个 NIC 从中检索结果。
我希望它们在负载平衡模式下工作,并且在出现一个缺口时仍能继续工作。
有可能的?
我需要编写一个只插入一行的查询,即使该查询运行多次。作为 SQL 的新手(以及新的),我做了一个,if not exists(...)
但一个朋友说他更喜欢删除该行,如果它存在,然后再次添加它。
EXISTS
或反之亦然可能有什么好处?我看到很多博客都说缩小不是一个好习惯,因为它会降低系统的性能。我同意所有这些会导致诸如碎片等副作用的事情。
现在我的疑问是我应该在数据库中使用收缩选项的场景是什么。
我从未见过有人说它有用的场景。收缩总是邪恶的吗?
假设我有一个名为的表tblTemp
,其中包含以下数据:
| ID | AMOUNT |
----------------
| 1 | 10 |
| 1-1 | 20 |
| 1-2 | 30 |
| 1-3 | 40 |
| 2 | 50 |
| 3 | 60 |
| 4 | 70 |
| 4-1 | 80 |
| 5 | 90 |
| 6 | 100 |
Run Code Online (Sandbox Code Playgroud)
X
如果 ID 只有一个 ID 或 ( X-Y
) 如果它是新 ID ( Y
) 是( ) 的子代,则ID 将被格式化为(不带破折号X
)。
我想添加一个新列( …
我正在记录一个事件表,并且想要一个输出(如本答案底部所示),问题是我正在获取行中的数据,但希望它们按列显示。
两个维度如下:
我想我必须按时间部分(例如按分钟或每小时)对日期时间值进行分组并检索每个服务器的事件列表,但我不知道如何编写查询?我需要一个by子句吗?
我已经写好了create语句,结构如下:
CREATE TABLE [dbo].[events](
[guidEventId] [uniqueidentifier] PRIMARY KEY,
[dtStart] [datetime2](7) NOT NULL,
[nDirection] [int] NOT NULL,
[nServerId] [int] NOT NULL
)
INSERT INTO events
([guidEventId],[dtStart],[nDirection],[nServerId])
VALUES
(newId(),'2013-08-01 00:01:00','0','1'),
(newId(),'2013-08-01 00:02:00','1','1'),
(newId(),'2013-08-01 00:03:00','0','1'),
(newId(),'2013-08-01 00:04:00','1','2'),
(newId(),'2013-08-02 00:01:00','0','1'),
(newId(),'2013-08-02 00:02:00','1','2'),
(newId(),'2013-08-02 00:03:00','0','2'),
(newId(),'2013-08-02 00:04:00','1','2');
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!6/25e74
茶几应该看起来像这样(白天):
DateTime | Server1 | Server2 | Sum |
--------------------------------------------
2013-08-01 | 3 | 1 | 4 |
2013-08-02 | 1 | 3 | 4 |
Run Code Online (Sandbox Code Playgroud) 这是我第一次处理大型数据库,我想知道为什么下面的两个查询在执行计划方面是不同的。
我在特定表上设置了索引:
CREATE NONCLUSTERED INDEX [IX_UBHSD_xploc_trandt2] ON [dbo].[UBHSD]
(
[xploc] ASC, [trandt2] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,它使用索引。
SELECT COUNT(*) as cnt
FROM [dbo].[UBHSD]
WHERE [xploc] != '' AND [trandt2] >= CAST('2012-01-01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
但是当我在不使用聚合的情况下运行查询时:
SELECT *
FROM [dbo].[UBHSD]
WHERE [xploc] != '' AND [trandt2] >= CAST('2008-01-01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
我期望两个查询都使用索引。但是第二个查询执行全表扫描。
为什么会这样?我错过了什么?
我有兴趣生成以下视图,其中对不同的交货日期进行编号。
SalesID Delivery Date DateNo
SO00000014 2014-02-21 1
SO00000015 2014-02-13 1
SO00000016 2014-01-28 1
SO00000017 2014-03-17 1
SO00000018 2014-02-13 1
SO00000020 2014-03-19 1
SO00000020 2014-03-20 2
SO00000020 2014-03-21 3
Run Code Online (Sandbox Code Playgroud)
我的问题是如何对与上面 SO00000020 中的单个 SalesId 关联的不同日期进行编号。我正在使用 SQL Server 2008。
我正在阅读有关 Oracle 的内容,我对这两个名称感到困惑:service_name
数据库名称。它们都引用使用命令创建数据库时使用的数据库名称吗CREATE DATABASE xxxxxx
?
服务名称可以与数据库名称不同吗?如果是,我们如何将服务名称映射到服务器上的数据库名称?因为作为客户端,我们使用服务名来连接数据库,那么服务端如何将服务名映射到数据库名呢?
sql-server ×6
oracle ×3
t-sql ×2
datetime ×1
flashback ×1
group-by ×1
insert ×1
shrink ×1
statistics ×1
tablespaces ×1