After you succeed connecting Oracle with SQL Server probably you want to create database link between it. Oracle heterogeneous services allow you to define a database link between Oracle and SQL Server, as well as links to DB2 and other inferior databases.
Here are complete notes in creating a database link between Oracle and SQL Server.
1. Install Oracle ODBC drivers on the server (your local Oracle database) that will access the remote SQL Server database using the database link.
2. Setup the ODBC connection on the local Oracle database using the Windows ODBC Data Source Administrator
3. Test the ODBC drivers to ensure that connectivity is made to the SQL Server database.
4. Ensure that your global_names parameter is set to False.
5. Configure the Oracle Heterogeneous services by creating an initodbc.ora file within the Oracle database.
6. Modify the Listener.ora file.
SID_NAME is the DSN for the remote database.
ORACLE_HOME is the actual Oracle home file path.
PROGRAM tells Oracle to use heterogeneous services.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME=Cas30C) -- Enter the DSN on this line
(ORACLE_HOME = c:\oracle10gdb) -- Enter your Oracle home on this line
(PROGRAM = hsodbc) ) )
7. Modify the Tnsnames.ora file. This is the Oracle database installation accessed by the users to connect to the ODBC drivers
(DESCRIPTION=
(ADDRESS_LIST=
(Address=(PROTOCOL=TCP)
(HOST=
-- (Server x)
(PORT=1521))) -- Enter the port on which the server x Oracle installation
-- is listening
(CONNECT_DATA=(SID=Cas30c)) - Enter the DSN name
(HS=OK) -- Enter this value. It tells Oracle to use hetergeneous services
)
8. Reload the listener on local Oracle database
9. Create a database link on the local Oracle installation that accesses the heterogeneous connection, which, in turn, connect to SQL Server.
10. Run a SQL Server Select statement from the Oracle installation using the database link.
Tuesday, March 16, 2010
Monday, March 8, 2010
ORA-39095: Dump file space has been exhausted
ORA-39095: Dump file space has been exhausted
Encountered this error when taking dump backup which exceeds more than 99 files
$ORACLE_HOME/bin/expdp dcs_dev/*****@fdbbp directory=dcsdevdir dumpfile=dcsdev_$(date +"%d-%m-%Y" )_fdbbp%U.dmp logfile=dcsdev_$(date +"%d-%m-%Y")_fdbbp.log filesize=600M
Solution : 1
We can up-size the filesize, to bring down the number of files generated
eg
$ORACLE_HOME/bin/expdp dcs_dev/******@fdbbp directory=dcsdevdir dumpfile=dcsdev_$(date +"%d-%m-%Y" )_fdbbp%U.dmp logfile=dcsdev_$(date +"%d-%m-%Y")_fdbbp.log filesize=1024M
Encountered this error when taking dump backup which exceeds more than 99 files
$ORACLE_HOME/bin/expdp dcs_dev/*****@fdbbp directory=dcsdevdir dumpfile=dcsdev_$(date +"%d-%m-%Y" )_fdbbp%U.dmp logfile=dcsdev_$(date +"%d-%m-%Y")_fdbbp.log filesize=600M
Solution : 1
We can up-size the filesize, to bring down the number of files generated
eg
$ORACLE_HOME/bin/expdp dcs_dev/******@fdbbp directory=dcsdevdir dumpfile=dcsdev_$(date +"%d-%m-%Y" )_fdbbp%U.dmp logfile=dcsdev_$(date +"%d-%m-%Y")_fdbbp.log filesize=1024M
Monday, January 18, 2010
Each Schema's Used Space
To check space used by each user schema, you can use the following Query.
/* Space used by each Schema */
select substr(owner,1,16) owner, substr(tablespace_name,1,26) tablespace_name,substr(segment_type,1,10) segment_type,sum(bytes/(1024*1024)) Mbytes,
sum(blocks) blocks from sys.dba_extents
where owner not in ('SYS','SYSTEM','SYSADMIN','SYSMAN','SH','DBSNMP','CTXSYS','EXFSYS','WMSYS','XDB','TSMSYS','MDSYS','OLAPSYS','OUTLN',
'ORDSYS','PM','OE','SCOTT','IX','HR','DMSYS')
group by substr(owner,1,16),substr(tablespace_name,1,26),substr(segment_type,1,10)
order by 1,2,3
/* Space used by each Schema */
select substr(owner,1,16) owner, substr(tablespace_name,1,26) tablespace_name,substr(segment_type,1,10) segment_type,sum(bytes/(1024*1024)) Mbytes,
sum(blocks) blocks from sys.dba_extents
where owner not in ('SYS','SYSTEM','SYSADMIN','SYSMAN','SH','DBSNMP','CTXSYS','EXFSYS','WMSYS','XDB','TSMSYS','MDSYS','OLAPSYS','OUTLN',
'ORDSYS','PM','OE','SCOTT','IX','HR','DMSYS')
group by substr(owner,1,16),substr(tablespace_name,1,26),substr(segment_type,1,10)
order by 1,2,3
Thursday, January 14, 2010
Listener Password
The oracle listener can be the object of attacks from someone willing to take control of the database.
Putting a password on the listener is easy.
C:\>LSNRCTL
LSNRCTL>status
If you got some instances described then this is your current listener. The default name is listener and a potential hacker is well aware of that.
It’s good to create the listener with a different name.
If you don’t know your listener’s name, go to the services and look for OracleListenerSomelistenername. Your listener name is Somelistenername.
LSNRCTL>change_password Somelistenername
old password: There was nothing so we just press enter.
new password: YourNewPassword
retype new password: YourNewPassword
LSNRCTL>save_config
The save_config command will add the password encrypted in the listener.ora file located in ORACLE_HOME\NETWORK\Admin
If that command haven’t been performed then no password have been added.
Putting a password on the listener is easy.
C:\>LSNRCTL
LSNRCTL>status
If you got some instances described then this is your current listener. The default name is listener and a potential hacker is well aware of that.
It’s good to create the listener with a different name.
If you don’t know your listener’s name, go to the services and look for OracleListenerSomelistenername. Your listener name is Somelistenername.
LSNRCTL>change_password Somelistenername
old password: There was nothing so we just press enter.
new password: YourNewPassword
retype new password: YourNewPassword
LSNRCTL>save_config
The save_config command will add the password encrypted in the listener.ora file located in ORACLE_HOME\NETWORK\Admin
If that command haven’t been performed then no password have been added.
Wednesday, January 6, 2010
How to check expdp progress
V$SESSION_LONGOPS :This view helps determine Data Pump export progress indicator through the MESSAGE column.
select t.username,t.START_TIME,t.LAST_UPDATE_TIME,t.TIME_REMAINING,t.ELAPSED_SECONDS,
t.opname,t.target_desc,t.sofar,t.totalwork,t.message from V$SESSION_LONGOPS t where/* t.USERNAME = 'user_name' and*/ t.TARGET_DESC = 'EXPORT'
select t.username,t.START_TIME,t.LAST_UPDATE_TIME,t.TIME_REMAINING,t.ELAPSED_SECONDS,
t.opname,t.target_desc,t.sofar,t.totalwork,t.message from V$SESSION_LONGOPS t where/* t.USERNAME = 'user_name' and*/ t.TARGET_DESC = 'EXPORT'
Monday, January 4, 2010
Database Hanging due to Row lock contention
To check for the sessions waiting, use the query
select sid, username, event, blocking_session,
seconds_in_wait, wait_time
from v$session where state in ('WAITING')
and wait_class != 'Idle';
To check for the corresponding sql statement relating the waiting session
select sid, sql_text
from v$session s, v$sql q
where sid in (254,270)
and (
q.sql_id = s.sql_id or
q.sql_id = s.prev_sql_id);
Wait event Class
select wait_class_id, wait_class,
total_waits, time_waited
from v$session_wait_class
where sid = 270;
From the above query find the highest wait class and find the cause of the wait by using the query below.
select event, total_waits, time_waited
from v$system_event e, v$event_name n
where n.event_id = e.event_id
and wait_class_id = xyz; -- Where xyz is the highest wait_class_id from the previous query
select sid, username, event, blocking_session,
seconds_in_wait, wait_time
from v$session where state in ('WAITING')
and wait_class != 'Idle';
To check for the corresponding sql statement relating the waiting session
select sid, sql_text
from v$session s, v$sql q
where sid in (254,270)
and (
q.sql_id = s.sql_id or
q.sql_id = s.prev_sql_id);
Wait event Class
select wait_class_id, wait_class,
total_waits, time_waited
from v$session_wait_class
where sid = 270;
From the above query find the highest wait class and find the cause of the wait by using the query below.
select event, total_waits, time_waited
from v$system_event e, v$event_name n
where n.event_id = e.event_id
and wait_class_id = xyz; -- Where xyz is the highest wait_class_id from the previous query
Sunday, December 20, 2009
How to Calculate Table size
TABLE not partitioned:
/* Size of each table in a user schema */
Connect to the user and use the following query.
Table not partitioned
select segment_name, t.tablespace_name, bytes / 1024 / 1024 MB from user_segments t
Where t.segment_type = 'TABLE' order by 3 desc
Alternatively to check what are all the objects stored in a tablespace.
select segment_name, t.tablespace_name, t.segment_type,bytes / 1024 / 1024 MB from user_segments t Where t.tablespace_name = 'DCSTAB' order by 4 desc
For a Partitioned table
select segment_name, partition_name, bytes / 1024 / 1024 MB
from user_segments Where segment_type = 'TABLE PARTITION' and Segment_Name= and partition_name = ;
TABLE partitioned:
select segment_name, sum(bytes / 1024 / 1024) MB
from user_segments Where segment_type = 'TABLE PARTITION'
and Segment_Name= Group by segment_name;
/* Size of each table in a user schema */
Connect to the user and use the following query.
Table not partitioned
select segment_name, t.tablespace_name, bytes / 1024 / 1024 MB from user_segments t
Where t.segment_type = 'TABLE' order by 3 desc
Alternatively to check what are all the objects stored in a tablespace.
select segment_name, t.tablespace_name, t.segment_type,bytes / 1024 / 1024 MB from user_segments t Where t.tablespace_name = 'DCSTAB' order by 4 desc
For a Partitioned table
select segment_name, partition_name, bytes / 1024 / 1024 MB
from user_segments Where segment_type = 'TABLE PARTITION' and Segment_Name=
TABLE partitioned:
select segment_name, sum(bytes / 1024 / 1024) MB
from user_segments Where segment_type = 'TABLE PARTITION'
and Segment_Name=
Subscribe to:
Posts (Atom)