小编a_h*_*ame的帖子

dbms_datapump API 在导入期间排除统计信息

我们dbms_datapump用于在不同服务器之间复制数据或快速设置新模式。

然而,导入统计信息通常需要很长时间,而且还有一个额外的缺点,即模式统计信息在导入后会被锁定。

所以我试图找到一种方法来跳过导入统计数据。

根据 Metalink Doc ID 1392981.1,这应该可以使用:

dbms_datapump.metadata_filter(handle => l_job_handle, 
      name => 'EXCLUDE_PATH_LIST', 
      value => '''STATISTICS''');
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,出现“ORA-39001:无效参数值”错误。

我还尝试了在不同地方找到的各种其他格式:

dbms_datapump.metadata_filter(handle => l_job_handle, 
      name => 'EXCLUDE_PATH_LIST', 
      value => 'STATISTICS');

dbms_datapump.metadata_filter(handle => l_job_handle, 
       name => 'EXCLUDE_PATH_EXPR', 
       value => 'like ''%/TABLE/STATISTICS/TABLE_STATISTICS''');

dbms_datapump.metadata_filter(handle => l_job_handle, 
       name => 'EXCLUDE_PATH_EXPR', 
       value => 'like ''%STATISTICS%''');
Run Code Online (Sandbox Code Playgroud)

但他们都带着 ORA-39001 返回。

我使用的版本是:

Oracle 数据库 11g 企业版 11.2.0.4.0 版 - 64 位生产

操作系统是 Windows Server,但这也发生在 Linux 安装上。

任何想法如何在通过DBMS_DATAPUMPAPI导入(或导出)期间跳过统计信息?

oracle statistics dbms-datapump

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

为什么添加二级索引没有提高选择性能?

我在 MySQL 中有一个名为 的表,messages如下所示:

id (primary key)   | description    |  created_at(timestamp) 
Run Code Online (Sandbox Code Playgroud)

该表应该保存我的应用程序用户之间的聊天消息。因此,对它的写操作次数会很高。

该应用程序有一个 API,可返回两个时间戳之间的所有消息。这个查询也很常见,但少于写操作的次数。

我用 100 个并发连接和该表中的大约 15000 行运行 mysqlslap,总时间约为 8.6 秒。

然后我在 上添加了一个二级索引created_at,希望在两次搜索之间在更短的时间内获得结果,但是对于相同的输入,我增加了 0.3 秒。

为什么我没有看到显着的性能提升?

编辑:

这是我的桌子的样子:

DROP TABLE IF EXISTS `mssg`;

