我们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导入(或导出)期间跳过统计信息?
我在 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 条消息
我想让我的数据库中的所有外键都可以延迟。但是不可能改变现有的约束。所以我需要删除并再次添加每个外键。如何自动完成?
当我运行以下查询时,
SELECT engines, manufacturer, model, MAX(seats)
FROM planes
GROUP BY engines;
Run Code Online (Sandbox Code Playgroud)
我得到了正确的引擎和座椅结果,但不是正确的制造商、型号组合。此外,我需要的座位数有多个具有相同最大值的行,但引擎/座位只得到一个结果。我已经查看了其他 Stack Exchange 帖子和其他地方,但似乎找不到解决查询的好方法。有什么建议吗?
是否可以比较两个用户对一个 SQL Server 数据库的权限?
有什么简单的查询可以做到吗?
我问这个是因为我想知道用户 B 在数据库上是否与用户 A 具有不同或相同级别的权限。
我们有一个 120GB 的数据库。有一个包含 60GB 数据的表,这是无用的,我们已经截断了它。
现在数据库大小为 120GB,可用空间为 60GB。数据库至少在 3 个月内不会增长到 60GB。所以我们可以缩小数据文件。
我知道碎片问题。我可以重建我的索引,因为我们的不是 24*7 的数据库。
请建议缩小MDF文件
我们有一个每 24 小时运行一次的第三方服务器备份工具,它备份所有内容(文件和数据库,为裸机恢复做准备)。经过大量调查,发现该工具使用了非copy_only备份,从而破坏了系统数据库和我们自己的日志链。
(我一直在研究是否应该备份系统数据库,由于他们持有的关于 SQL Server 一般的数据(例如用户、代理作业等),共识通常是肯定的。这不是关于他们的内容,但如果由于我描述的情况而在恢复后丢失会发生什么)。
为了阻止这种犯罪,我禁用了执行数据库备份的工具,所以现在它只执行文件备份(MDF/LDF 文件除外)。然后我安排 SQL 代理每小时运行一次备份,然后将它们发送到我的私有云。
如果服务器完全故障,并且需要裸机备份,我希望在 SQL 开始备份时数据库不会在那里,因为它们没有被工具备份/恢复(尽管我安全地拥有它们备份)。
此时实际发生了什么?SQL Server 是否会重新创建系统数据库,然后我可以将其还原?或者,它是否只是拒绝启动而我会遇到麻烦?
背景:
我的部门正在从带有镜像的 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 的小型组织,需要对所采取的行动有所选择。
我一直在寻找一个很好的资源,其中循环依赖得到了很好的解释,不幸的是没有找到好的资源。因此,我试图确切地了解我应该避免哪种循环依赖。问题是我发现了一些以矛盾方式解释的资源。有人可以准确解释一下我们应该避免哪些类型的循环依赖(以及为什么)?
以这些关系为例:
这里提到这种关系是不好的(我不明白为什么)。
但是,这里提到了相同的关系不是问题(并被描述为非循环):
Models <--------------------------- SuperSets
^ ^
| |
| |
Tasks <---------------------------- Sets
Run Code Online (Sandbox Code Playgroud)
另一个例子是这样的:
我也不明白为什么这是一个循环关系?
在我看来,以前的所有关系都不是曲线(箭头方向不会回到同一点)。我认为我对循环依赖项的理解有问题。有人可以为我解释一下,特别是在前面的例子中吗?
我最近在 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
我期望 …
sql-server ×3
mysql ×2
postgresql ×2
datafile ×1
ddl ×1
foreign-key ×1
index ×1
optimization ×1
oracle ×1
permissions ×1
relations ×1
restore ×1
shrink ×1
sql-standard ×1
statistics ×1
update ×1
users ×1