Get the App
SLTechnology News&Howtos  ›  Database  › 

Migrate data with sqlldr-KDB to Oracle

Shulou Source: shulou.com Published: 2022-06-01 06:50:15 09月12日 Update

. / kdb_to_oracle.sh user_name user_password

Eg:. / get_ddl.sh nda_202 NDA_202-- Export from kdb all objects under nda_202 are loaded into the oracle database through sqlldr

Kdb_to_oracle.sh script:

#! / bin/bash user_name=$ {1}

User_pass=$ {2}

Schema_name=$ {3} if [!-d log]

Then

Mkdir log

Fi if [!-d ctl_file]

Then

Mkdir ctl_file

Fi if [!-d sql]

Then

Mkdir sql

Fi if [!-d data]

Then

Mkdir data

Fi # get object type and name, T1:TABLE I1:INDEX

Kdsql ${user_name} / ${user_pass} tab.txt.tmp

Set pagesize 0

Select 'TAB_NAME%' | | object_name | |':'| | object_type from user_objects

+ egrep TAB_NAME tab.txt.tmp | awk-fills%'{print $NF}'> tab.txt

Rm-rf tab.txt.tmp

# get ddl

For i in `cat tab.txt`

Do

Obj_type= `echo ${I} | awk-F':'{print $2}'`

Obj_name= `echo ${I} | awk-F':'{print $1}'`

Kdsql ${user_name} / ${user_pass} > tab.ddl

Set pagesize 0

Set long 999999

Set linesize 20000

Set heading off

Set feedback off

Spool table_ddl.txt append

SELECT DBMS_METADATA.GET_DDL ('${obj_type}','${obj_name}') from dual

Spool off

+

Done sed-I'/ machao > / d' table_ddl.txt

Sed-I'/ SQL > / d' table_ddl.txt

# get control file for sqlldr from oracle database

For i in `cat tab.txt | grep TABLE | awk-Fairview'{print $1}'`

Do

Sqlplus-s ${user_name} / ${user_pass} sql/$ {file_name} .sql

Sed-I "s/TRAILING NULLCOLS (/ select/g" sql/$ {file_name} .sql

Sed-I 's/timestamp "yyyy-mm-dd hh34:mi:ss" / / g' sql/$ {file_name} .sql

Sed-I "s / ^, / | |','| | / g" sql/$ {file_name} .SQL

Sed-I "s /) / from ${file_name}; / g" sql/$ {file_name} .SQL

Done # export data to * .txt from inspure database for i in `cat tab.txt | grep TABLE | awk-Fairview'{print $1}'`

Do

File_name= `echo $I | awk-Falls.'{print $1}'`

Kdsql ${user_name} / ${user_pass} / dev/null

Set colsep','

Set echo off

Set feedback off

Set heading off

Set pagesize 0

Set termout off

Set trimout on

Set trimspool on

Set linesize 30000

Spool data/$ {i} .txt

@ sql/$ {I} .SQL

Spool off

+

Done sed-I 's/machao > / / g' data/*.txt

Sed-I's Spoolmax SpoolUniverse G'data/*.txt

Sed-I'/ spool off/d' data/*.txt

Sed-I'/ @ sql\ / / d 'data/*.txt # load plain text to oracle database with sqlldr

# sqlldr ${user_name} / ${user_pass} control=ctl_file/DA_MD_503506.ctl data=data/DA_MD_503506.txt log=log/DA_MD_503506.log for i in `cat tab.txt | grep TABLE | awk-awk-Fairview'{print $1}'`

Do

Sqlldr ${user_name} / ${user_pass} control=ctl_file/$ {I} .ctl data=data/$ {I} .txt log=log/$ {I} .log > / dev/null

Done # timestamp "yyyy-mm-dd hh34:mi:ss"

# SP of P_generate_sqlldr_null

CREATE OR REPLACE PROCEDURE P_GENERATE_SQLLDR_NULL (p_table_name IN VARCHAR2) AS

L_curr_line LONG

L_table_name user_tables.table_name%TYPE

BEGIN

Select table_name

Into l_table_name

From user_tables

Where table_name = upper (p_table_name)

L_curr_line: ='

LOAD DATA

INFILE''| | upper (l_table_name) | | '.txt''

INTO TABLE'| | upper (l_table_name) | | chr (10) | |

'FIELDS TERMINATED BY',''| | chr (10) | | 'TRAILING NULLCOLS (')

For rec in (select table_name,column_name,column_id,data_type

From user_tab_columns

Where table_name = upper (p_table_name)

Order by column_id) loop

If rec.column_id = 1 THEN

IF rec.data_type=' DATE' or rec.data_type='TIMESTAMP (6) 'THEN

L_curr_line: = l_curr_line | |'

'| | rec.column_name | |''| | 'timestamp "yyyy-mm-dd hh34:mi:ss''

ELSE

L_curr_line: = l_curr_line | |'

'| | rec.column_name

END IF

ELSE

IF rec.data_type=' DATE' or rec.data_type='TIMESTAMP (6) 'THEN

L_curr_line: = l_curr_line | |'

,'| | rec.column_name | |''| | 'timestamp "yyyy-mm-dd hh34:mi:ss''

ELSE

L_curr_line: = l_curr_line | |'

,'| | rec.column_name

END IF

End if

End loop

L_curr_line: = l_curr_line | |')'

Dbms_output.put_line (l_curr_line)

END P_generate_sqlldr_null

/

Tags: Data objects databases scripts Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Shulou Tech Info Huawei Apple Linux MariaDB