擴展表空間
表空間是數據庫的邏輯劃分,一個表空間只能屬於一個數據庫,所有的數據庫對象都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。一旦表空間佔滿了,再往裏面插數據,就會有提示。
具體表空間步驟如下所示:
① 查看錶空間的名字及文件所在位置。
select tablespace_name,file_id,file_name,round(bytes / (1024 * 1024), 0) total_space
from sys.dba_data_files order by tablespace_name;
② 查詢表空間信息。
select username,default_tablespace,t.* from dba_users t
③ 查詢當前表空間下使用情況。(從下面查詢結果看出,這個表空間已經滿了,存不下任何東西,需要進行擴展表空間)
select a.tablespace_name,
a.bytes / 1024 / 1024 "sum MB",
(a.bytes - b.bytes) / 1024 / 1024 "used MB",
b.bytes / 1024 / 1024 "free MB",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "used%"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by ((a.bytes - b.bytes) / a.bytes) desc;
④ 擴展表空間到2G(執行擴展語句後即可操作數據庫,無需重啓)。
alter database datafile '/u01/app/oracle/oracledata/ebidding_ztb_data.dbf' resize 2048M;
數據遷移
Oracle數據遷移在日常的開發工作中是必須掌握的一個操作,如今有很多工具可以做數據遷移的,如:navicat等。本文中數據遷移不借助工具,僅使用Oracle原始的命令數據遷移。數據遷移的情景目前我總結一下兩種情況:
一、同一個用戶/表空間中的數據遷移步驟如下:
① 登陸oracle
命令:su - oracle
② 創建備份文件夾並授權(本文中文件夾路徑爲:/u01/dbbak)
命令:mkdir dbbak
sudo chmod 777 dbbak
③ 建立導出文件所在目錄(該命令需要登陸數據庫纔可以執行,即輸入命令:sqlplus / as sysdba)
命令:create or replace directory DBBAK as '/u01/dbbak';
select * from dba_directories;(查看命令)
④ 備份dmp文件(用戶/密碼是數據庫登陸用戶和密碼,dbbak.dmp和dbbak.log中dbbak爲自定義名稱)
命令:expdp 用戶/密碼 schemas=用戶 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log
⑤ 還原dmp文件
命令:impdp 用戶/密碼 schemas=用戶 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log
注意:有一些情況下,執行備份或者還原命令會報錯:directory name DBBAK is invalid,其主要的原因是權限問題,請更換擁有權限的賬號密碼即可。
二、不同用戶/表空間中的數據遷移步驟如下:
備份數據如上述第一種情況中,①~④的步驟不變,其變化的是創建用戶及還原dmp文件不同。
① 創建用戶/表空間
創建用戶命令:create user 用戶名 profile default identified by 密碼 default tablespace 表空間名稱 temporary tablespace 臨時表空間名稱 account unlock;
創建表空間命令:create tablespace 表間名 datafile '數據文件名(自己安裝oracle時的路徑,如:/u01/app/oracle/oradata/bpas/XXXX.dbf)' size 表空間大小,如:create tablespace data_name datafile 'E:\oracle\oradata\data_name.dbf' size 2000M;
② 授權
命令:grant dba to 創建的用戶名;
grant connect to 創建的用戶名;
grant resource to 創建的用戶名;
grant create sequence to 創建的用戶名;
grant create session to 創建的用戶名;
grant create any view to 創建的用戶名;
grant create any table to 創建的用戶名;
grant delete any table to 創建的用戶名;
grant insert any table to 創建的用戶名;
grant select any table to 創建的用戶名;
grant update any table to 創建的用戶名;
grant create any index to 創建的用戶名;
grant unlimited tablespace to 創建的用戶名;
grant create any index to 創建的用戶名;
③ 還原
命令:impdp 用戶名/密碼 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log REMAP_SCHEMA=數據所在用戶名:創建的用戶名;(用戶名稱不相同,表空間名稱相同)
命令:impdp 用戶名/密碼 directory=DBBAK dumpfile=dbbak.dmp logfile=dbbak.log REMAP_SCHEMA=數據所在用戶名:創建的用戶名 remap_tablespace=數據庫所在表空間:創建的表空間;(用戶名稱不相同,表空間名稱也不相同)
注意:如果在還原的過程中,報文件的權限不足的時候,需要退出oracle到linux下,執行相關的授權命令。
命令:chown -R oracle:oinstall dbbak;(dbbak爲備份文件夾,自定義即可)。
三、注意不同的命令有不同的還原
Oracle數據庫中,有不同的備份和還原命令,上述中使用的是expdp和impdp命令,除此以外,還有exp和imp命令,切記不能混淆着用。exp和imp的命令如下(以下內容來源於百度):
基本語法和實例:
①EXP:有三種主要的方式(完全、用戶、表)
1、完全:EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
如果要執行完全導出,必須具有特殊的權限
2、用戶模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC
這樣用戶SONIC的所有對象被輸出到文件中。
3、表模式:EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
這樣用戶SONIC的表SONIC就被導出
②IMP:具有三種模式(完全、用戶、表)
1、完全: IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
2、用戶模式: IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC
這樣用戶SONIC的所有對象被導入到文件中。必須指定FROMUSER、TOUSER參數,這樣才能導入數據。
3、表模式: EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
這樣用戶SONIC的表SONIC就被導入。