oracle导入线上数据的全步骤

多租户架构允许oracle数据库成为一个多租户的容器数据库,也就是CDB,container database,与之相对应的,则是插入到这个容器里面的可插拔式数据库,pluggable database
一个CDB可以包含0,1或者多个用户创建的PDB。
一个PDB则是一个可插拔式的集合,它包含了用户,用户的对象,以及非用户的对象,它对外看起来就相当于一个non-CDB,也就是普通数据库。在12C之前的所有数据库都是non-CDB。
CDB里面的容器
一个容器既是一个PDB,也是一个root。
1、准备好数据库, 使用docker方式安装oracle数据库
1 | docker run -d --name oracle --privileged - v /d/docker_env/oracle/db_data : /opt/oracle/oradata -p 5050:5050 -p 5500:5500 -p 1521:1521 scalified /oracle-database :12.1.0.2-ee
|

注意第一次拉取镜像有点慢。
2、配置数据库
创建本地数据库用户名和密码,以及表空间,进入容器中
(2.1) docker exec -it bc261a5326c6 /bin/sh
(2.2) 修改tnsnames.ora文件, echo $ORACLE_HOME,找到文件位置
tnsnames.ora, $ORACLE_HOME\network\admin 下,


打开tnsnames.ora 查看默认数据库,配置环境变量,不然下面2.3代码无法生效

1 | export ORACLE_SID=ORCLCDB
|
(2.3)输入以下代码
1 | sqlplus sys /change_on_install as sysdba
|
(2.4)创建新的pdb AEOLUSOA, 注意路径是根据命令( select name from v$datafile;) 得出来,并非随意捏造。
1 | CREATE PLUGGABLE DATABASE AEOLUSOA ADMIN USER DB_OA_FZ_FJJSZX IDENTIFIED BY ****** STORAGE (MAXSIZE 100G) DEFAULT TABLESPACE TBS_DB_OA_FZ_FJJSZX DATAFILE '/opt/oracle/oradata/ORCLCDB/AEOLUSOA/AEOLUSOA01.dbf' SIZE 150M AUTOEXTEND ON PATH_PREFIX = '/opt/oracle/oradata/ORCLCDB/AEOLUSOA/' FILE_NAME_CONVERT = ( '/opt/oracle/oradata/ORCLCDB/pdbseed/' , '/opt/oracle/oradata/ORCLCDB/AEOLUSOA/' );
|

(2.5)输入以下代码,启动PDB数据库:
1 | alter pluggable database AEOLUSOA open ;
|
(2.6)防止每次docker重新启动,需要多次配置
1 | alter pluggable database AEOLUSOA save state;
|
(2.7)删除不要的pdb(可选)
1 | drop pluggable database AEOLUSOA;
|
(2.8)启动pdb,以下步骤一定要在自己pdb操作
1 | alter session set container=AEOLUSOA ;
|
(2.9)授权用户
1 2 3 4 5 | grant imp_full_database to DB_OA_FZ_FJJSZX;
grant SYSDBA to DB_OA_FZ_FJJSZX;
grant all PRIVILEGES TO DB_OA_FZ_FJJSZX;
grant imp_full_database to DB_OA_FZ_FJJSZX;
|
(2.10)创建表空间(可选),一定要跟线上一致不然,这步不做的话,默认是system的表空间,导入数据需要用vi,修改dmp文件
1 2 3 4 | create tablespace TBS_DB_OA_FZ_FJJSZX_AUTOFORM logging datafile '/opt/oracle/oradata/ORCLCDB/AEOLUSOA/TBS_DB_OA_FZ_FJJSZX_AUTOFORM
.dbf' size 10240m autoextend on next 100m MAXSIZE unlimited extent management local ;
alter user DB_OA_FZ_FJJSZX_AUTOFORM quota unlimited on TBS_DB_OA_FZ_FJJSZX_AUTOFORM;
|
or
1 2 | vi *.dmp
:1,$s /TBS_DB_OA_FZ_FJJSZX/SYSTEM/g
|
(2.11)配置tnsname.ora文件,将下面字复制到tnsname.ora文件中
1 2 3 4 5 6 7 8 9 | AEOLUSOA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = AEOLUSOA)
)
)
|

(2.12)数据库迁移导入
线上备份
(1)、执行服务器的备份脚本,如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | set mySid=JSZXOA
set myPath=D:/data/%date%
set user1=DB_OA_FZ_FJJSZX
set pass1=*******
set user2=DB_OA_FZ_FJJSZX_AUTOFORM
set pass2=********
md "%myPath%"
exp '%user1%/%pass1%@%mySid%' file='%myPath%/%user1%.dmp' log='%myPath%/%user1%.log'
exp '%user2%/%pass2%@%mySid%' file='%myPath%/%user2%.dmp' log='%myPath%/%user2%.log'
|
(2)、数据在D:\data\{导出日期}\中。
(3)、复制到本地
(4)、dmp文件复制到启动的容器中,注意e6a787fccdf2,要使用docker ps命令查看当前docker启动的id
1 | docker cp d:\data\2024-10-17\DB_OA_FZ_FJJSZX.dmp e6a787fccdf2: /opt/oracle
|
(5)数据导入
1 | imp DB_OA_FZ_FJJSZX/DB_OA_FZ_FJJSZX@AEOLUSOA fromuser=DB_OA_FZ_FJJSZX touser=DB_OA_FZ_FJJSZX file=/opt/oracle/DB_OA_FZ_FJJSZX.dmp log=/opt/oracle/imp.log ignore=y
|