我搜索了几个解决方案.其中之一是以下内容:
原因 需要远程映射语句,但无法实现,因为global_names应设置为TRUE才能实现
操作 问题alter session set global_names = true如果可能
但我不明白为什么我需要设置global_names参数...为什么远程映射使用global_names参数?拜托,你能解释一下吗?
PS我知道设置global_names参数会出现全局命名规则,数据库链接名必须与远程数据库名相同.它还会将域名附加到数据库名称,如<DB_NAME>.<DB_DOMAIN>还有什么?
kup*_*upa 13
答案在这里讨论:http://dba010.wordpress.com/2011/01/05/oracle-errorsora/#ORA-02069
如果链接不起作用:
错误:
ORA-02069:此操作必须将global_names参数设置为TRUE
原因:
您正尝试使用本地函数在远程数据库上进行DML操作.
这是"Oracle Bug",它应该可以工作,但事实并非如此.
示例(为了更好地理解):
- 假设我们有两个数据库DB1和DB2
- 在DB1上我们有函数fun1
create function fun1 return number is
begin
return 1;
end;
Run Code Online (Sandbox Code Playgroud)
- 在DB1上,我们有一个引用DB2的数据库链接,为简单起见,称为DB2.
- 检查它是否有效.
select *
from dual@DB2
Run Code Online (Sandbox Code Playgroud)
- 如果输出如下,那么它可以工作.
DUMMY
-----
X
Run Code Online (Sandbox Code Playgroud)
-Let在DB2中创建测试表(连接到DB2数据库)
create table tesTable(
id number,
testColumn number
);
Run Code Online (Sandbox Code Playgroud)
- 让我们做一些DML操作,这会导致ORA-02069错误.
insert into testable@DB2(id,testColumn)
values(1, fun1);
“ORA-02069: global_names parameter must be set to TRUE for this operation”
Run Code Online (Sandbox Code Playgroud)
现在,当您已经知道在什么情况下发生此错误时,让我们编写解决方案.它有两个解决方案:
解决方案一:
- 在DB1上
alter session set global_names=true;
Run Code Online (Sandbox Code Playgroud)
- 在DB2上
Create database link DB1 connect to <username> identified by <password>
using ‘DB1’;
Run Code Online (Sandbox Code Playgroud)
现在它应该工作,但我应该提到创建数据库链接可能不是更好,
因为它不安全(你应该猜到为什么,因为如果你这样做,你将能够通过数据库链接与某些用户连接到DB1 ...如果它对你没关系,那么使用它J).
解决方案二:
| 归档时间: |
|
| 查看次数: |
37728 次 |
| 最近记录: |