Oracle数据库迁移-基础

Oracle数据库迁移-基础

作为一个开发人员,数据库知识肯定是需要我们掌握的。但是目前公司的数据库都是有专门的DBA维护的,一般都是给我们一个环境地址,然后我们书写CRUD SQL。而且公司产品要求是可以跨数据源的,这样平时基本上都不太关心特定数据库平台的操作。结果导致自己的DB知识严重不足。今天因为一些原因,需要在外网服务器上搭建演示环境,结果需要“悲剧”的自己操作数据库。

任务:在外网服务器上搭建演示环境,包括服务器、代码、数据库。

    解决方案:

(1)找一个新的产品安装程序,然后去服务器安装。

(2)把自己本地用的开发环境copy到服务器。

    分析:

方案1,肯定可以安装上产品,看起来是最简单的方案。但是由于内部开发版本还不问题,没有统一的完整的安装程序,需要东拼西凑把各个部门的产品都找齐,然后安装、然后打补丁。因为演示的是开发产品,所以最终代码还不一定能运行,时间也会比较长。

方案2,看起来比较简单,但是因为外网服务器无法访问数据库服务器,所以需要自己单独做一下数据库的迁移(从来没做过)。纠结了一下,最后为了避免麻烦选中了方案2(-_-! 把自己坑了),然后跟测试要了一些资料:

Oracle数据库导出:

--1:进sqlplus创建database directory
   SQL> create directory j(随意取,建一次即可) as 'E:\reportback\20150429'; 
--2:给相关用户授权
SQL> grant read,write on directory j to nc60_fbs1(需要导出的数据库用户);
--3:退出sqlplus,执行导出语句
expdp nc60_fbs1/1 dumpfile=nc60fbs1.dmp(导出时自己取的名) logfile=nc60exp.log directory=pff parallel=2
说明:
dumpfile为备份文件;
logfile为日志文件;
directory为上面创建的directory名(创建目录);
parallel为并行数;
注意:dumpfile和logfile后只需跟文件名,是相对于directory的相对路径;
注意:上文中的'/data2/expdir'为linux下的路径,若为windows则改为相应地址,切记。

看到上面的操作资料,有点头大,以前很少操作Oracle数据库,对于Oracle数据库的结构不是很了解。上面的语句有似曾相识的感觉(绝对不是初恋的感觉),本着DB不要乱操作的原则。首先还是先补充点Oracle数据库的基础知识吧。

资料:(网上很多)

Oracle用户/表空间/表的关系http://www.cnblogs.com/adforce/p/3312252.html

EXPDP工具:http://jingyan.baidu.com/article/9113f81b2040862b3314c757.html

Sqlplus使用:http://blog.chinaunix.net/uid-74941-id-85228.html

Directory命了:http://blog.csdn.net/bisal/article/details/24667609

整理:

1.Directory命令

Directory命了用于定义一个目录对象,Oracle用我们定义的目录对象将数据导出到指定的位置,就好像我们编程的时候经常定义一个目录变量,然后编程的时候直接用这个变量,这样就不用每次都写这个变量导致目录位置不一致了。Directory的信息存储在系统的dba_directories表中。

--创建目录
Create directory 目录名称 as 目录(注意windows和linux系统是不一样的写法);

--查看已经创建的目录
Select * from dba_directories;

--删除建立的目录,用drop不是delete
Drop directory 目录名称

2.User、tablespace、table之间的关系

Oracle数据库的结构和MySql这类有很大区别,一边数据库的结构我们都从两个方面列举,物理层面和逻辑层面,也就是我们常说的数据库的三层模式,两种映射。Oracle的物理存储结构很复杂,这里不讨论,而且跟这次的数据迁移无关,如果硬要说,那导出的DMP文件就可以认为是Oracle的物理存储的一种。

在MySql数据库中,我们可以新建一个数据库(create database)然后为用户授权这个库的权限。在Oracel中,同样有用户的概念,但是所谓的tablespace就可以认为是database,只不过是逻辑组织,table就是实际我们操作的表。

引用一个形象的比喻:

整个Oracle数据库就是一个大的柜子,这个柜子会被分为多个层,每个层就是一个tablespace,每个层中的文件就是我们的table,文件中纸及上面的数据就是我们的data。

--创建用户,并指定表空间,一般都需要指定,放到默认表空间的很少
Create user 用户名identified by 密码  default tablespace  表空间名称 temporary tablespace temp; 

--还可以加上用户权限
--去掉分好,加上:
--quota Storage(unlimited , 8k, 10M etc.) on tablespace 表空间名称

--修改用户对表空间的权限
alter user IUFO6360330 quota unlimited on users;

--查看实例
select instance_name from v$instance;

--查询用户
select  * from dba_users;

--关闭用户会话

3.Expdp/exp/impdp/imp工具

Expdp/impdp:Oracle开发的供DBA进行数据导入导出的工具,并不是命令(最开始当做类似create的命了去执行了)。如果安装Oracle或者客户端工具的时候没有问题,直接在cmd命了下输入执行语句就可以了。

Exp/imp是客户端的工具,expdp和impdp是服务器端工具,也就是如果我们用远程的方式就用exp和imp工具如果是在DB服务器上就用expdp和impdp。

--expdp导出

--impdp导入,注意remap_schema还可以配置remap_table参数
--remap_schema基于用户的,remap_table基于参数的

impdp 用户名/密码 dumpfile=文件.dmp logfile=log文件名.log directory=引用的目录 parallel=2 remap_schema=源用户名:目标用户名

4.Sqlplus的作用

命令行环境下的oracle操作工具。

实际迁移:

