加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle数据库迁移步骤思路

发布时间:2020-12-12 15:57:36 所属栏目:百科 来源:网络整理
导读:背景 : 做为一名DBA,oracle数据库迁移是经常要遇到的事情,正好最近我也在迁移一个业务系统,数据库就是oracle,顺便记录一下。 说明 : 为了方便说明,旧的数据库称为A,新的为B。用户和密码是IRP/IRP,B是全新的环境。 步骤思路 : 1.从 A 上导出数据文件

背景做为一名DBA,oracle数据库迁移是经常要遇到的事情,正好最近我也在迁移一个业务系统,数据库就是oracle,顺便记录一下。

说明为了方便说明,旧的数据库称为A,新的为B。用户和密码是IRP/IRP,B是全新的环境。

步骤思路

1.从 A 上导出数据文件。

sqlplus/nolog
conn/assysdba
EXPIRP/IRPBUFFER=64000FILE=D:test.DMPlog=D:test.logOWNER=IRP

2.在A机器上查看用户默认表空间,以便导入时创建一样的表空间

SQL>selectusername,default_tablespacefromdba_userswhereusername='IRP';

USERNAMEDEFAULT_TABLESPACE
------------------------------------------------------------
IRPIRP


3.查看用户使用的表空间

SQL>selectDISTINCTowner,tablespace_namefromdba_extentswhereownerlike'IRP';

OWNERTABLESPACE_NAME
------------------------------------------------------------
IRPIRP


4.查看表空间对应的数据文件,以便在B上创建大小合适的数据文件。

SQL>selectfile_name,tablespace_namefromdba_data_fileswheretablespace_namein'IRP';
FILE_NAMETABLESPACE_NAME
----------------------------------------------------------------------
D:APPADMINISTRATORORADATAORCLIRP.DBFIRP

如果用户使用多个表空间,查询语句如下
selectfile_name,tablespace_namefromdba_data_fileswheretablespace_namein('IRP1','IRP2');


5.检查B机器的表空间,看是否存在IRP(如果是新的服务器,不需要这一步)

selectnamefromv$tablespacewherenamein'IRP'
查找不到,说明没有这个两个表空间,需要创建。

6.在B上创建表空间、用户并授权

创建大文件表空间
CREATEBIGFILETABLESPACE"IRP"DATAFILE'D:apporacleoradataorclirp.dbf'SIZE100MAUTOEXTENDONNEXT100MMAXSIZEUNLIMITEDLOGGINGEXTENTMANAGEMENTLOCALSEGMENTSPACEMANAGEMENTAUTO;

创建默认表空间
或者CREATETABLESPACE"IRP"DATAFILE'D:apporacleoradataorclirp.dbf'SIZE100MAUTOEXTENDONNEXT100MMAXSIZE10000MLOGGINGEXTENTMANAGEMENTLOCAL;

创建用户
CREATEUSER"IRP"PROFILE"DEFAULT"IDENTIFIEDBY"IRP"DEFAULTTABLESPACE"IRP"TEMPORARYTABLESPACE"TEMP"ACCOUNTUNLOCK;

授权
GRANT"CONNECT"TO"IRP";
GRANT"RESOURCE"TO"IRP";
GRANTunlimitedtablespaceTO"IRP";

注: BigFile表空间只能创建一个datafile数据文件,SmallFile表空间最多可以创建1024个数据文件

7.如果在服务器B上已经存在该用户,怎么样删除该用户.

查看是否存在该用户SQL>selectusernamefromdba_userswhereusername='IRP';
删除用户及其拥有的所有对象
dropuserIRPcascade;

查看这个用户下面是否有对象;
selectobject_type,count(*)fromall_objectswhereowner='IRP'groupbyobject_type

OBJECT_TYPECOUNT(*)
----------------------------------------------------------------------
1SEQUENCE3
2PROCEDURE5
3LOB139
4PACKAGE3
5PACKAGEBODY2
6TRIGGER1
7TABLE384
8INDEX426
9FUNCTION6

此时如果这个用户在连接,drop会出错,必须先杀掉用户的session,然后再drop user

构建杀掉IRP用户session的语句并执行,SELECT'altersystemkillsession'''||SID||','||SERIAL#||'''immediate;'FROMV$SESSIONWHEREUSERNAME='IRP';

上面的语句是构建出杀掉IRP用户session的语句,再复制这些语句,粘贴到sqlplus中执行,来杀掉IRP的session。
'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||'''IMMEDIATE;'
--------------------------------------------------------------
altersystemkillsession'9,42043'immediate;
altersystemkillsession'10,9137'immediate;
altersystemkillsession'72,17487'immediate;
altersystemkillsession'84,3280'immediate;
altersystemkillsession'91,976'immediate;
altersystemkillsession'100,13516'immediate;
altersystemkillsession'111,5973'immediate;
altersystemkillsession'115,4751'immediate;
altersystemkillsession'120,10356'immediate;
altersystemkillsession'211,4075'immediate;
altersystemkillsession'216,48068'immediate;


8.最后在B上导入数据

一定注意执行imp时要退出sqlplus,直接在命令行执行。

IMPtest/testBUFFER=64000FILE=D:test.DMPlog=D:imptest.logFROMUSER=IRPTOUSER=IRP

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读