Remote access using Oracle DBLINK

The easiest way to access from an Oracle database objects from another Oracle database is using a DBLINK (being the easiest does not mean that it is always the most desirable, the abuse of DBLINKS can create many problems, both of performance and safety)

To do this it's necessary a user with CREATE DATABASE LINK privilege, and create a DBLINK in the source database (A) by a simple statement such as:

Create database link LNK_from_A_to_B connect to USER identified by PASSWORD USING 'B'; 

'LNK_from_A_to_B' is the name of the link, 'USER' and 'PASSWORD' are the IDs of the user who will use the link to connect, which will inherit the permissions of all access through the link, and B is the name of the database's instance.

Using the DBLINK we can connect to the objects with the remote database's permissions that user has been provided in the creation statement.

To reference an object from the remote database should indicate the name of the object, concatenated with the character '@' and the name that we had given to the DBLINK.

Example: 

select * from TABLA@LNK_from_A_to_B 

UPDATE with JOIN in ORACLE

Suppose we want to update in our ORACLE database the costs fields of the fact table FAC_TABLE with the unit cost of our table COSTS.

We can do this in two ways:

1. (Slow, but valid for a few data or to sporadic uses)

update FAC_TABLE ft  set UNIT_COST = (select distinct UNIT_COST from COSTS ct  where (ft.id_article = ct.id_article);

2. (The best way is this, and the performance is ideal if you have constraints)

UPDATE ( SELECT ft.UNIT_COST AS old_cost,  ct.UNIT_COST AS new_cost FROM FAC_TABLE ft  INNER JOIN COSTS ct ON ft.id_article ct = ct.id_article) )  SET old_cost = new_cost;

To the proper functionality of this second option you need a UNIQUE or PRIMARY KEY constraint on ct.id_articulo. 
If you don't have this constraint, you can use the hint / * + BYPASS_UJVC * / after the word UPDATE (Bypass update join view constraint).

The performance increase if we have the constraint but even without it, the second option should run quite faster than the first option.

 

Login with SQLPlus as a DBA without entering password

If you have the system user who installed the database you can enter SQL Plus as DBA user, without entering a password as follows:

1. Enters the system with this user. 
2. From the command line, go into SQLPlus typing:

> sqlplus "/as sysdba"

If you need to enter using this way because you forgot the password of a user, you can easily change it: 

SQL> alter user user_name identified by new_password;

It can be more than one Database installed on the server, so you have to validate that the environment variables of the Oracle's user are pointing to your database.

For verifying that you has login into the correct database you can execute this statement: 

SQL> select name from v$database; 

The Oracle listener

In order to access to the same database where are you working outside the database server you must activate the service called listener, it has to be listening.

It can happens that the database is properly raised and can not connect from other servers, which are also set correctly (correct TNSNAMES, etc.).. 

In these cases could be that the listener has a problem, or simply has not been initiated.

To Check the status, start or stop it is very simple. Just open a command line session (console terminal, etc..) with the user that has installed the database, and run the lsnrctl command with the following parameters:

  • Check your state:
      > lsnrctl status

  • Stop the listener:
      > lsnrctl stop

  • Start the listener:
      > lsnrctl start

Keep in mind that when you stop the listener, the connections that are already in the database won't be closed, so a short stop is not very traumatic, only connections trying to enter while the listener is stopped are rejected, should not affect anyone who already has an opened session.

Differences between Oracle, SQL Server, DB2, MySQL and other ..

The operation of databases from different manufacturers is similar, but there are many differences between them, even at level of SQL syntax.

For example, if you knows Oracle, and one day you have to do a date conversion with MySQL, you will wonder the following:

- How to do a TO_DATE () / TO_CHAR () with MySQL? 

I open this blog entry to discuss different ways of doing things with each database type. 

Here I link the SQL Tips Bristle Software , which explains quite well how to do some things with MySQL, Oracle and SQL Server, and I find especially useful the chapter on differences between Oracle and SQL Server

How to connect from Oracle SQL Developer with a remote SQL Server

I tried to create a connection in SQL Developer with a remote SQL Server database. The first steps to configure Oracle SQL Developer are described in the introductory article to SQL Developer, and had already done some testing with a SQL Server installed on the same machine as SQL Developer, but when I tried to do it with a remote BD SQL Server I found some additional difficulty that I think it's interesting to comment.

How to connect to a remote MySQL database

MySQL has some special features when making a connection from a remote client that if we do not know can complicate access to a MySQL database from a different machine that hosts the database.

With other databases such as Oracle or SQL Server, once that no firewall or anything like that prevents us from the client machine access to the server, using normally data acces from a database user we can 'enter'.

With MySQL, although access to the port, usually 3306, is open, the database can be configured to shut out external connections, and the result is the same as if the port was closed by a firewall..