我想将 MySQL 数据库的内容复制到 MS SQL Server 2008 数据库。
这可能吗?任何人都可以概述实现这一目标所需的步骤吗?
谢谢。
在同一台物理机上跨另一个数据库执行选择时是否会影响性能?所以我在同一个 SQL 2008 实例中运行的同一台物理机器上有 2 个数据库。
例如在 SomStoreProc on_this_db 我运行 SELECT someFields FROM the_other_db.dbo.someTable
到目前为止,我在互联网上读到的内容,大多数人似乎都表示不。
在 Oracle 11.2 之前,我使用自定义聚合函数将一列连接成一行。11.2 增加了这个LISTAGG功能,所以我想改用它。我的问题是我需要消除结果中的重复项,但似乎无法做到这一点。
这是一个例子。
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
Run Code Online (Sandbox Code Playgroud)
我想看到的是:
NUM1 NUM2
---------- ---------------------
1 2
2 2 << Duplicate 2
3 3
4 4
5 5
6 6
Run Code Online (Sandbox Code Playgroud)
这是一个listagg接近但不消除重复的版本。
SELECT Num1, listagg(Num2,'-') WITHIN GROUP (ORDER BY NULL) OVER …Run Code Online (Sandbox Code Playgroud) 我试图在使用 Hadoop 和 HBase 的系统设置与使用 Oracle DB 作为后端实现相同的系统设置之间进行比较。我缺乏有关 Oracle 方面的知识,因此请进行公平比较。
我正在寻找处理特定工作负载(硬件、操作系统、软件堆栈等)所需的 Oracle 设置类型。
工作负载和非功能需求大致是这样的:
4 小时内,具有一个简单关系和多个(非文本)索引的两个表上的 12M 事务。这相当于每秒 833 笔交易 (TPS),持续。这需要每 8 小时进行一次。
确保所有写入都是持久的(因此在集群设置的情况下,正在运行的事务可以在机器故障时幸免于难)并且具有不错的可用性水平?
有了不错的可用性水平,我的意思是常规故障(例如磁盘和单个网络接口/tcp 连接断开)不需要人为干预。罕见的故障可能需要干预,但应该通过启动可以快速接管的冷备用来解决。
另外添加另外 300 TPS,但是这些是否在许多表中几乎连续 24/7 发生(但都是成对的,具有相同的简单关系和多个索引)?
一些上下文:此工作负载是 24/7,系统需要保存 10 年的历史数据可用于实时查询。查询性能可能比亚秒级差一点,但必须足够活跃以考虑日常使用。
ETL 作业的设置方式几乎没有流失。同样在关系设置中,这种工作负载会导致很少的锁争用。我希望索引更新是主要的痛苦。为了尽可能公平地进行比较,我期望 Oracle 提供的最宽松的一致性级别。
我无意抨击 Oracle 以支持某些非关系数据库解决方案。我认为它是一个很好的数据库,有很多用途。我试图了解像我们一样使用开源(和 NoSQL)与使用商业支持的、经过验证的设置之间的权衡。
有谁知道是否有办法确认 MySQL 是否正在读取 my.cnf 文件?
我在机器上只有一个 my.cnf(并且没有 my.ini 文件),我在 /etc/my.cnf 中有。
当我运行时./mysqld --help --versbose,它没有给我我在文件中设置的变量,所以我假设它没有加载它或者它正在加载一个不同的文件。
我通过将 my.cnf 设置为 777 并再次运行该命令进行了测试,这次我收到一条警告,说该文件不会被加载,因为它是全局可写的。
这是否足以暗示 my.cnf 已被加载,并且其中可能存在错误,导致未设置变量,或者是否有其他方法可以确定加载了什么(如果有)my.cnf 文件?
PL/SQL 中的过程可以有参数的默认值,但调用者可以传递与默认值相同的值。有没有办法从 PL/SQL 内部确定是否传递了参数?正如暗示的那样,这不能通过将值与默认值进行比较来完成。
我正在寻找最好的方法来更改数据库中表上的主键,而不必再次从文件中完全重新插入数据。我将要进行的修改将删除部分主键,这将导致需要整理数万行。
被删除的密钥部分是日期字段,最初需要它来帮助唯一标识传入数据。但是,此字段在源(不受我的控制)分配的方式已经改变,我们现在只想保留特定记录的最早出现并丢弃较晚出现的。
键中的其余字段(4 个 FK)将产生唯一的记录。
我假设我需要将数据传输到另一个表,进行更改然后重新插入?或者,还有更好的方法?
我管理一个应用程序,它有一个非常大的(近 1TB 的数据,一个表中有超过 5 亿行)Oracle 数据库后端。数据库并没有真正做任何事情(没有 SProcs,没有触发器或任何东西)它只是一个数据存储。
每个月我们都需要从两个主表中清除记录。清除的标准各不相同,是行年龄和几个状态字段的组合。我们通常最终每月清除 10 到 5000 万行(我们每周通过导入增加大约 3 到 500 万行)。
目前我们必须分批进行大约 50,000 行的删除(即删除 50000、提交、删除 50000、提交、重复)。尝试一次删除整个批次会使数据库在大约一个小时内没有响应(取决于行数)。像这样批量删除行在系统上是非常粗糙的,我们通常必须“在时间允许的情况下”在一周内完成;允许脚本连续运行会导致用户无法接受的性能下降。
我认为这种批量删除也会降低索引性能,并有其他影响最终导致数据库性能下降。一张表就有34个索引,索引的数据量实际上比数据本身还大。
这是我们的一位 IT 人员用来执行此清除操作的脚本:
BEGIN
LOOP
delete FROM tbl_raw
where dist_event_date < to_date('[date]','mm/dd/yyyy') and rownum < 50000;
exit when SQL%rowcount < 49999;
commit;
END LOOP;
commit;
END;
Run Code Online (Sandbox Code Playgroud)
该数据库必须达到 99.99999%,而且我们每年只有 2 天的维护窗口。
我正在寻找一种更好的方法来删除这些记录,但我还没有找到。有什么建议?
我希望能够运行查询以获取有关数据库状态的关键信息。即,我希望查询能够判断数据库是否处于良好状态。
这是我为此检查继承的查询:
SELECT name AS [SuspectDB],
DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect],
DATABASEPROPERTY(name, N'IsOffline') AS [Offline],
DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency],
has_dbaccess(name) AS [HasDBAccess]
FROM sysdatabases
WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1)
OR (DATABASEPROPERTY(name, N'IsOffline') = 1)
OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1)
OR (has_dbaccess(name) = 0)
Run Code Online (Sandbox Code Playgroud)
如果该查询返回任何结果,则假定数据库处于可疑或潜在的不良状态。
有一个更好的方法吗?
基本上我有两个标量 UDF 输出相同的数据,一个使用游标,一个使用递归 CTE。我想确定应该使用哪个并丢弃另一个;我更愿意根据实际性能数据做出这个决定。我也很好奇这两者之间有多大的区别。
如何对这些 UDF 的性能进行基准测试以确定哪个更快?
oracle ×4
mysql ×2
performance ×2
aggregate ×1
benchmark ×1
delete ×1
my.cnf ×1
oracle-11g ×1
plsql ×1
primary-key ×1
replication ×1
sql-server ×1