环境:
源库 | 目标库 | |
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 - oracle
cd $ORACLE_HOME/network/admin
vi 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、启动数据库
sas
startup
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/oracle
SELECT 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个员工
这里说明一下,因为此次重点是进行数据迁移的模拟,对表内的关系没有深入探索。
#创建部门数据
DECLARE
v_department_id NUMBER;
v_manager_id NUMBER;
v_location_id NUMBER;
BEGIN
FOR i IN 1..10 LOOP
v_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;
/
#员工
BEGIN
FOR i IN 1..100 LOOP
INSERT 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 - root
mkdir -p /u01/app/tempFile
#授予oracle用户相关权限
chown -R oracle:oinstall /u01/app/tempFile
chmod 777 /u01/app/tempFile
#指定目录
su - oracle
sas
startup
create 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 - oracle
expdp kk/oracle@beg:1521/beg schemas=kk directory=tmpDir dumpfile=export.dmp logfile=export.log
2、传输文件到目标端
cd /u01/app/tempFile
scp 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 - oracle
sas
startup
#创建临时表空间
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/app
ll
很明显它的所有者是oracle
六、导入数据至目标端
内容与之前相似,这里就不做过多介绍了
impdp system/oracle@tar:1521/tar schemas=kk directory=tmpDir dumpfile=export.dmp job_name=myjob
七、验证
在上一步中,kk用户已经在目标端自动创建了,我们使用kk用户登录:
sas
conn kk/oracle
我们知道在源端这两个表中一个有10条数据,一个有100条,我们使用以下命令在目标端验证下:
select count(*) from departments;
select count(*) from employees;
至此就OK啦