|Oracle9i SQL Reference
Release 2 (9.2)
Part Number A96540-02
LINK statement to create a database link. A database link is a schema object in one database that enables you to access objects on another database. The other database need not be an Oracle system. However, to access non-Oracle systems you must use Oracle Heterogeneous Services.
Once you have created a database link, you can use it to refer to tables and views on the other database. In SQL statements, you can refer to a table or view on the other database in by appending
@dblink to the table or view name. You can query a table or view on the other database with the
SELECT statement. You can also access remote tables and views using any
To create a private database link, you must have
LINK system privilege. To create a public database link, you must have
LINK system privilege. Also, you must have
SESSION privilege on the remote Oracle database.
Oracle Net must be installed on both the local and remote Oracle databases.
SHARED to use a single network connection to create a public database link that can be shared among multiple users.
Oracle9i Heterogeneous Connectivity Administrator's Guide for more information about shared database links
PUBLIC to create a public database link available to all users. If you omit this clause, the database link is private and is available only to you.
Specify the complete or partial name of the database link. If you specify only the database name, Oracle will implicitly append the database domain of the local database.
If the value of the
GLOBAL_NAMES initialization parameter is
TRUE, then the database link must have the same name as the database to which it connects. If the value of
FALSE, and if you have changed the global name of the database, then you can specify the global name.
The maximum number of database links that can be open in one session or one instance of a Real Application Clusters configuration depends on the value of the
OPEN_LINKS_PER_INSTANCE initialization parameters.
You cannot create a database link in another user's schema, and you cannot qualify
dblink with the name of a schema. (Periods are permitted in names of database links, so Oracle interprets the entire name, such as
ralph.linktosales, as the name of a database link in your schema rather than as a database link named
linktosales in the schema
TO clause lets you enable a connection to the remote database.
CURRENT_USER to create a current user database link. The current user must be a global user with a valid account on the remote database for the link to succeed.
If the database link is used directly, that is, not from within a stored object, then the current user is the same as the connected user.
When executing a stored object (such as a procedure, view, or trigger) that initiates a database link,
CURRENT_USER is the username that owns the stored object, and not the username that called the object. For example, if the database link appears inside procedure
scott.p (created by
scott), and user
jane calls procedure
scott.p, the current user is
However, if the stored object is an invoker-rights function, procedure, or package, the invoker's authorization ID is used to connect as a remote user. For example, if the privileged database link appears inside procedure
scott.p (an invoker-rights procedure created by
scott), and user Jane calls procedure
jane and the procedure executes with Jane's privileges.
Specify the username and password used to connect to the remote database using a fixed user database link. If you omit this clause, the database link uses the username and password of each user who is connected to the database. This is called a connected user database link.
Specify the username and password on the target instance. This clause authenticates the user to the remote server and is required for security. The specified username and password must be a valid username and password on the remote instance. The username and password are used only for authentication. No other operations are performed on behalf of this user.
You must specify this clause when using the
Specify the service name of a remote database. If you specify only the database name, then Oracle implicitly appends the database domain to the connect string to create a complete service name. Therefore, if the database domain of the remote database is different from that of the current database, you must specify the complete service name.
Oracle9i Database Administrator's Guide for information on specifying remote databases
The examples that follow assume two databases, one with the database name "
local" and the other with the database name "
remote". The examples use the Oracle domain. Your database domain will be different.
The following statement defines a shared public database link named
remote that refers to the database specified by the service name '
This database link allows user
hr on the
local database to update a table on the
remote database (assuming
hr has appropriate privileges):
In the following statement, user
hr on the
remote database defines a fixed-user database link named
local to the
hr schema on the
Once this database link is created,
hr can query tables in the schema
hr on the
local database in this manner:
hr can also use DML statements to modify data on the
INSERT INTO employees@local (employee_id, last_name, email, hire_date, job_id) VALUES (999, 'Claus', 'email@example.com', SYSDATE, 'SH_CLERK'); UPDATE jobs@local SET min_salary = 3000 WHERE job_id = 'SH_CLERK'; DELETE FROM employees@local WHERE employee_id = 999;
Using this fixed database link, user hr on the
remote database can also access tables owned by other users on the same database. This statement assumes that user
SELECT privileges on the
oe.customers table. The statement connects to the user
hr on the
local database and then queries
customers table. :
The following statement defines a current-user database link using the to the
remote database, using the entire service name as the link name:
The user who issues this statement must be a global user registered with the LDAP directory service.
You can create a synonym to hide the fact that a particular table is on the
remote database. The following statement causes all future references to
emp_table to access the
employees table owned by
hr on the