程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle網上摘記

Oracle網上摘記

編輯:Oracle數據庫基礎

Oracle的SQL可以有多長?
應用客戶端拋出一個異常,錯誤提示為:
RJSQLException(Java.io.UTFDataFormatException): encoded string too long: 66007 bytes
提示顯示,編碼SQL達到66007 BYtes,過長,出錯。

朋友問,SQL最長的限制是多少?

根據Oracle文檔描述,在Oracle9i中,SQL Statement Length - Maximum length of statements - 64 K maximum; particular tools may impose lower limits。

這裡的64K限制實際上並不確切,很多更長的SQL也可以執行,在Oracle10g的文檔中,記錄如下定義:
The limit on how long a SQL statement can be depends on many factors, including database configuration, disk space, and memory。

這下確切了,但是也失去了參考性,根據9i的標准,64K有時候的確是一個臨界值,可能在未傳遞到數據庫時,前端已經出錯了,今天這個問題就是如此,提出SQL在數據庫裡通過Sql*Plus執行是沒有問題的,而在Java應用客戶端是拋出了異常。通常可以通過將代碼拆分,組合來回避。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Oracle中數據文件大小的限制
Oracle數據文件的大小存在一個內部限制,這個限制是:
每個數據文件最多只能包含2^22-1個數據塊。

這個限制也就直接導致了每個數據文件的最大允許大小。
在2K Block_size下,數據文件最大只能達到約8G
在32K的Block_size下,數據文件最大只能達到約16*8G的大小。

這個限制是由於Oracle的Rowid中使用22位來代表Block號,這22位最多只能代表2^22-1個數據塊。

為了擴展數據文件的大小,Oracle10g中引入了大文件表空間,在大文件表空間下,Oracle使用32位來代表Block號,也就是說,在新的技術下,大文件表空間下每個文件最多可以容納4G個Block。
那麼也就是說當Block_size為2k時,數據文件可以達到8T 。
當block_size為32K時,數據文件可以達到128T。

上周在做2K block_size測試時,第一次遇到了這個限制:

SQL> alter tablespace eygle add datafile 'f:\eygle02.dbf' size 8192M;
alter tablespace eygle add datafile 'f:\eygle02.dbf' size 8192M
*
ERROR 位於第 1 行:
ORA-01144: 文件大小 (4194304 塊) 超出 4194303 塊的最大數

縮減一點,最後創建成功:

SQL> alter tablespace eygle add datafile 'f:\eygle02.dbf' size 8191M reuse;

表空間已更改。

已用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved