記一次項目上大文件導入Oracle實例。
參考轉載鏈接:https://blog.csdn.net/qq_38380025/article/details/80647620
首先,項目內文件是有分區的,所以要使用oracle的企業版纔行,通過sql查看:
select * from v$version;
我的結果爲:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
Oracle創建數據庫和用戶
mysql和sql server用起來比較類似,就oracle的使用方式和他們不同,oracle在創建數據庫的時候要對應一個用戶,數據庫和用戶一般一一對應,mysql和sql server 直接通過create databse “數據庫名” 就可以直接創建數據庫了,而oracle創建一個數據庫需要以下三個步驟:
- 創建兩個數據庫的文件
- 創建用戶與上面創建的文件形成映射關係
- 給用戶添加權限
創建兩個數據文件
create tablespace [數據庫名稱] logging datafile '/home/oracle/app/oracle/oradata/helowin/[數據庫名稱].dbf'
size 100m autoextend on next 32m maxsize 500m extent management local;
create tablespace [數據庫名稱] logging datafile '/home/oracle/app/oracle/oradata/helowin/[數據庫名稱].dbf'
size 100m autoextend on maxsize unlimited;可無限擴展大小(牆裂建議都這樣用吧)。
create temporary tablespace [數據庫名稱]_temp tempfile '/home/oracle/app/oracle/oradata/helowin/[數據庫名稱]_temp.dbf'
size 100m autoextend on next 32m maxsize 500m extent management local;
#後來發現臨時表空間可以不用創建,主要之前不會用Oracle。
之前以爲83G的文件是一、兩個表空間,創建表空間時提示:
CREATE TABLESPACE testqqq LOGGING DATAFILE '/home/oracle/app/oracle/oradata/helowin/testqqq.dbf'
SIZE 100M AUTOEXTEND ON NEXT 32M MAXSIZE 2048000M EXTENT MANAGEMENT LOCAL
ORA-03206: maximum file size of (262144000) blocks in AUTOEXTEND clause is out of range
oracle在db_block_size=4k時,表空間最大隻能16G
後面查資料看到Oracle 11g 支持bigfile,可寫爲:
create bigfile tablespace [數據庫名稱] logging datafile '/home/oracle/app/oracle/oradata/helowin/[數據庫名稱].dbf'
size 100m autoextend on next 32m maxsize 50000m extent management local;
但是後面發現有很多表空間,每個大約有3G數據,後來廢棄這種方式。
下圖爲各db_block_size=Xkb時,表空間最大的列表,鏈接:https://www.cnblogs.com/zjfjava/p/9556311.html
由於是臨時導入,直接用了SYSTEM用戶。
下面爲安裝過程:
安裝docker
使用的ubuntu18.04
鏈接:https://www.jianshu.com/p/cef32b054968
安裝Oracle11g
鏈接:https://blog.csdn.net/qq_38380025/article/details/80647620
導入dmp文件
1.使用docker cp 把文件複製到容器內
2.由於表空間較多,用腳本輸出:
#! /bin/env/python
YEAR = ['2016','2017','2018','2019','2020']
MONTH = ['01','02','03','04','05','06','07','08','09','10','11','12']
STRING = ['A','B','C']
for year in YEAR:
for month in MONTH:
for string in STRING:
print "CREATE TABLESPACE TM_SITE"+year+month+"_"+string+" LOGGING DATAFILE '/home/oracle/app/oracle/oradata/helowin/TM_SITE"+year+month+"_"+string+".dbf'SIZE 100M AUTOEXTEND ON MAXSIZE UNLIMITED;"
3. /home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/imp system/system@helowin file=/home/tb_citizen.dmp full = y ignore = y buffer=100000000 #這個buffer一開始沒加報錯,後來百度加上後可以。(不知道爲什麼。。。)
4.等待。後面沒有報錯了,時間較久。
5.注意!!找個足夠的磁盤,找個足夠的磁盤,找個足夠的磁盤。要不真浪費時間。83G的文件恢復出來大概有500G的樣子。
拓展
創建用戶與上面創建的文件形成映射關係(用戶名爲monitor,密碼爲monitor)
CREATE USER monitor IDENTIFIED BY monitor DEFAULT TABLESPACE[數據庫名稱] TEMPORARY TABLESPACE [數據庫名稱]_temp;
grant connect,resource,dba to monitor;
grant create session to monitor;
DROP TABLESPACE monitor INCLUDING CONTENTS AND DATAFILES;
- 對於帶有分區,首先刪除表,才能刪除表空間及數據文件;
DROP TABLE [表名];
- DROP TABLESPACE TM_SITE201601_A INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TM_SITE201601_B INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TM_SITE201601_C INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TM_SITE201602_A INCLUDING CONTENTS AND DATAFILES;等等
drop user monitor cascade;