对迁移步骤和迁移配置了解的差不多了,具体实施的时候,因为本人太懒(对程序员来说不是个好的习惯,不过好东西都是懒人发明的。)没有在自己的机器上装sqlplus,所以用DbVisualizer连接到了服务器数据库,执行了directory的创建语句,然后给用户授权(要换个用户连接再授权,最好是用system admin身份登录),之后要去服务器执行expdp命了,懒得去了弄了,就向QA要了一个之前备份过的库。

获得了备份文件,远程到外网服务器,然后执行导入语句,执行导入前要新建一个用户,并为用户分配表空间和权限。分别tablespace和grant的步骤非常重要。第一次导入数据的时候,因为没有给create后的user分配dba和connect的权限,所以导致了很多迁移失败。

创建用户的时候要注意指定tablespace,这个tablespace可以找DBA问,或者自己创建一个,但是自己创建的时候要指定tablespace的一些参数,如果不是DBA这些参数还是别乱设置了。

时间: 2024-12-13 09:57:37

Oracle数据库迁移-基础的相关文章

oracle数据库迁移步骤思路

背景:做为一名DBA,oracle数据库迁移是经常要遇到的事情,正好最近我也在迁移一个业务系统,数据库就是oracle,顺便记录一下. 说明:为了方便说明,旧的数据库称为A,新的为B.用户和密码是IRP/IRP ,  B是全新的环境. 步骤思路: 1.从 A 上导出数据文件. sqlplus /nolog conn / as sysdba EXP IRP/IRP BUFFER=64000 FILE=D:\test.DMP log=D:\test.log OWNER=IRP 2.在A机器上查看用户

oracle数据库免费基础知识精讲视频分享!

课程简介:数据库基础知识.Oracle的环境搭建.Oracle体系结构.SQL语言基础.函数的使用.约束.索引.数据字典.分组查询.多表连接查询.子查询等.通过对Oracle数据库的系统详解,培养学 生的能力如下:在实际工作中,熟练使用SQL语句进行项目开发:能够使用复杂的SQL语句进行多表关联查询:具备数据库数据的管理和维护能力 . 课程目录: day01_安装数据库软件day02_数据库的基本使用selecl语句的使用day03_限制数据返回day04_字符函数.数字函数.日期函数day05

Oracle数据库迁移的几种方式

面试: 一.exp/imp逻辑备份与恢复: 二.Storage存储迁移: 将数据文件.控制文件.日志文件.spfile挂到新机器上,然后在新机器上启动数据库. 三.利用data guard迁移: 四.用rman做迁移: 我们常常需要对数据进行迁移,迁移到更性能配置更高级的主机OS上.迁移到远程的机房.迁移到不同的平台下,以下介绍ORACLE的几种数据库迁移方案: 一.exp/imp逻辑备份与恢复:  它是最常用最简单的方法,一般是基于应用的owner级做导出导入.  操作方法为: 在新库建立好o

Oracle数据库迁移问题(备份、还原、数据导入导出、PLSQL)IMP - 0009 错误

最近在做Oracle数据迁移,从一个服务器迁移到另外一台服务器上去,遇到各种问题,比如 导入DMP文件的时候,遇到 IMP - 0009 错误,折腾了半天,发现原来是我 连接到服务器导出DMP文件时,用的Oracle客户端版本与服务器上Oracle版本不一致,导致导出来的DMP文件实际上有损坏,所以怎么都不能导入到新服务器的Oracle数据库中去. 总结:最好严格保证Oracle版本及环境一致性,免得遇到各种问题.

Linux平台下使用rman进行oracle数据库迁移

    实验目的:将oracle数据库从一台机器迁移到另外的一台机器(同为linux平台),设置为不同的路径,不同的实例名 源端: ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1 ORACLE_SID=test 数据文件位置:/oradata/test 目标端: ORACLE_BASE=/u02/app/oracle ORACLE_HOME=/u02/app/oracle/product/10

MySQL/Oracle数据库的基础(二)

MySQL/Oracle数据库 Oracle数据库管理系统是管理数据库访问的计算机软件,由Oracle数据库与Oracle实例构成 Oracle数据库:一个相关的操作系统文件集合,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库.Oracle数据库必须要与内存实例合作,才能对外提供数据管理服务. Oracle实例:位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被进程锁访问. Oracle用它们来管理数据库访问 Oracle实例就是平常所

使用Microsoft SQL Server Migration Assistant for Oracle将Oracle数据库迁移到SQL Server 2008 R2

必须要安装SSMAforOracleExtensionPack_7.10.0或者SSMA for Oracle.6.0.0.ExtPack! 必须要安装SSMAforOracleExtensionPack_7.10.0或者SSMA for Oracle.6.0.0.ExtPack! 必须要安装SSMAforOracleExtensionPack_7.10.0或者SSMA for Oracle.6.0.0.ExtPack! 这个Microsoft SQL Server Migration Assi

oracle数据库迁移的步骤

目的:将192.168.9.102上GGWSXT/[email protected]:1521/ORACLE部署到104上 1.查看原用户表空间 select tablespace_name,count(0) from dba_segments where owner=upper('GGWSXT') group by tablespace_name; 2.查看原用户创建表空间的目录 select * from dba_data_files: 3.为原用户创建表空间 create tablespa

Oracle数据库迁移方式一:impdp+dblink

实验环境: 源库:  192.168.2.200  SID=testdb 目标库:192.168.2.100  SID=testdb 实验目的: 使用impdp+dblink的方式 将192.168.2.200数据库上的jtrms用户的所有数据导入到目标数据库192.168.2.100 注意:使用impdp+dblink 的方式,这样就节省了数据导出(expdp),然后再导入的过程. 实施步骤: 一.源库操作: 1.首先检查源库要迁移的用户信息: SQL> select USERNAME,DEF