记一次项目上大文件导入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
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用户。
下面为安装过程:
使用的ubuntu18.04
链接:https://www.jianshu.com/p/cef32b054968
链接:https://blog.csdn.net/qq_38380025/article/details/80647620
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 NEXT 32M MAXSIZE 10240M EXTENT MANAGEMENT LOCAL;"
3. /home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/imp system/admin@orcl 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 user monitor cascade;