Please see my other blog for Oracle EBusiness Suite Posts - EBMentors

Search This Blog

Note: All the posts are based on practical approach avoiding lengthy theory. All have been tested on some development servers. Please don’t test any post on production servers until you are sure.

Monday, December 25, 2017

Offload Oracle Data to HDFS using RO Tablespaces


Purpose:

Offloading Oracle Data to HDFS

Prerequisites:

Hortonworks NFS Gateway is running Please, Please visit the post below

Configuring NFS Gateway for HDFS [HDP]



Steps to follow

1- Create tablespace on local OS file system

SQL> CREATE TABLESPACE tshdfs    DATAFILE '/data/mydata/tshdfs_df1.dbf' SIZE 50M;

Tablespace created.

2- Create table in newly created tablespace

SQL> create table T1  tablespace tshdfs as select * from user_objects;

Table created.

SQL> desc t1;
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 OBJECT_NAME                                                                VARCHAR2(128)
 SUBOBJECT_NAME                                                             VARCHAR2(128)
 OBJECT_ID                                                                  NUMBER
 DATA_OBJECT_ID                                                             NUMBER
 OBJECT_TYPE                                                                VARCHAR2(23)
 CREATED                                                                    DATE
 LAST_DDL_TIME                                                              DATE
 TIMESTAMP                                                                  VARCHAR2(19)
 STATUS                                                                     VARCHAR2(7)
 TEMPORARY                                                                  VARCHAR2(1)
 GENERATED                                                                  VARCHAR2(1)
 SECONDARY                                                                  VARCHAR2(1)
 NAMESPACE                                                                  NUMBER
 EDITION_NAME                                                               VARCHAR2(128)
 SHARING                                                                    VARCHAR2(18)
 EDITIONABLE                                                                VARCHAR2(1)
 ORACLE_MAINTAINED                                                          VARCHAR2(1)
 APPLICATION                                                                VARCHAR2(1)
 DEFAULT_COLLATION                                                          VARCHAR2(100)
 DUPLICATED                                                                 VARCHAR2(1)
 SHARDED                                                                    VARCHAR2(1)
 CREATED_APPID                                                              NUMBER
 CREATED_VSNID                                                              NUMBER
 MODIFIED_APPID                                                             NUMBER

 MODIFIED_VSNID                                                             NUMBER


3- After loading desired data in to your tablespace, make it read only.
SQL> alter tablespace tshdfs read only;

Tablespace altered


Get the data file information for tablespace

SELECT  FILE_NAME, BLOCKS, TABLESPACE_NAME    FROM DBA_DATA_FILES;

4-  Make datafile offline now so that we can copy it to HDFS location

SQL> ALTER DATABASE DATAFILE '/data/mydata/tshdfs_df1.dbf' OFFLINE;

Database altered.

5- Now copy the offline file datafile to the NFS (HDFS) location

SQL> host cp /data/mydata/tshdfs_df1.dbf /data/hdfsloc/data/oraclenfs

Verify the copied file

SQL>  host ls -l /data/hdfsloc/data/oraclenfs
total 51221
-rwxr-xr-x 1 oracle oinstall      617 Dec 25 10:43 emp.csv
-rw-r----- 1 oracle oinstall    12288 Dec 25 12:32 employee_ext.dmp
-rw-r--r-- 1 oracle oinstall 52436992 Dec 25 14:46 tshdfs_df1.dbf



6- Now alter tablespace to update new location of file

SQL> alter tablespace tshdfs rename datafile '/data/mydata/tshdfs_df1.dbf' to '/data/hdfsloc/data/oraclenfs/tshdfs_df1.dbf';

Tablespace altered.


7- Make datafile online now which is on new location

SQL> ALTER DATABASE DATAFILE '/data/hdfsloc/data/oraclenfs/tshdfs_df1.dbf' ONLINE;

Database altered.

8- Query the table on read only tablespace

SQL> select count(*) from t1;

  COUNT(*)
----------
     51762


No comments: