程序员人生 网站导航

Oracle数据库迁移-基础

栏目:数据库应用时间:2015-07-31 08:14:32

Oracle数据库迁移-基础

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

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

    解决方案:

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

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

    分析:

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

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

Oracle数据库导出:

 

-⑴:进sqlplus创建database directory SQL> create directory j(随便取,建1次便可) as 'E: eportback20150429'; 
-⑵:给相干用户授权 SQL> grant read,write on directory j to nc60_fbs1(需要导出的数据库用户);
-⑶:退出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⑺4941-id⑻5228.html

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

 

整理:

1.Directory命令

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

--创建目录 Create directory 目录名称 as 目录(注意windows和linux系统是不1样的写法); --查看已创建的目录 Select * from dba_directories; --删除建立的目录,用drop不是delete Drop directory 目录名称


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

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

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

    援用1个形象的比喻:

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

--创建用户,并指定表空间,1般都需要指定,放到默许表空间的很少 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要了1个之前备份过的库。

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

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

 

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