Oracle【IT實驗室】數據庫備份與恢復之二:SQL*Loader

2.1 基本知識

??? Oracle 的? SQL* LOADER? 可以將外部格式化的文本數據加載到數據庫表中。通常 與 SPOOL導出文本數據方法配合使用。

??? 1.命令格式

??? SQLLDR keyword=value [,keyword=value,……]

??? 例:$ sqlldr user/pwd control=emp.ctl data=emp.dat bad=emp.bad log=emp.log

??? 2.控制文件

??? SQL*LOADER? 根據控制文件可以找到需要加載的數據。并且分析和解釋這些數據。

??? 控制文件由三個部分組成,具體參數參考幫助文檔:1.? 全局選件,行,跳過的記錄數等;2. INFILE 子句指定的輸入數據;3.? 數據特性說明。

??? comment: ——注釋

??? 例:

??? load data infile *

??? append??? ——除了 append外,還有 insert、replace、truncate等方式

??? into table emp fields terminated b y ‘|’

??? (

??? no???????????? float external, name char(20),

??? age?????????? integer external,

??? duty???????? char(1),salary????? float external,

??? upd_ts???? date(14) ‘YYYYMMDDHH24MISS’)

??? begindata

??? 100000000003|Mulder|000020|1|000000005000|20020101000000

??? 100000000004|Scully|000025|2|000000008000|20020101235959

??? 控制文件中infile選項跟sqlldr 命令行中data 選項含義相同,如使用infile *則表明數據在本控制文件以 begin data 開頭的區域內。 一些選項:FIELDS TERMINATED BY WHITESPACE FIELDS TERMINATED BY x'09' FILLER_1 FILLER, //? 指定某一列將不會被裝載

??? DEPTNO position(1:2), DNAME position(*:16), //? 指定列的位置SEQNO RECNUM //載入每行的行號

??? SKIP n????????? //? 指定導入時可以跳過多少行數據

??? 3.數據文件

??? 按控制文件數據格式定義的數據行集,

??? 例:

??? 100000000001|Tom|000020|1|000000005000|20020101000000

??? 100000000002|Jerry|000025|2|000000008000|20020101235959

??? 固定格式、可變格式、流記錄格式:

??? 固定格式:

??? 當數據固定的格式(長度一樣)時且是在文件中得到時,要用 INFILE "fix n"

??? load data

??? infile 'example.dat' "fix 11"

??? into table example

??? fields terminated b y ',' optionally enclosed by '"'

??? (col1 char(5), col2 char(7)) example.dat:

??? 001, cd, 0002,fghi,

??? 00003,lmn,

??? 1, "pqrs",

??? 0005,uvwx,

??? 可變格式:

??? 當數據是可變格式(長度不一樣)時且是在文件中得到時,要用 INFILE "var n".如:

??? load data

??? infile 'example.dat' "var 3"

??? into table example

??? fields terminated b y ',' optionally enclosed by '"'

??? (col1 char(5), col2 char(7)) example.dat:

??? 009hello,cd,010world,im,

??? 012my,name is,

??? 流記錄格式: // Stream-recored format:load data infile 'xx.dat' "str '|\n'"

??? into table xx field terminated b y ',' optionally enclosed by '"'

??? (col1 char(5), col2 char(7))

??? example.dat:

??? hello, ccd,|

??? world, bb,|

??? 4.? 壞文件

??? bad=emp.bad壞文件包含那些被 SQL*Loader拒絕的記錄。被拒絕的記錄可能是不符合要求的記錄。

??? 5.? 日志文件及日志信息

??? log=emp.log當 SQL*Loader? 開始執行后,它就自動建立? 日志文件。日志文件包含有加載的總 結,加載中的錯誤信息等。

?

2.2? 高級選項

??? 1. Conventional Path Load與Direct Path Load

??? Conventional-path Load:通過常規通道方式上載。

??? 特點:commit, always? gen redo logs,? enforce all constraints, fire insert triggers, can load into cluster, other user can make change

??? rows:每次提交的記錄數

??? bindsize:每次提交記錄的緩沖區

??? readsize:與 bindsize 成對使用,其中較小者會自動調整到較大者

??? sqlldr 先計算單條記錄長度,乘以 rows,如小于 bindsize,不會試圖擴張,rows以填充 bindsize;如超出,則以 bindsize 為準。 命令為:

??? $ sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000

??? Direct-Path Load:

??? 通過直通方式上載,可以跳過數據庫的相關邏輯,不進行? SQL解析,而直接將數 據導入到數據文件中。

??? 特點:save, conditionly gen redo logs, enforce PK UK NN, not fire triggers, can not load into cluster, other user can not make change命令為:

??? $ sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true

??? 2. SPOOL導出文本數據方法

??? 導入的數據文件可以用 SPOOL導出文本數據方法生成。

??? SQL*PLUS環境設置

??? SET NEWPAGE NONE HEADING OFF SPACE 0

??? PAGESIZE 0 SET TRIMOUT ON TRIMSPOOL ON LINESIZE 2500

??? 注:LINESIZE 要稍微設置大些,免得數據被截斷,它應和相應的 TRIMSPOOL結合使用防止導出的文本有太多的尾部空格。

??? 但是如果 LINESIZE 設置太大,會大大降低導出的速度,另外在 WINDOWS下導 出最好不要用 PLSQL導出,速度比較慢,直接用? COMMEND 下的 SQLPLUS命令最 小化窗口執行。對于字段內包含很多回車換行符的應該給與過濾,形成比較規矩的文本 文件。

??? 通常情況下,我們使用 SPOOL方法,將數據庫中的表導出為文本文件,如下述:

??? set trimspool on

??? set linesize 120 pagesize 2000 newpage 1 heading off??? term off spool? 路徑+文件名

??? select col1||','||col2||','||col3||','||col4||'……' from tablename;

??? spool off

?

2.3 腳本

??? 1.? 將表中數據記錄導出為字段值用分隔符'|'分開的。dat文件

??? #!/bin/ksh

??? ##################################################################

??? ##??? 名稱: unloadtable

??? ##??? 功能:? 本 shell 用于將表中數據記錄導出

??? ##???????????????? 導出為字段值用分隔符'|'分開的。dat文件

??? ##??? 編者:

??? ##??? 日期: 2006.03.18

??? ##################################################################

