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

4 5 <code>SQL> select username,default_tablespace </code><code>from</code> <code>dba_users where username </code><code>=</code><code>'IRP'</code><code>; </code> <code> </code> <code>USERNAME DEFAULT_TABLESPACE </code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code> <code>IRP IRP</code>
3.查看用户使用的表空间
<code>SQL> select DISTINCT owner ,tablespace_name </code><code>from</code> <code>dba_extents where owner like </code><code>'IRP'</code><code>; </code> <code>OWNER TABLESPACE_NAME </code> <code>IRP IRP</code>
4.查看表空间对应的数据文件,以便在B上创建大小合适的数据文件。
6 7 <code>SQL> select file_name,tablespace_name </code><code>from</code> <code>dba_data_files where tablespace_name </code><code>in</code> <code>'IRP'</code><code>; </code> <code>FILE_NAME TABLESPACE_NAME </code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code> <code>D:\APP\ADMINISTRATOR\ORADATA\ORCL\IRP.DBF IRP</code> <code> </code> <code>如果用户使用多个表空间,查询语句如下</code> <code>select file_name,tablespace_name </code><code>from</code> <code>dba_data_files where tablespace_name </code><code>in</code> <code>(</code><code>'IRP1'</code><code>,</code><code>'IRP2'</code><code>);</code>
5.检查B机器的表空间,看是否存在IRP(如果是新的服务器,不需要这一步)
<code>select name </code><code>from</code> <code>v$tablespace where name </code><code>in</code> <code>'IRP'</code> <code>查找不到,说明没有这个两个表空间,需要创建。</code>
6.在B上创建表空间、用户并授权
8 9 10 11 12 13 <code>创建大文件表空间</code> <code>CREATE BIGFILE TABLESPACE </code><code>"IRP"</code> <code>DATAFILE </code><code>'D:\app\oracle\oradata\orcl\irp.dbf'</code> <code>SIZE </code><code>100M</code> <code>AUTOEXTEND ON </code><code>NEXT</code> <code>100M</code> <code>MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;</code> <code>创建默认表空间</code> <code>或者 CREATE TABLESPACE </code><code>"IRP"</code> <code>DATAFILE </code><code>'D:\app\oracle\oradata\orcl\irp.dbf'</code> <code>SIZE </code><code>100M</code> <code>AUTOEXTEND ON </code><code>NEXT</code> <code>100M</code> <code>MAXSIZE </code><code>10000M</code> <code>LOGGING EXTENT MANAGEMENT LOCAL;</code> <code>创建用户 </code> <code>CREATE USER </code><code>"IRP"</code> <code>PROFILE </code><code>"DEFAULT"</code> <code>IDENTIFIED BY </code><code>"IRP"</code> <code>DEFAULT TABLESPACE </code><code>"IRP"</code> <code>TEMPORARY TABLESPACE </code><code>"TEMP"</code> <code>ACCOUNT UNLOCK;</code> <code>授权 </code> <code>GRANT </code><code>"CONNECT"</code> <code>TO </code><code>"IRP"</code><code>; </code> <code>GRANT </code><code>"RESOURCE"</code> <code>TO </code><code>"IRP"</code><code>; </code> <code>GRANT unlimited tablespace TO </code><code>"IRP"</code><code>;</code> 注: BigFile表空间只能创建一个datafile数据文件,SmallFile表空间最多可以创建1024个数据文件
7.如果在服务器B上已经存在该用户,怎么样删除该用户.
14
15
16
17
18
<code>查看是否存在该用户SQL> select username </code><code>from</code> <code>dba_users where username</code><code>=</code><code>'IRP'</code><code>; </code>
<code>删除用户及其拥有的所有对象</code>
<code>drop user IRP cascade;</code>
<code>查看这个用户下面是否有对象;</code>
<code>select object_type,count(</code><code>*</code><code>) </code><code>from</code> <code>all_objects where owner</code><code>=</code><code>'IRP'</code> <code>group by object_type</code>
<code> </code><code>OBJECT_TYPE COUNT(</code><code>*</code><code>)</code>
<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>
<code>1</code> <code>SEQUENCE </code><code>3</code>
<code>2</code> <code>PROCEDURE </code><code>5</code>
<code>3</code> <code>LOB </code><code>139</code>
<code>4</code> <code>PACKAGE </code><code>3</code>
<code>5</code> <code>PACKAGE BODY </code><code>2</code>
<code>6</code> <code>TRIGGER </code><code>1</code>
<code>7</code> <code>TABLE </code><code>384</code>
<code>8</code> <code>INDEX </code><code>426</code>
<code>9</code> <code>FUNCTION </code><code>6</code>
此时如果这个用户在连接,drop会出错,必须先杀掉用户的session,然后再drop user <code>构建杀掉IRP用户session的语句并执行,</code> <code>SELECT </code><code>'alter system kill session '</code><code>'</code><code>'||SID||'</code><code>,</code><code>'||SERIAL#||'</code><code>'</code><code>' immediate;'</code> <code>FROM V$SESSION WHERE USERNAME</code><code>=</code><code>'IRP'</code><code>;</code> <code>上面的语句是构建出杀掉IRP用户session的语句,再复制这些语句,粘贴到sqlplus中执行,来杀掉IRP的session。</code> <code>'ALTERSYSTEMKILLSESSION'</code><code>'</code><code>'||SID||'</code><code>,</code><code>'||SERIAL#||'</code><code>'</code><code>'IMMEDIATE;'</code> <code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code> <code>alter system kill session </code><code>'9,42043'</code> <code>immediate; </code> <code>alter system kill session </code><code>'10,9137'</code> <code>immediate; </code> <code>alter system kill session </code><code>'72,17487'</code> <code>immediate; </code> <code>alter system kill session </code><code>'84,3280'</code> <code>immediate; </code> <code>alter system kill session </code><code>'91,976'</code> <code>immediate; </code> <code>alter system kill session </code><code>'100,13516'</code> <code>immediate; </code> <code>alter system kill session </code><code>'111,5973'</code> <code>immediate; </code> <code>alter system kill session </code><code>'115,4751'</code> <code>immediate; </code> <code>alter system kill session </code><code>'120,10356'</code> <code>immediate; </code> <code>alter system kill session </code><code>'211,4075'</code> <code>immediate; </code> <code>alter system kill session </code><code>'216,48068'</code> <code>immediate;</code>
8.最后在B上导入数据
一定注意执行imp时要退出sqlplus,直接在命令行执行。
<code>IMP test</code><code>/</code><code>test </code><code>BUFFER</code><code>=</code><code>64000</code> <code>FILE</code><code>=</code><code>D:\test.DMP log</code><code>=</code><code>D:\imptest.log FROMUSER</code><code>=</code><code>IRP TOUSER</code><code>=</code><code>IRP</code>
<code></code>
本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1854468,如需转载请自行联系原作者