我可以通过数据库链接在Oracle中调用存储过程吗?
数据库链接功能正常,因此语法如......
SELECT * FROM myTable@myRemoteDB
Run Code Online (Sandbox Code Playgroud)
正在运作.但是有一个语法...
EXECUTE mySchema.myPackage.myProcedure('someParameter')@myRemoteDB
Run Code Online (Sandbox Code Playgroud) 我需要在MySQL中创建一个数据库链接以连接到Oracle数据库,以使用Oracle数据库中的表.
我无法在MySQL中找到任何创建数据库链接的代码或方法.我怎么能这样做?
AM_ADMIN我通过 SQL Developer创建了一个数据库链接:

我正在尝试检查它是否是有效的数据库链接。当我从 SQL Developer 向导测试它时,它是成功的。但是当我使用以下命令时:
SELECT * FROM dual@AM_ADMIN
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ORA-02019: 未找到远程数据库的连接描述
我该如何纠正这个错误?
我需要创建一个数据库链接,该链接是指向同一服务器上的模式的链接.是否有一个特殊的关键字用于此?(如本地或本地主机)
我不完全确定服务器的名称在tnsnames中是什么,这可能是我的问题的一部分.
这是一个复杂的情况,涉及需要数据库链接继续的脚本.
我有3个数据库.1链接到2,链接到3.我想查询3中的表,从1.我尝试了third_db_tab @ 3 @ 2,它没有用.想知道这是否可能,如果是,那么语法是什么.
在创建数据库链接之前,我需要检查数据库链接是否已存在.我怎样才能做到这一点?
我正在编写一个以此开头的SQL脚本:
DROP DATABASE LINK mydblink
Run Code Online (Sandbox Code Playgroud)
然后我创建一个:
CREATE DATABASE LINK mydblink
CONNECT TO testuser
IDENTIFIED BY mypswd
USING 'mypersonaldb'
Run Code Online (Sandbox Code Playgroud)
如果数据库链接不存在,我当然会在第一步中收到错误.如果我省略第一步并继续创建数据库链接,我将再次收到一条错误消息,说明它已经存在同名.
我该怎么做才能检查数据库链接是否已经存在?
在 Oracle 数据库中,定期执行一个大型 PL/SQL 过程,通过数据库链接将数据从一个数据库复制到另一个数据库,几个小时后该过程失败并出现以下错误:
ORA-03150: end-of-file on communication channel for database link
ORA-02063: preceding line from DBPREMOTE
ORA-06512: at "DBLOCAL.JOB_NAME", line 710
...
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
第 710 行是过程的第一行:
execute immediate 'set constraints all deferred';
Run Code Online (Sandbox Code Playgroud)
然后该过程执行一些插入和更新,我猜由于 PK、数据无效或任何其他原因,这些操作在某些时候会失败。我猜想异常指向该行是因为它是第一行,而不是因为它实际上在那里失败,但我不确定真正的异常。
我是否有机会获得真正的异常,以便我可以处理它?
我有几个Oracle数据库,我的内部应用程序正在运行.这些应用程序使用dba_jobs和dba_scheduler_jobs.
我想编写监控功能:check_my_jobsNagios会定期调用它来检查我的工作是否一切正常.(它们正在运行吗?它是否已损坏?next_run_date是否已延迟?依此类推)
解决方案:由于我必须监视不同数据库上的作业,因此有两种实现解决方案的方法:
仅在一个数据库上创建监视功能和配置表,该数据库将使用数据库链接检查每个数据库上的作业.
优点:集中功能,易于维护.
缺点:我必须使用数据库链接进行检查.
在我想要检查作业的每个数据库上创建监视功能和配置表.
专业人士:我不必使用数据库链接
缺点:每个数据库上都有重复的监控代码
哪种解决方案更好?
我正在尝试从远程表中获取数据。使用递归 CTE 从本地表中的种子数据集扩展数据。查询非常慢(300 个种子行到 800 个最终行需要 7 分钟)。
对于其他“微小的本地,巨大的远程” -没有递归查询的情况,DRIVING_SITE提示效果很好。我还尝试将种子集从本地表导出到remotedb具有相同结构的辅助表中,并且 - 已登录remotedb- 作为纯本地查询(my_tableas p,my_table_seed_copyas i)运行查询。花了 4 秒,这鼓励我相信强制查询到远程站点会使查询更快。
强制 Oracle 在远程站点上执行递归查询的正确方法是什么?
with s (id, data) as (
select p.id, p.data
from my_table@remotedb p
where p.id in (select i.id from my_table i)
union all
select p.id, p.data
from s
join my_table@remotedb p on ...
)
select /*+DRIVING_SITE(p)*/ s.*
from s;
Run Code Online (Sandbox Code Playgroud)
在上面的查询中,我试过
select /*+DRIVING_SITE(p)*/ s.* 在主要选择select /*+DRIVING_SITE(s)*/ s.* 在主要选择 …我们有2个Oracle数据库.一个是我们的生产客户数据库.另一个是测试数据库.测试数据库是没有任何数据的生产副本......只是空表.我试图找到一种有效且有效的方法将一组样本数据从Production db复制到Test.
我需要从Customer表中的PK示例列表开始,并编写一个过程来使用该示例填充测试数据库Customer表.然后,我需要根据示例使用相关数据填充子表.
我们曾经有一个Java进程,它将使用预准备语句从Production中选择数据...根据结果集构建文件...然后使用update语句将其放入Test db.这非常低效.
我不是DBA所以我对这个领域知之甚少.我试图谷歌一些关于数据库链接的信息,但找不到很好的例子.
有谁知道这样做的方法......或者,至少给我一个起点?