oracle 如何使用dblink从远程数据库创建表

rseugnpd  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(424)

如何使用dblink从远程数据库创建表

create table MYTABLE@DBLINK (name varchar2(20)));

*原因:试图对远程数据库使用DDL操作。例如,“CREATE TABLE tablename@remotedbname...”。
*操作:要更改远程数据库结构,必须使用适当的权限连接到远程数据库。

这是一个特权错误,还是无法使用dblink?

r6vfmomb

r6vfmomb1#

如果您设法创建了一个数据库链接,那么您显然拥有该用户的凭据,因此最简单的选择是以 remote user 的身份进行连接,并直接在该模式中创建表。
如果你想从你的schema中完成它,你不能使用那个语法,但是-有一个解决方案:dbms_utility.exec_ddl_statement
举个例子。
数据库链接优先:

SQL> create database link dbl_mike connect to mike identified by lion using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = my_server)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XEPDB1)))';

Database link created.

有用吗?好耶!

SQL> select * from dual@dbl_mike;

D
-
X

这是你尝试过的,发现它不会工作:

SQL> create table test_dbl@dbl_mike (id number);
create table test_dbl@dbl_mike (id number)
                     *
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database

我提到的解决方法:

SQL> exec dbms_utility.exec_ddl_statement@dbl_mike('create table test_dbl (id number)');

PL/SQL procedure successfully completed.

测试(如果表存在,我可以通过数据库链接插入一行并从该表中选择):

SQL> insert into test_dbl@dbl_mike (id) values (100);

1 row created.

SQL> select * from test_dbl@dbl_mike;

        ID
----------
       100

SQL>

[编辑]

如果要运行多个语句,可以使用exec逐个执行。请注意,它不会在任何地方都有效;它可以在SQL*Plus、SQL Developer和其他一些工具中运行。但是,由于它对于BEGIN-END块来说是 * 短 * 的,因此您可以/更好地

SQL> begin
  2    dbms_utility.exec_ddl_statement@dbl_mike('create table test_dbl (id number)');
  3    dbms_utility.exec_ddl_statement@dbl_mike('create table test_dbl2 (id number)');
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL>

相关问题