CREATE TABLE `mssg` (
  `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
  `body` MEDIUMTEXT NULL DEFAULT NULL,
  `length` VARCHAR NULL DEFAULT NULL,
  `created_at` TIMESTAMP NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);
Run Code Online (Sandbox Code Playgroud)

这就是我添加索引的方式:

ALTER TABLE testalter_tbl ADD INDEX (created_at);
Run Code Online (Sandbox Code Playgroud)

通常,select 语句会返回大约 150 到 350 条消息

mysql index optimization

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

将所有表中的所有外键重新创建为可延迟(批处理)

我想让我的数据库中的所有外键都可以延迟。但是不可能改变现有的约束。所以我需要删除并再次添加每个外键。如何自动完成?

postgresql foreign-key ddl

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

具有相同最大值的多行

当我运行以下查询时,

SELECT engines, manufacturer, model, MAX(seats)
FROM   planes
GROUP BY engines;
Run Code Online (Sandbox Code Playgroud)

我得到了正确的引擎和座椅结果,但不是正确的制造商、型号组合。此外,我需要的座位数有多个具有相同最大值的行,但引擎/座位只得到一个结果。我已经查看了其他 Stack Exchange 帖子和其他地方,但似乎找不到解决查询的好方法。有什么建议吗?

mysql greatest-n-per-group

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

比较两个用户对 SQL Server 数据库的权限?

是否可以比较两个用户对一个 SQL Server 数据库的权限?
有什么简单的查询可以做到吗?

我问这个是因为我想知道用户 B 在数据库上是否与用户 A 具有不同或相同级别的权限。

sql-server permissions users

4
推荐指数
2
解决办法
9568
查看次数

将 mdf 文件中的可用空间释放到操作系统

我们有一个 120GB 的数据库。有一个包含 60GB 数据的表,这是无用的,我们已经截断了它。

现在数据库大小为 120GB,可用空间为 60GB。数据库至少在 3 个月内不会增长到 60GB。所以我们可以缩小数据文件。

我知道碎片问题。我可以重建我的索引,因为我们的不是 24*7 的数据库。

请建议缩小MDF文件

sql-server shrink database-size datafile

4
推荐指数
2
解决办法
4871
查看次数

如果系统数据库丢失/丢失,SQL Server 是否会重新创建系统数据库?

我们有一个每 24 小时运行一次的第三方服务器备份工具,它备份所有内容(文件和数据库,为裸机恢复做准备)。经过大量调查,发现该工具使用了非copy_only备份,从而破坏了系统数据库和我们自己的日志链。

(我一直在研究是否应该备份系统数据库,由于他们持有的关于 SQL Server 一般的数据(例如用户、代理作业等),共识通常是肯定的。这不是关于他们的内容,但如果由于我描述的情况而在恢复后丢失会发生什么)。

为了阻止这种犯罪,我禁用了执行数据库备份的工具,所以现在它只执行文件备份(MDF/LDF 文件除外)。然后我安排 SQL 代理每小时运行一次备份,然后将它们发送到我的私有云。

如果服务器完全故障,并且需要裸机备份,我希望在 SQL 开始备份时数据库不会在那里,因为它们没有被工具备份/恢复(尽管我安全地拥有它们备份)。

此时实际发生了什么?SQL Server 是否会重新创建系统数据库,然后我可以将其还原?或者,它是否只是拒绝启动而我会遇到麻烦?

sql-server restore sql-server-2012 system-databases

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

SQL Server 2017 CU1 是否会破坏无集群可用性组?

背景:

我的部门正在从带有镜像的 SQL Server 2008R2 升级到带有无集群可用性组的 SQL Server 2017。直到最近,测试才发现没有问题或危险信号。然后我们安装了 CU1,遇到了问题,卸载了 CU1,问题就消失了。操作系统是带有最新补丁的 server 2016。

CU1 后观察到的行为:

使用 SSMS 或 tsql,我们可以创建一个 2 副本无集群同步可用性组,并向其中添加一个数据库。该组可以多次故障转移而不会出现问题。啊,但是添加第二个数据库,故障转移会出现问题。其中一个数据库总是会处于不同步状态。再多的摆弄也无法让它复活。如果我删除并重新创建整个内容,则可能是其他数据库未同步。记录器中的相关错误消息是“由于异常 35222,无法更新副本状态”。这似乎是一条与集群相关的消息,但由于我们是无集群的,我感到很困惑。在我们卸载两个副本上的 CU1 后,我能够创建 AG 并添加 22 个数据库(包括两个原始数据库)。故障转移没有问题。附带说明一下,自动播种并不总是适用于多个数据库。该操作将失败并显示“种子检查消息超时”。从 AG 中删除这些数据库并一次添加一个是成功的。

我的问题是:

在 CU1 之后,是否还有其他人遇到过无集群 AG 的问题?如果是这样,你在我没有成功的地方成功了吗?

评论/意见:

我认为 CU 将在与 SP 相同的级别进行测试。虽然我知道无论测试多么彻底,错误都会出现,但在第一个测试中发生这种情况令人不安。这将导致我们在部署之前对每个 CU 进行真正的压力测试,这意味着我们不会在它们出现时部署它们。我们只会在我们认为有必要时部署它们。我们是一个没有专门的 dba 的小型组织,需要对所采取的行动有所选择。

availability-groups sql-server-2017

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

坏循环依赖的定义是什么?

我一直在寻找一个很好的资源,其中循环依赖得到了很好的解释,不幸的是没有找到好的资源。因此,我试图确切地了解我应该避免哪种循环依赖。问题是我发现了一些以矛盾方式解释的资源。有人可以准确解释一下我们应该避免哪些类型的循环依赖(以及为什么)?

以这些关系为例:

在此处输入图片说明

来源

这里提到这种关系是不好的(我不明白为什么)。

但是,这里提到了相同的关系不是问题(并被描述为非循环):

Models <--------------------------- SuperSets
   ^                                    ^
   |                                    |
   |                                    |
Tasks  <---------------------------- Sets
Run Code Online (Sandbox Code Playgroud)

来源


另一个例子是这样的:

在此处输入图片说明

来源

我也不明白为什么这是一个循环关系?

在我看来,以前的所有关系都不是曲线(箭头方向不会回到同一点)。我认为我对循环依赖项的理解有问题。有人可以为我解释一下,特别是在前面的例子中吗?

database-design relations

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

更新查询 (Postgres) 中 Set 子句的执行顺序

我最近在 Postgres 中遇到了这种奇怪的行为。我有一张像下面这样的表:

sasdb=# \d emp_manager_rel 
           表“db3004db.emp_manager_rel”
   专栏 | 类型 | 整理 | 可空 | 默认
------------+--------+-----------+------------+----- ----
 emp_id | bigint | | |
 manager_id | bigint | | |

select * from emp_manager_rel ;
 emp_id | manager_id
--------+------------
      1 | 123

我执行了以下更新语句:

更新1:

更新 emp_manager_rel 设置 manager_id = manager_id+emp_id , emp_id=emp_id*4;

更新表格如下:

emp_id | manager_id
--------+------------
      4 | 124

更新 2:我执行了以下查询(在原始表上,而不是在更新表上)

更新 emp_manager_rel 设置 emp_id=emp_id*4 , manager_id = manager_id+emp_id ;

它更新表格如下:

emp_id | manager_id
--------+------------
      4 | 124

我期望 …

postgresql update sql-standard

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