表空間無法擴充的方法

2022-02-16 03:28:06 字數 4387 閱讀 2131

最近接手乙個專案,訊飛要導一些表去我的中間庫,但是詢問後乙個單錶為40多g,匯入資料庫時一直使用匯入本地oracle資料庫的方法,即根據dmp檔案大小設定乙個資料檔案,設定表空間最大值。

--建立表空間,資料檔案為'

',初始大小50m,遞增10m,最大遞增到2g

create tablespace sgshare datafile ''

size 50m

autoextend on next 10m

maxsize 2048m;

生產考慮的時候,表會一直增加,所以開放表空間大小一直擴充的許可權。

--

改變使用者表空間容量限制,不做限制

alter

user ankangreli quota unlimited on ankangrelir_data;

表空間資料檔案容量與db_block_size有關,在初始建庫時,db_block_size要根據實際需要,設定為 4k、8k、16k、32k、64k等幾種大小,oracle的物理檔案最大只允許4194304個資料塊(由作業系統決定),表空間資料檔案的最大值為 4194304×db_block_size/1024m。

表空間增大的語句,前幾個部落格中都有寫到,但是,單個dmp檔案有增大的限制,當到了最大的時候,就無法增加,就會報錯。

回到該問題,通過上面的資訊我們得出:在本機單個表空間檔案大小超過32g時,表空間容量就達到了最大值,資料庫就不能繼續增加資訊了,那麼該採取什麼措施呢?

第一種辦法:多個資料檔案累加

將表空間儲存為多個資料檔案,每個檔案不大於32gb(精確的值為32768m)

乙個不夠用那就在加乙個,但是,訊飛導過來的乙個單錶為40g,所以這個撲該。

create

tablespace sgshare

logging

datafile ''

size 50m

autoextend

onnext

50m maxsize 32767m

extent management local; --

為表空間增加資料檔案

alter

tablespace sgshare

add datafile '

'size 50m

autoextend

onnext 50m maxsize 32767m;

第二種方法,修改db_block_size但是這個我初略理解意思,但是看別人的回答,貌似都不可以解決掉根據oracle的演算法,我們很容易想到這個解決方法。數目衡定,但是db_block_size可以更改(db_block_size的最大大小為32kb)。如果把db_block_size擴大到32kb,那麼我們的系統就可以支援單個資料檔案最大128gb。

預設一般都為32個g吧,我之前就是當時得知這個訊息的時候,我想把表空間擴充套件到40多g,好儲存訊飛導過來的表,但是,表空間擴大到30多g的時候就已經報錯了。

這個方案聽起來好像很迷人,但是實際上並不是那麼回事。因為要修改db_block_size並不是很容易的事。因為這個db_block_size在建立例項的時候就要指定。而且不能通過簡單修改引數來指定db_block_size。db_block_size的預設值為8192 bytes,是不能被使用者修改的。因為db_block_size對應於乙個例項,所以意味著在資料庫建立(建庫)以後是不能修改的,如需修改,可行的方式是重新建庫並把原庫的資料export到新庫。當然最好的方式是在建資料庫之前就規劃好,一般如果是oltp系統,可以保持預設值;olap環境可以考慮適當調大。

重頭來了,我就是用這種方法解決了我的燃眉之急。

在oracle11g中引進了bigfile表空間,他充分利用了64位cpu的定址能力,使oracle可以管理的資料檔案總量達到8eb。單個資料檔案的大小達到128tb,即使預設8k的db_block_size也達到了32tb。

但是唯一注意的一點是:使用bigfile表空間,它只能支援乙個資料檔案。也就是說這個檔案的最大大小就是表空間最大大小,你不可能通過增加資料檔案來擴大該錶空間的大小。不能像方法一可以增加額外的資料檔案。

下面是我使用這種方法解決我問題的語句:

--一、sqlplus登入sys或者system 建立oracle directory目錄

create directory dp_qianyi as

'd:\qianyi

'; --

同時應該在相應位置建立實際目錄

--刪除 drop directory dp_qianyi;

--授權 grant read,write on directory dp_qianyi to system scott;

--二、一 匯出 sgshare使用者下的模式

--

1、sqlplus登入sys或者system給sgshare授directory目錄許可權

grant

read,write on directory dp_qianyi to

sgshare;

--2、退出sqlplus登入,在cmd模式下,執行expdp匯出語句

expdp system/xyshare@xyshare directory=dp_qianyi schemas=sgshare dumpfile=qy_sgshare20181027.dmp logfile=qy_sgshare20181027.log

--3、匯出結束後,將匯出的檔案壓縮傳送到要匯入的資料庫伺服器上

--三、刪除原有資料庫使用者和表空間

1

、以system使用者登入查詢需要刪除的使用者(普通使用者沒有刪除許可權)

select

*from

dba_users;

2、查詢需要刪除使用者對應的表空間

select

*from

dba_data_files;

3、刪除使用者和表空間

drop

user

usernamecascade;

drop tablespace tablespacename including contents and datafiles cascade

constraint;

刪除表空間的時候,貌似發生了些問題,這個原本的dbf並沒有給我關閉,我是在services裡面關閉了oracle的服務,然後在去檔案中將表空間的資料檔案刪除掉,。

--四、在目的地資料庫伺服器上建立預設表空間和臨時表空間 、同名使用者

--4.1在原資料庫中查詢資料庫所有使用者資訊dba_users(可以查詢所要匯入的使用者對應的預設表空間和臨時表空間)

select username,default_tablespace,t.*

from dba_users t

檢視原來的表空間是否被刪除。

--4.2新建使用者相應表空間和臨時表空間

create bigfile tablespace sgshare datafile '

'size 102400m autoextend

onnext 128m maxsize 204800m extent management local; --

建立表空間

create

'size 50m autoextend

onnext 10m maxsize 100m; --

建立臨時表空間

臨時表空間我沒有建立。

----- 再次授權:     

grant read,write on directory dp_qianyi to system

--五、匯入xyshare使用者下的模式

impdp system/xyshare@xyshare directory=dp_qianyi  dumpfile=qy_sgshare20181027.dmp logfile=qy_sgshare20181027.log
之前的資訊都會存在壓縮下的檔案,所以表空間賬號密碼等都沒有變。這樣就可以正常使用了,以後再匯入多大的表都不用擔心了。當時創表空間的時候自己覺得設定為多大。還要考慮你的dmp存在的那個磁碟中的容量為多大。

ORA 01563表空間佔滿無法擴充解決辦法

發現資料庫無法連線,報錯內容截圖如下 0 用sql plus 命令登入資料庫。sqlplus as sysdba 1 調整oracle表空間大小 調整system01.dbf為4g alter database datafile home db oracle oradata orcl system0...

Oracle表空間管理檢視,擴充

1.檢視表空間使用率 包括臨時表空間 select from select a.tablespace name,to char a.bytes 1024 1024,99,999.999 total bytes,to char b.bytes 1024 1024,99,999.999 free byt...

CentOS上擴充lv root下的空間

最近檢視伺服器發現vg host01 lv root下的空間占用的比較多,需要擴容 以下兩種方案 1 利用空餘的磁碟,擴充套件lv root的大小 推薦 2 將lv home的空間挪出一部分給lv root 由於硬體條件有限最終採用這種方法 將lv home的空間挪出一部分給lv root的具體步驟...