您好,登錄后才能下訂單哦!
背景:做為一名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機器上查看用戶默認表空間,以便導入時創建一樣的表空間
SQL> select username,default_tablespace from dba_users where username ='IRP'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ IRP IRP
3.查看用戶使用的表空間
SQL> select DISTINCT owner ,tablespace_name from dba_extents where owner like 'IRP'; OWNER TABLESPACE_NAME ------------------------------ ------------------------------ IRP IRP
4.查看表空間對應的數據文件,以便在B上創建大小合適的數據文件。
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name in 'IRP'; FILE_NAME TABLESPACE_NAME ------------------------------------------------------------ ---------- D:\APP\ADMINISTRATOR\ORADATA\ORCL\IRP.DBF IRP 如果用戶使用多個表空間,查詢語句如下 select file_name,tablespace_name from dba_data_files where tablespace_name in ('IRP1','IRP2');
5.檢查B機器的表空間,看是否存在IRP(如果是新的服務器,不需要這一步)
select name from v$tablespace where name in 'IRP' 查找不到,說明沒有這個兩個表空間,需要創建。
6.在B上創建表空間、用戶并授權
創建大文件表空間 CREATE BIGFILE TABLESPACE "IRP" DATAFILE 'D:\app\oracle\oradata\orcl\irp.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; 創建默認表空間 或者 CREATE TABLESPACE "IRP" DATAFILE 'D:\app\oracle\oradata\orcl\irp.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 10000M LOGGING EXTENT MANAGEMENT LOCAL; 創建用戶 CREATE USER "IRP" PROFILE "DEFAULT" IDENTIFIED BY "IRP" DEFAULT TABLESPACE "IRP" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; 授權 GRANT "CONNECT" TO "IRP"; GRANT "RESOURCE" TO "IRP"; GRANT unlimited tablespace TO "IRP";
注: BigFile表空間只能創建一個datafile數據文件,SmallFile表空間最多可以創建1024個數據文件
7.如果在服務器B上已經存在該用戶,怎么樣刪除該用戶.
查看是否存在該用戶SQL> select username from dba_users where username='IRP'; 刪除用戶及其擁有的所有對象 drop user IRP cascade; 查看這個用戶下面是否有對象; select object_type,count(*) from all_objects where owner='IRP' group by object_type OBJECT_TYPE COUNT(*) ------------------------------------------------------------ ---------- 1 SEQUENCE 3 2 PROCEDURE 5 3 LOB 139 4 PACKAGE 3 5 PACKAGE BODY 2 6 TRIGGER 1 7 TABLE 384 8 INDEX 426 9 FUNCTION 6
此時如果這個用戶在連接,drop會出錯,必須先殺掉用戶的session,然后再drop user
構建殺掉IRP用戶session的語句并執行, SELECT 'alter system kill session '''||SID||','||SERIAL#||''' immediate;' FROM V$SESSION WHERE USERNAME='IRP'; 上面的語句是構建出殺掉IRP用戶session的語句,再復制這些語句,粘貼到sqlplus中執行,來殺掉IRP的session。 'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||'''IMMEDIATE;' -------------------------------------------------------------- alter system kill session '9,42043' immediate; alter system kill session '10,9137' immediate; alter system kill session '72,17487' immediate; alter system kill session '84,3280' immediate; alter system kill session '91,976' immediate; alter system kill session '100,13516' immediate; alter system kill session '111,5973' immediate; alter system kill session '115,4751' immediate; alter system kill session '120,10356' immediate; alter system kill session '211,4075' immediate; alter system kill session '216,48068' immediate;
8.最后在B上導入數據
一定注意執行imp時要退出sqlplus,直接在命令行執行。
IMP test/test BUFFER=64000 FILE=D:\test.DMP log=D:\imptest.log FROMUSER=IRP TOUSER=IRP
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。