记一次项目上大文件导入Oracle实例。
参考转载链接:https://blog.youkuaiyun.com/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.youkuaiyun.com/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;