环境:
源库 | 目标库 | |
IP | 192.168.37.200 | 192.168.37.201 |
系统版本 | RedHat 7.9 | RedHat 7.9 |
数据库版本 | 19.3.0.0.0 | 19.3.0.0.0 |
SID | beg | tar |
hostname | beg | tar |
数据量 | 412KB |
详细说明:因为只是做练习,这里采用了两个单例19c作为源端和目的端服务器,环境如上面所写。让我们进入正题:
TIPS:实际操作以实际命令为准,图片只是展示步骤(我是不会告诉你是我在做的时候忘记截源端的过程图导致的~)
一、hostname设置(源端&目标端)
编辑hosts:
vi /etc/hosts#修改成自己的ip和hostname
192.168.37.200 beg
192.168.37.201 tar
二、数据构造:
1、配置默认监听(源端&目标端):
我这里因为没有配置监听,所以配置一下,配置的可以直接跳过:
su - oraclecd $ORACLE_HOME/network/adminvi listener.ora#将以下内容添加至listener.ora
LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = beg)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = beg)(ORACLE_HOME = /u01/app/oracle/product/19.3.0/db)(SID_NAME = beg)))lsnrctl reload
2、启动数据库
sasstartup
3、创建临时表空间和数据表空间
#这里要注意临时表空间的名称和文件的路径,每个人的路径不一样
CREATE TEMPORARY TABLESPACE temp_tbs TEMPFILE '/u01/app/oracle/oradata/BEG/temp_tbs01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE 2G;CREATE TABLESPACE beg_data DATAFILE '/u01/app/oracle/oradata/BEG/beg_data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
4、创建用户kk指定数据表空间
这个命令意思为创建用户kk密码oracle并且指定数据表空间为beg_data,临时表空间为temp_tbs
CREATE USER kk IDENTIFIED BY oracle DEFAULT TABLESPACE beg_data TEMPORARY TABLESPACE temp_tbs QUOTA UNLIMITED ON beg_data;
5、授权
grant connect,resource,dba to kk;
6、查看结果
conn kk/oracleSELECT DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM user_users;
结果是这样的那就表示没有问题:
7、使用kk用户建表
复制粘贴即可:
#创建 departments 表
CREATE TABLE departments (department_id NUMBER PRIMARY KEY,department_name VARCHAR2(50),manager_id NUMBER,location_id NUMBER
);#创建 employees 表
CREATE TABLE employees (employee_id NUMBER PRIMARY KEY,last_name VARCHAR2(50),first_name VARCHAR2(50),email VARCHAR2(100),phone_number VARCHAR2(20),hire_date DATE,job_id VARCHAR2(50),salary NUMBER,manager_id NUMBER,department_id NUMBER
);
8、数据插入
我们这里采用如下方式进行数据插入,效率会高很多很多,内容10个部门,100个员工
这里说明一下,因为此次重点是进行数据迁移的模拟,对表内的关系没有深入探索。
#创建部门数据
DECLAREv_department_id NUMBER;v_manager_id NUMBER;v_location_id NUMBER;
BEGINFOR i IN 1..10 LOOPv_department_id := i;v_manager_id := ROUND(DBMS_RANDOM.VALUE(1, 100));v_location_id := ROUND(DBMS_RANDOM.VALUE(1, 5));INSERT INTO departments (department_id, department_name, manager_id, location_id)VALUES (v_department_id, 'Department ' || v_department_id, v_manager_id, v_location_id);END LOOP;COMMIT;
END;
/#员工
BEGINFOR i IN 1..100 LOOPINSERT INTO employees (employee_id, last_name, first_name, email, phone_number, hire_date, job_id, salary, manager_id, department_id)VALUES (i,'Lastname' || i,'Firstname' || i,'email' || i || '@example.com',TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1000000000, 9999999999))),SYSDATE - ROUND(DBMS_RANDOM.VALUE(0, 365*20)),'JOB' || ROUND(DBMS_RANDOM.VALUE(1, 10)),ROUND(DBMS_RANDOM.VALUE(30000, 100000)),ROUND(DBMS_RANDOM.VALUE(1, 100)),ROUND(DBMS_RANDOM.VALUE(1, 10)));END LOOP;COMMIT;
END;
/
我们插入完成之后可以查看下数据:
结果是:department有10条,employees有100条
col DEPARTMENT_NAME for a15;
select * from departments;col LAST_NAME for a10;
col FIRST_NAME for a10;
col EMAIL for a15;
col JOB_ID for a10;
select * from departments;
三、创建相关目录(源端&目标端)
此目录用于存放需要传输的数据文件与日志文件,到这一步的时候只有源端建立了kk用户,目标端还没有,所以授权只用在源端授权:
su - rootmkdir -p /u01/app/tempFile#授予oracle用户相关权限
chown -R oracle:oinstall /u01/app/tempFilechmod 777 /u01/app/tempFile#指定目录
su - oraclesasstartupcreate or replace directory tmpDir as '/u01/app/tempFile';#只在源端操作这一步
grant read, write on directory tmpDir to kk;
四、导出数据表并传输
1、导出数据表
参数说明:kk/oracle 这是用户以及密码, @beg:1521/beg 这三个分别是ip:端口/数据库名称,schemas后面跟的参数是要将用户kk下的所有对象,下面这些directory=tmpDir根据上一步进行设置, dumpfile后是导出的数据名字,logfile=export.log这是日志文件
su - oracleexpdp kk/oracle@beg:1521/beg schemas=kk directory=tmpDir dumpfile=export.dmp logfile=export.log
2、传输文件到目标端
cd /u01/app/tempFilescp export.dmp oracle@tar:/u01/app/tempFile/export.dmp
[oracle@beg:/u01/app/tempFile]$ scp export.dmp oracle@tar:/u01/app/tempFile/export.dmp
oracle@tar's password:
export.dmp 100% 412KB 20.9MB/s 00:00
五、目标端操作
1、创建表空间
依旧是注意路径
su - oraclesasstartup#创建临时表空间
CREATE TEMPORARY TABLESPACE temp_tbs TEMPFILE '/u01/app/oracle/oradata/TAR/temp_tbs01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE 2G;#创建数据表空间
CREATE TABLESPACE beg_data
DATAFILE '/u01/app/oracle/oradata/TAR/beg_data01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 50M MAXSIZE 2G;
2、查看/u01/app/tempFile的所有者
cd /u01/appll
很明显它的所有者是oracle
六、导入数据至目标端
内容与之前相似,这里就不做过多介绍了
impdp system/oracle@tar:1521/tar schemas=kk directory=tmpDir dumpfile=export.dmp job_name=myjob
七、验证
在上一步中,kk用户已经在目标端自动创建了,我们使用kk用户登录:
sasconn kk/oracle
我们知道在源端这两个表中一个有10条数据,一个有100条,我们使用以下命令在目标端验证下:
select count(*) from departments;
select count(*) from employees;
至此就OK啦