背景:做为一名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机器上查看用户默认表空间,以便导入时创建一样的表空间
Syntaxhighlighting/OutliningIndicators/None.gif">
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:\APP\ADMINISTRATOR\ORADATA\ORCL\IRP.DBFIRP 如果用户使用多个表空间,查询语句如下 selectfile_name,tablespace_namefromdba_data_fileswheretablespace_namein('IRP1','IRP2');
5.检查B机器的表空间,看是否存在IRP(如果是新的服务器,不需要这一步)
selectnamefromv$tablespacewherenamein'IRP' 查找不到,说明没有这个两个表空间,需要创建。
6.在B上创建表空间、用户并授权
创建大文件表空间 CREATEBIGFILETABLESPACE"IRP"DATAFILE'D:\app\oracle\oradata\orcl\irp.dbf'SIZE100MAUTOEXTENDONNEXT100MMAXSIZEUNLIMITEDLOGGINGEXTENTMANAGEMENTLOCALSEGMENTSPACEMANAGEMENTAUTO; 创建默认表空间 或者CREATETABLESPACE"IRP"DATAFILE'D:\app\oracle\oradata\orcl\irp.dbf'SIZE100MAUTOEXTENDONNEXT100MMAXSIZE10000MLOGGINGEXTENTMANAGEMENTLOCAL; 创建用户 CREATEUSER"IRP"PROFILE"DEFAULT"IDENTIFIEDBY"IRP"DEFAULTTABLESPACE"IRP"TEMPORARYTABLESPACE"TEMP"ACCOUNTUNLOCK; 授权 GRANT"CONNECT"TO"IRP"; GRANT"RESOURCE"TO"IRP"; GRANTunlimitedtablespaceTO"IRP";
查看是否存在该用户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原文链接:https://www.f2er.com/oracle/212543.html