oracle大數據存儲
Ⅰ Oracle資料庫由哪幾種文件組成
Oracle資料庫由資料庫文件、日誌文件、控制文件組成。
Oracle資料庫12c引入了一個新的多承租方架構,使用該架構可輕松部署和管理資料庫雲。此外,一些創新特性可最大限度地提高資源使用率和靈活性,如Oracle Multitenant可快速整合多個資料庫,而Automatic Data Optimization和Heat Map能以更高的密度壓縮數據和對數據分層。
這些獨一無二的技術進步再加上在可用性、安全性和大數據支持方面的主要增強,使得Oracle資料庫12c成為私有雲和公有雲部署的理想平台。
(1)oracle大數據存儲擴展閱讀:
Oracle資料庫升級注意事項:
1、備份配置參數
資料庫升級前的配置參數要備份,如PGA大小。這樣資料庫升級後還可以升級前的配置,而不至於使用安裝升級時的默認配置。
2、檢查版本兼容
確認資料庫升級後是否對生產環境上的代碼有影響,如果發現一處有影響,則要在全部范圍內檢查類似的情況。
3、客戶端同步升級
同時升級開發者本地環境或應用程序的資料庫客戶端升級到與資料庫伺服器相同版本。
4、確保程序正常運行
資料庫升級後確保升級後的資料庫不會對連接該庫的應用程序有影響。
Ⅱ oracle 大數據插入效率問題
select * from mytable t where 1=1 and t.name='abc'
select * from mytable t where t.name='abc'
我實例測試了一下,這兩句執行效率結果是一樣的
對於上面千萬數據集我覺得你的方法很好了。
如果說最快的話你只能刪除表重建,如:
Create table B as
select * from A
這應該是最快的了。但是不知道是否能符合你的要求
Ⅲ oracle資料庫一張表最大存多少條數據
1、64位linux 和64位oracle,默認oracle表空間數據文件用的BLOCKSIZE是8k,表空間數據文件最大是32G。
sql>show parameter k_cache_size
查看資料庫默認的塊大小
SQL> show parameter db_block_size
db_block_size integer 8192
2、為了讓一個表空間數據文件存64G,你需要告訴oracle用BLOCKSIZE 是16k
CREATE TABLESPACE TEST DATAFILE 『/data1/test_ts1.dbf』 SIZE 512M AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED BLOCKSIZE 16k;
提前需要設置db_16k_cache_size
alter system set db_16k_cache_size=16M scope=both;
否則會報錯ORA-29339:
tablespace block size 16384 does not match configured block sizes
3、為了讓一個表空間數據文件存128G,你需要告訴oracle用BLOCKSIZE 是32k
4、32位linux 和32位oracle,默認oracle表空間datafile用的BLOCKSIZE也是8k,表空間數據文件最大也是32G。試了一下64G文件,也沒有問題。
Ⅳ Oracle 大數量 存儲 優化 DML
利用rowid分塊實現非分區表的並行update與delete
大表中海量歷史數據的更新與刪除一直是令DBA非常頭痛的事情,在表已經分區的前提下我們還可以利用並行或者truncate parition等手段來為UPDATE或者DELETE提速, 但是如果對象是普通的非分區對表(non-partitioned heap table)的話,似乎就沒有太好的加速方法了, nologging或parallel 對非分區表都沒有效果。
之前我也有介紹過一個利用rowid將非分區表分割成指定數量個區間塊的方法,見<Script:partition table into rowid extent chunks>;利用該腳本可以獲取到這些分割後的區間塊的起始rowid和結尾rowid,之後利用between start_rowid and end_rowid的條件構造多條DML語句, 因為這些DML語句所更新的數據都是在互不相關的區間內的,所以可以在多個終端內並行地運行這些DML語句,而不會造成鎖的爭用或者Oracle並行執行協調(Parallel Execution coordinator ) 所帶來的一些開銷。
http://www.askmaclean.com/archives/%E5%88%A9%E7%94%A8rowid%E5%88%86%E5%9D%97%E5%AE%9E%E7%8E%B0%E9%9D%9E%E5%88%86%E5%8C%BA%E8%A1%A8%E7%9A%84%E5%B9%B6%E8%A1%8Cupdate%E4%B8%8Edelete.html
Ⅳ 在Oracle里存入大數據的時候,用什麼欄位類型
clob 類型就可以。
**************
補充:
**************
1,按存儲數據的類型分:
①字元類型:
CLOB:存儲大量 單位元組 字元數據。
NLOB:存儲定寬 多位元組 字元數據。
②二進制類型:
BLOB:存儲較大無結構的二進制數據。
如上,自己斟酌。。
Ⅵ 在oracle中,大數據量情況下,merge是否比cursor 快啊目前我們存儲過程都是用cursor,但很慢。。
看你的業務邏輯是否復雜.
如果簡單的, 可以一句 merge 語句就處理掉的。
那麼當然優先使用 merge 處理比較好。
假如業務邏輯很復雜, 一句 merge 語句無法處理。
迫不得已,只能使用 游標處理的。
可以嘗試使用 BULK COLLECT
看看是否能有一些性能上面的提升
http://hi..com/wangqing999/blog/item/2ea041cc0d4606037e3e6f20.html
Ⅶ Oracle資料庫基本知識
Oracle資料庫基本知識
Oracle Database,又名OracleRDBMS,或簡稱Oracle。是甲骨文公司的一款關系資料庫管理系統。本文為大家分享的是Oracle資料庫的基本知識,希望對大家有所幫助!
它是在資料庫領域一直處於領先地位的產品。可以說Oracle資料庫系統是目前世界上流行的關系資料庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。它是一種高效率、可靠性好的適應高吞吐量的資料庫解決方案。
介紹
ORACLE資料庫系統是美國ORACLE公司(甲骨文)提供的以分布式資料庫為核心的一組軟體產品,是目前最流行的客戶/伺服器(CLIENT/SERVER)或B/S體系結構的資料庫之一。比如SilverStream就是基於資料庫的一種中間件。ORACLE資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的數據管理功能;作為一個關系資料庫,它是一個完備關系的產品;作為分布式資料庫它實現了分布式處理功能。但它的所有知識,只要在一種機型上學習了ORACLE知識,便能在各種類型的機器上使用它。
Oracle資料庫最新版本為OracleDatabase 12c。Oracle資料庫12c引入了一個新的多承租方架構,使用該架構可輕松部署和管理資料庫雲。此外,一些創新特性可最大限度地提高資源使用率和靈活性,如Oracle Multitenant可快速整合多個資料庫,而Automatic Data Optimization和Heat Map能以更高的密度壓縮數據和對數據分層。這些獨一無二的技術進步再加上在可用性、安全性和大數據支持方面的主要增強,使得Oracle資料庫12c 成為私有雲和公有雲部署的理想平台。
就業前景
從就業與擇業的角度來講,計算機相關專業的大學生從事oracle方面的技術是職業發展中的最佳選擇。
其一、就業面廣:ORACLE幫助拓展技術人員擇業的廣度,全球前100強企業99家都在使用ORACLE相關技術,中國政府機構,大中型企事業單位都能有ORACLE技術的工程師崗位,大學生在校期間興趣廣泛,每個人興趣特長各異,不論你想進入金融行業還是電信行業或者政府機構,ORACLE都能夠在你的職業發展中給你最強有力的支撐,成為你最貼身的金飯碗。
其二、技術層次深:如果期望進入IT服務或者產品公司,Oracle技術能夠幫助提高就業的深度。Oracle技術已經成為全球每個IT公司必選的軟體技術之一,熟練掌握Oracle技術能夠為從業人員帶來技術應用上的優勢,同時為IT技術的深入應用起到非常關鍵的作用。掌握 Oracle技術,是IT從業人員了解全面信息化整體解決方案的基礎。
其三、職業方向多:Oracle資料庫管理方向、Oracle開發及系統架構方向、Oracle數據建模數據倉庫等方向。
Oracle資料庫漏洞分析:無需用戶名和密碼進入你的資料庫
一般性的資料庫漏洞,都是在成功連接或登錄資料庫後實現入侵;本文介紹兩個在2012年暴露的Oracle漏洞,通過這兩種漏洞的結合,可以在不掌握用戶名/密碼的情況下入侵Oracle,從而完成對數據的竊取或者破壞。這兩個漏洞就是CVE-2012-1675和CVE-2012-3137。
引言
國內外很多重要的系統都採用Oracle作為數據存儲的資料庫;在Oracle中存儲著企業或政府大量敏感的信息,在金錢或政治的誘導下,內外部黑客會想法利用管理、網路、主機或資料庫的自身漏洞嘗試入侵到資料庫中,以達到自身的目的。
本文的作者通過對Oracle倆種漏洞的組合研究,設計了一套在不掌握用戶名/密碼的方式入侵到Oracle中;這種方法,比傳統的需要登錄到資料庫中的入侵方法,具有更大的安全隱患和破壞性。
本文希望通過對這兩個漏洞和攻擊方法的介紹,能夠引起相關人員的重視,完善對資料庫安全的措施。
1、概要介紹
本文提供的方法是基於漏洞CVE-2012-1675和CVE-2012-3137對oracle資料庫的攻擊測試的方法。
CVE-2012-1675漏洞是Oracle允許攻擊者在不提供用戶名/密碼的'情況下,向遠程“TNS Listener”組件處理的數據投毒的漏洞。攻擊者可利用此漏洞將資料庫伺服器的合法“TNS Listener”組件中的數據轉向到攻擊者控制的系統,導致控制遠程組件的資料庫實例,造成組件和合法資料庫之間的中間人攻擊、會話劫持或拒絕服務攻擊。
CVE-2012-3137漏洞是Oracle Database 10g/11g身份驗證協議實現中存在一個設計缺陷,攻擊者無需認證即可遠程獲取資料庫用戶密碼哈希相關數據,從而可以離線暴力破解用戶密碼,進一步控制資料庫系統。
我們通過如下的步驟和過程可以實現對Oracle的入侵:
(1)利用CVE-2012-1675進行TNS劫持,在監聽下利用遠程注冊,注冊同名資料庫實例;
(2)新登陸的用戶,在TNS的負載均衡策略下,有可能流量登錄到偽造的監聽服務上;
(3)該監聽服務對用戶的登陸過程進行監控,並將相關數據流量轉發到真實的資料庫上;
(4)利用CVE-2012-3137獲得通訊過程中的認證相關信息;
(5)對認證相關信息進行離線的暴力破解,獲得登陸的密碼;
(6)試用破解的用戶名/密碼登陸Oracle,完成對Oracle中數據的訪問;
2、通過CVE-2012-1675進行TNS劫持
該漏洞存在於Oracle的所有版本,並且Oracle至今僅是發布了警告性通知,並未提供解決方案。
要想利用CVE-2012-1675漏洞做TNS劫持,首先需要了解TNS機制。如下圖所示oracle 通過在本地解析網路服務名到目標主機IP地址,服務埠號,目標資料庫名,把這些信息發送到oracle伺服器端監聽程序,最後再由監聽程序遞送DBMS。
其中關鍵點在於監聽會按照目標資料庫名遞送到名稱正確的資料庫。那麼如果一個監聽下有2個同名資料庫。監聽將自動按照負載均衡把這次訪問發送到負載低的資料庫上,進行連接訪問。資料庫注冊到監聽的方法就決定了,能否同時注冊同名資料庫在同一個監聽下。注冊方式分為本地注冊和遠程注冊,通過修改參數可以調整為遠程注冊。
下面是一段可用的TNS劫持的過程:
1.在劫持機上創建一個和目標資料庫實例同名的資料庫實例。
2.在劫持機上修改 tnsnames.ora 文件
添加
listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=目標機器IP)(PORT=目標機器埠)))
3.在劫持機上用SQL*Plus 順序執行下面步驟。
1.$ sqlplus / as sysdba
2. SQL> ALTER SYSTEM SETREMOTE_LISTENER='LISTENER_NAME';
3. SQL> ALTER SYSTEM REGISTER;
4.多個客戶端,向資料庫發起登錄。會劫持到一部分客戶端的登錄信息。
最終達到效果如下圖所示:
按照猜想同一個監聽下有2個同名實例。客戶端訪問監聽,監聽按照客戶端中的資料庫名信息分配資料庫,由於監聽下有2個同名資料庫,客戶端鏈接很可能會被分配到劫持者的資料庫實例下,再通過配置劫持者的本地監聽把客戶端請求指回原資料庫。結構圖如下:
測試客戶端鏈接196次。目標資料庫實例獲得113次,劫持資料庫實例獲得83次基本滿足負載均衡的假設。(註上面實例是local server 下面實例是 remote server)
通過以上方式我們可以截獲約一半左右客戶端發送到伺服器的合法鏈接。其中獲得了伺服器IP、埠號、資料庫位置、實例名、登錄用戶名等一系列明文信息和4組密文信息(AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA)。
3、通過CVE-2012-3137進行密碼破解
CVE-2012-3137受影響的資料庫版本有11.2.0.3,11.2.0.2,11.1.0.7,有使用了SHA-1加密演算法的10.2.0.5和10.2.0.4,還有使用了SHA-1的10.2.0.3(運行在z/OS下)版本。
雖然這個漏洞在11.2.0.3中已經解決,但是僅僅資料庫客戶端和伺服器都升級到11.2.0.3並且sqlnet.ora文件中增加SQLNET.ALLOWED_LOGON_VERSION=12才有效。
正如CVE-2012-3137所描述Oracle為了防止第三方通過網路獲取登錄信息包。而對密碼進行了加密處理。本部分只以oracle11.1密碼如何破解為例進行說明。
在發起連接之後(oracle牽手完成),客戶端和伺服器經過協商確定要使用的驗證協議。要完成這個任務,客戶端首先向資料庫發送一個包。包中包含客戶端主要信息和所請求的加密方式。資料庫確認加密方式有效後,發送一個確認服務包如下圖所示:
在通過安全網路服務完成任何所要求的協議之後,資料庫用戶被O3logon(oracle驗證方式) 進行驗證,這個協議執行一個序列來向資料庫證明客戶端擁有密碼。為了避免網路第三方截獲到密碼。首先客戶端發送用戶名到資料庫來表明用戶身份。資料庫端根據加密協議,其中96位的作為資料庫端密鑰,20位的作為偏移量,它對每個連接都是不同的。一個典型的資料庫端發給客戶端的密鑰如下:
AUTH_SESSKEY.....COCDD89FIGODKWASDF……………………
客戶端根據加密演算法向伺服器端發送96位的客戶端密鑰和64位的密碼密鑰。伺服器端計算客戶端傳入的密碼密鑰。如果計算後密碼密文和資料庫中存儲的16位密碼密文一致則驗證通過。
根據這個過程可知上面TNS劫持包中取得的加密信息:AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA這四個值是解密的關鍵。我們把他們按照SHA1,MD5,AES192進行一系列處理。最終通過數據字典碰撞得到密碼明文。
下面這段網上公布的一段示例代碼,這段代碼與筆者的思路不完全相同,但也能大概地說明這個漏洞的攻擊過程:
import hashlib
from Crypto.Cipher import AES
def decrypt(session,salt,password):
pass_hash= hashlib.sha1(password+salt)
key =pass_hash.digest() + 'x00x00x00x00'
decryptor= AES.new(key,AES.MODE_CBC)
plain =decryptor.decrypt(session)
returnplain
session_hex ='6EAAB5422553A7598143E78767'
salt_hex = 'A7193E546377EC56639E'
passwords = ['test','password',''oracle','demo']
for password in passwords:
session_id= decrypt(session_hex.decode('hex'),salt_hex.decode('hex'),password)
print'Decrypted session_id for password "%s" is %s' %(password,session_id.encode('hex'))
ifsession_id[40:] == 'x08x08x08x08x08x08x08x08':
print'PASSWORD IS "%s"' % password
break
4、建議的預防措施
根據以上兩段分析,我們可以有如下的預防措施:
(1)在條件許可的情況下,對Oracle進行補丁升級,對Oracle打cpuoct2012-1515893補丁;注意對於cpuoct2012-1515893補丁要求伺服器端和應用伺服器端同時升級,否則應用系統將無法訪問Oracle;
(2)若無法對Oracle升級,要購買或安裝具備虛擬補丁功能的資料庫安全產品,防止對CVE-2012-3137和CVE-2012-1675的利用;
(3)建立足夠強健的口令,不要使用8位以下密碼,或者字典庫中的口令。
;Ⅷ oracle中對大數據處理有哪些方式
一、大數據存儲方式:
1. BLOB,二進制大數據
2. CLOB,文本類型大數據
3. BFILE(推薦),文件方式大數據,以連接(文件位置)方式存儲,實際在資料庫外
4. RAW,二進制大數據(ORACLE老版本的,9i後逐漸被BLOB/CLOB/BFILE代替)
二、大數據的處理內置函數
1. BLOB/CLOB/BFILE:DBMS_LOB包
2. RAW:UTL_RAW包
Ⅸ 怎麼在ORACLE中存儲大容量的字元串
oracle中的varchar2類型最大存儲長度好像是4000,如果存儲字元長度太大的話,可以用大文本類型(clob)。
Ⅹ 如何在Oracle裡面存儲大整數
Oracle number datatype 語法:NUMBER[(precision [, scale])]
簡稱:precision --> p scale --> s
NUMBER(p,s)
范圍: 1 <= p <=38, -84 <= s <= 127
保存數據范圍:-1.0e-130 <= number value < 1.0e+126
保存在機器內部的范圍: 1 ~ 22 bytes
有效位:從左邊第一個不為0的數算起的位數。
s的情況:
s > 0
精確到小數點右邊s位,並四捨五入。然後檢驗有效位是否 <= p。
s < 0
精確到小數點左邊s位,並四捨五入。然後檢驗有效位是否 <= p + |s|。
s = 0
此時NUMBER表示整數。
從而,Oracle可以存儲、可以運算的最大整數是 1e126 -1 。
declare
n number:=0;
begin
for i in REVERSE 1..125 loop
n := n + 9*power(10,i);
dbms_output.put_line(i || '-->' || n);
end loop;
insert into tt(id)values(n);
commit;
end;
/
經實際驗證,的確可以存放1e126-1,但無法查看,也無法參與運算。