Oracle数据库迁移

目录

记一次Oracle数据库迁移的整个过程

简单谈谈本人对Oracle数据库的理解

数据库实例 表空间 用户
一台服务器上可存在一个或多个实例,可以理解为一个个小区 只存在于数据库实例当中,可以包含表、视图、索引等。可以理解为小区中的每栋楼,其中包含房子、家具等 用户只存在与实例当中,操作表空间中的内容如表、视图、索引等也可操作实例。可以理解为买楼的人。一个用户可以绑定多个实例同时也可以设置不同的权限,可以理解为是否可以对属于你的某栋楼进行装修、开门等动作

话不多说直接开始

第一步:将原始数据库导出

方式1(推荐):使用Data Pump
复制代码
--创建文件路径
create or replace directory 路径名 as 'C:\backup' --根据情况自定义

--执行导出命令
expdp 用户名/密码@IP地址:端口/实例名 directory=路径名 dumpfile=backupDemo.dmp

directory:等于创建的路径名称

执行成功后文件保存在 C:\backup 路径下,文件名为 backupDemo.dmp

方式2(数据库较大时速度慢):使用exp命令
复制代码
--基本用法1:导出全部库
exp 用户名/密码@IP地址:端口/实例名 file=C:\backup\backupDemo.dmp full=y

--基本用法2:导出某个用户的某个库
exp 用户名/密码@IP地址:端口/实例名 file=C:\backup\backupDemo.dmp owner=users

--基本用法3:导出某个用户的某个表
exp 用户名/密码@IP地址:端口/实例名 file=C:\backup\backupDemo.dmp tables=(table1,table2)

file=C:\backup\backupDemo.dmp 表示文件存放位置

full=y 表示导出整个库

owner=users 表示要导出的用户

tables=(table1,table2) 表示导出的表名

第二步:创建一个数据库实例(也可以使用原有的实例,只需要创建表空间)

1.1 创建实例

在服务器上找到 Database Configuration Assistant 工具,打开后如没有特殊需求一直点击下一步即可

输入数据库名称(数据库链接时的实例名称),这个要记好

注意在设置密码时为方便可用统一管理

创建完成可能会有警告信息,退出即可

使用 sqlplus 进行连接

复制代码
//管理员账号进行登录
sqlplus system/密码@IP地址:端口/实例名

能打通表示创建成功!

1.2 创建表空间(与原数据库表空间名称保持一致)\删除表空间
复制代码
--创建临时表空间(用于存储数据库操作过程中的临时数据)
CREATE TEMPORARY TABLESPACE temp --临时表空间名称
TEMPFILE 'C:\app\Administrator\oradata\temp.DBF' -- 找到自己的存放位置
SIZE 50M -- 初始大小为50M
AUTOEXTEND ON -- 自动扩展
NEXT 50M MAXSIZE 20480M -- 每次增量为50M ,最大2048M
EXTENT MANAGEMENT LOCAL;

--创建表空间
CREATE TABLESPACE demo --临时表空间名称
LOGGING
DATAFILE 'C:\app\Administrator\oradata\demo.DBF' -- 找到自己的存放位置
SIZE 50M -- 初始大小为50M
AUTOEXTEND ON -- 自动扩展
NEXT 50M MAXSIZE 20480M -- 每次增量为50M ,最大2048M
EXTENT MANAGEMENT LOCAL;

--删除表空间
DROP TABLESPACE 表空间名 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
1.3 创建用户并关联表空间
复制代码
CREATE USER 用户名 IDENTIFIED BY 密码
DEFAULT TABLESPACE demo  -- 表空间
TEMPORARY TABLESPACE temp; -- 临时表空间

--修改用户表空间(分配错误或调整用户权限时使用)
ALTER USER 用户名 DEFAULT TABLESPACE demo01;
1.4 设置用户权限\撤销用户权限

Oracle提供多种系统预定义角色

复制代码
--给用户授权
--CONNECT角色:连接权限
--RESOURCE角色:创建一些特定的数据库对象等
--DBA角色:所有系统权限
GRANT CONNECT,RESOURCE,DBA TO userName;

--撤销用户权限(分配错误或调整用户权限时使用)
REVOKE CONNECT,RESOURCE FROM userName;

第三步:导入

这里要注意的是由于exp和expdp导出的原文件格式有区别,使用exp导出的文件只能用imp导入,expdb同理

方式1(推荐):使用Data Pump
复制代码
--创建文件路径
create or replace directory 路径名 as 'C:\backup' --根据情况自定义

--执行导入命令
impdp 用户名/密码@IP地址:端口/实例名 
remap_schema=原模式名:目标模式名 
directory=路径名 
dumpfile=backupDemo.dmp 
logfile=export.log 
TABLE_EXISTS_ACTION=REPLACE

remap_schema=原模式名:目标模式名:表示将数据还原到同名的模式中,如果目标库没有这个用户,需要先创建

logfile=export.log:导入过程日志文件的名称。该日志文件也会被写入到 directory参数指定的目录中

TABLE_EXISTS_ACTION=REPLACE:当要导入的表在目标模式中已经存在时,指定如何处理

常用参数

REPLACE:删除目标数据库中已存在的表,然后重新创建并导入数据

APPEND:向现有表追加数据

SKIP:跳过已存在的表

TRUNCATE:截断现有表的数据再导入

方式2(数据库较大时速度慢):使用imp命令
复制代码
imp 用户名/密码@IP地址:端口/实例名 
FILE=c:\backup\backupDemo.dmp 
FULL=Y 
ignore=y

FULL=Y:导入转储文件中的全部内容

ignore=y:遇到"对象已经存在"的创建错误(ORA-00955)时,忽略这个错误并继续处理

总结:

按照步骤即可实现基本的数据库复制以及还原,再导入过程中可能会遇到内存不足、主键冲突等问题。查看日志定位到有问题的地方解决即可。

相关推荐
许泽宇的技术分享1 小时前
当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
数据库·.net·text2sql·mcp
2301_803554521 小时前
redis学习
数据库·redis·学习
TT哇2 小时前
@[TOC](MySQL)MySQL经典练习题(详解)
数据库·mysql
Pure_Eyes3 小时前
mysql 执行sql流程概述
数据库·sql·mysql
森之鸟4 小时前
审核问题——鸿蒙审核返回安装失败,可以尝试云调试
服务器·前端·数据库
有技术的小白4 小时前
[特殊字符] 数据库知识点总结(SQL Server 方向)
数据库·sql
jllws14 小时前
数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_索引和视图
数据库·sql
望获linux5 小时前
【实时Linux实战系列】基于实时Linux的音频实时监控系统
大数据·linux·服务器·网络·数据库·操作系统·嵌入式软件
踩坑小念5 小时前
Redis线程模型
数据库·redis·缓存