??? if [ $# -ne 3 ]

??? then echo "usage:unloadtable tablename username password."

??? exit 0

??? fi

??? ##準備工作

??? echo "set heading off???? " >/tmp/$1.col

??? echo "set pagesize 0" >>/tmp/$1.col

??? echo "set linesize 800??? " >>/tmp/$1.col

??? echo "set feedback off??? " >>/tmp/$1.col

??? echo "set tab off????????????? " >>/tmp/$1.col

??? echo? "select? column_name||','? from? user_tab_columns? where? lower(table_name)='$1'? order? by

??? column_id; " >> /tmp/$1.col

??? ##產生 select 語句

??? echo "set heading off???? " >/tmp/$1.sel

??? echo "set pagesize 0" >>/tmp/$1.sel

??? echo "set linesize 800??? " >>/tmp/$1.sel

??? echo "set feedback off??? " >>/tmp/$1.sel

??? echo "set tab off????????????? " >>/tmp/$1.sel

??? echo "select " >>/tmp/$1.sel

??? echo? `sqlplus? -s? $2/$3? <? /tmp/$1.col`? |sed? "s/,/||'|'||/g"? |sed? "s/||$//g"|sed? "s/date/\"date\"/g"

>>/tmp/$1.sel

??? ##生成 dat文件

??? #echo "from $1;\n/" >>/tmp/$1.sel??? 由于? /? 導致多執行一次 select

??? echo "from $1;\n" >>/tmp/$1.sel

??? sqlplus -s $2/$3 < /tmp/$1.sel >$1_tmp.dat

??? #awk '{if(FNR!=1) print $0}' $1_tmp.dat >$1.dat?????? FNR 選項使得第一條記錄選不出

??? awk '{print $0}' $1_tmp.dat >$1.dat

??? rm -f $1_tmp.dat

??? 2.? 將數據導入到相應表中

??? #!/bin/ksh

??? ##################################################################

??? ##??? 名稱:loadtable

??? ##??? 功能:本 shell 用于將已經準備好的。dat數據文件導入相應的表中

??? ##?????????????? .dat 文件各個字段值用分隔符'|'分開。

??? ##??? 編者:

??? ##??? 日期: 2006.03.18

??? ##################################################################

??? if [ $# -ne 3 ]

??? then

??? echo "usage:loadtable tablename username??? password." exit 0 fi

??? ##準備工作

??? echo "set heading off???? " >/tmp/$1.colsql

??? echo "set pagesize 0" >>/tmp/$1.colsql

??? echo "set linesize 800??? " >>/tmp/$1.colsql

??? echo "set feedback off??? " >>/tmp/$1.colsql

??? echo "set tab off????????????? " >>/tmp/$1.colsql

??? echo? "select? column_name||','? from? user_tab_columns? where? lower(table_name)='$1'? order? by

??? column_id; " >> /tmp/$1.colsql

??? ##產生 ctl文件

??? echo "load data" >/tmp/$1.ctl

??? echo "infile *" >>/tmp/$1.ctl

??? echo "into table $1" >>/tmp/$1.ctl

??? echo "fields terminated by '|'" >>/tmp/$1.ctl

??? echo `sqlplus -s $2/$3 < /tmp/$1.colsql` |sed "s/,$/)/g" |sed "s/^/(/g" >>/tmp/$1.ctl

??? ##開始導入數據

??? echo "truncate table $1;" >/tmp/$1.sql

??? sqlplus $2/$3 < /tmp/$1.sql

??? sqlldr $2/$3 data=$1.dat control=/tmp/$1.ctl log=/tmp/$1.log

轉載于:https://www.cnblogs.com/login2012/p/5780499.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于spring 獲取不到網站上的xsd的處理記錄

2019獨角獸企業重金招聘Python工程師標準>>> 前兩天做一個項目還好好的&#xff0c;今天突然報出這個錯誤 cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element mvc:annotation-driven 應該是xml文件找不到相應…

藍寶石英語怎么讀_黑金和藍寶石

這是一直以后我個人的一個理解誤區&#xff0c;或者說是信息誤區&#xff0c;就是這兩個產品線&#xff0c;差別到底在哪里&#xff1f;以前我一直認為黑金的成分是純天然的&#xff0c;而藍寶石有一定的合成物質。這個信息一定是我從哪里讀到的&#xff0c;由于無處求證&#…

秘密潛入2小辣椒_短暫潛入2次,我顯然不知道自己作為開發人員正在做什么

秘密潛入2小辣椒by Zachary Kuhn扎卡里庫恩(Zachary Kuhn) 那兩次我顯然不知道我作為開發人員正在做什么 (Those two times where I clearly had no clue what I was doing as a developer) Last week I had a short conversation with coworkers about how we had messed up …

提高你的javascript代碼逼格系列之函數與數組

不知道大家有沒有一種感覺&#xff0c;那就是自己寫的javascript代碼雖然能完全解決工作上的需要&#xff0c;但是&#xff0c;一眼望去&#xff0c;too simple&#xff01;&#xff01;&#xff01;簡直就是一個傻子都能看懂的水平&#xff0c;于是&#xff0c;在工作之余&…

印度評論九章量子計算機,張禮立:中國 “九章”量子計算機到底厲害在哪?...

【背景信息】12月4日&#xff0c;《科學》雜志公布了中國“九章”的重大突破。 這臺由中國科學技術大學潘建偉、陸朝陽等學者研制的76個光子的量子計算原型機&#xff0c;推動全球量子計算的前沿研究達到一個新高度。盡管距離實際應用仍有漫漫長路&#xff0c;但成功實現了“量…

手機web網頁制作的認識(有關meta標簽)

近日以來一直在看JQuery Mobile 一個手機開發框架&#xff0c;說實話真的很頭疼的~~~~ 因為里面有很多的屬性、方法和事件~~~ 下面是手機網頁的一些認識&#xff1a; 一、<meta name"viewport" id"viewport" content"widthdevice-width, initial-s…

包打包和解析過程 unity_Unity學習—資源管理概覽

本文介紹了 Unity 常用四種默認路徑&#xff0c;以及 AssetDataBase、Resources、AssetBundle 和目前最新的 Addressable 四種資源管理方式文中所有 API 均以版本 2019.3 為準本文原地址&#xff1a;Unity學習—資源管理概覽資源路徑Application.dataPath官方文檔只讀&#xff…

graphql tools_聲明式GraphQL:編寫更少的代碼,并使用graphql-tools完成更多工作

graphql toolsI’ve been working with GraphQL for a few months now, but only recently began using Apollo’s graphql-tools library. After learning a few idioms, I am able to mock up a functional API quickly. This is largely due to its low-code, declarative a…

用idea搭建SSM項目,原來這么簡單

目錄 前言軟件環境創建項目數據庫文件配置文件pom.xmllog4j.propertiesjdbc.propertiesapplicationContext.xmlspring-mvc.xmlweb.xml運行項目編寫代碼前言 前陣子突發奇想&#xff0c;想學習下SpringMVC的源碼&#xff0c;于是打算用idea搭建一個簡易的maven版SSM案例&#xf…

浙江理工大學計算機組成原理試卷,浙江理工大學計算機組成原理設計試題.doc...

計算機組成原理課程設計報告2013/2014第二學期指導教師&#xff1a;許建龍 張芳班級&#xff1a;12計科2班姓名&#xff1a;學號&#xff1a; 計算機組成原理大型實驗任務書(計算機12級1、2、3班和實驗班)實驗目的&#xff1a;深入了解計算機各種指令的執行過程&#xff0c;以及…

mac vagrant 虛擬機nfs掛載點

需求&#xff1a;在mac 上安裝了虛擬機&#xff0c;虛擬機系統為centos6.5&#xff0c;現在希望講虛擬機上點目錄通過nfs共享給mac使用 下面主要描述通過nfs共享目錄給mac調用的過程 過程參考網址&#xff1a; http://www.moqifei.com/archives/1534 &#xff08;我主要參考的這…

nodejs中require的路徑是一個文件夾時發生了什么

node中使用require的時候如果路徑是一個文件夾時&#xff0c;或者特殊的情況require(..);require(.); 這是node實戰這本書里說的情況&#xff0c;但是我在node6.9版本中發現不完全是這樣&#xff0c;可能是后來做了修改。下面說說在6.9下require路徑的過程。 這里以require(.)說…

python調用ctypes中windll中的方法超時處理_python中使用ctypes調用MinGW生成的動態鏈接庫(dll)...

關于gcc編譯dll的我就不說了&#xff0c;網上舉例一大堆&#xff0c;下面以g為例。假設有一個test.cpp文件如下&#xff1a;extern "C" {__declspec(dllexport) double add(double x,double y);}double add(double x,double y){return xy;}在MinGW中使用g編譯&#x…

慣用過程模型_慣用的Ruby:編寫漂亮的代碼

慣用過程模型Ruby is a beautiful programming language.Ruby是一種美麗的編程語言。 According to Ruby’s official web page, Ruby is a:根據Ruby的官方網頁&#xff0c;Ruby是&#xff1a; “dynamic, open source programming language with a focus on simplicity and …

采用晶體管為基本元件的計算機發展階段是,計算機應用基礎知識點

第一章 計算機基礎知識1、計算機發展階段第一代&#xff1a;電子管計算機采用電子管為基本元件&#xff0c;設計使用機器語言或匯編語言。要用于科學和工程計算 第二代&#xff1a;晶體管計算機采用晶體管為基本元件&#xff0c;程序設計采用高級語言&#xff0c;出現了操作系統…

springcloud系列三 搭建服務模塊

搭建服務模塊為了模擬正式開發環境,只是少寫了service層直接在controller里面直接引用,直接上圖和代碼:更為方便: 創建完成之后加入配置: pom.xml文件: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM…

P1801 黑匣子_NOI導刊2010提高(06)

題目描述 Black Box是一種原始的數據庫。它可以儲存一個整數數組&#xff0c;還有一個特別的變量i。最開始的時候Black Box是空的&#xff0e;而i等于0。這個Black Box要處理一串命令。 命令只有兩種&#xff1a; ADD(x):把x元素放進BlackBox; GET:i加1&#xff0c;然后輸出Bla…

MySql模糊查詢

常規like的使用限制&#xff1a; 1. like %keyword &#xff1a;索引失效&#xff0c;使用全表掃描。但可以通過翻轉函數like前模糊查詢建立翻轉函數索引走翻轉函數索引&#xff0c;不走全表掃描。 2. like keyword% &#xff1a;索引有效。 3. like %keyword% &#xff1a;索引…

python psycopg2使用_python?操作數據庫:psycopg2的使用

1 conn psycopg2.connect(database"testdb", user"postgres",password"cohondob", host"127.0.0.1", port"5432")這個API打開一個連接到PostgreSQL數據庫。如果成功打開數據庫時&#xff0c;它返回一個連接對象。2cursor c…

軟件測試人員棘手的問題,èí?t2aê?μ???ê??êìa£oè?o?±ü?a???′ìá??è±?Y...

¡¡¡¡£££©£¡££¡££££©©£¡¡¡¡¡BUG£££¢¡£££¡££¡£¡£——£…