接上篇:Linux服務器使用Docker安裝Oracle12c
環境:
Centos7.5
使用Docker安裝的Oracle
要對同一內網下裝有Oracle的兩臺服務器數據遷移(導出與導入),使用exp和imp命令
1、將服務器A內數據庫中的數據使用exp導出到服務器B數據庫目錄下
2、將導入到服務器B目錄下的dmp文件使用imp導入服務器B上的數據庫內
首先在服務器B上需要配置一個tnsname,然後使用tnsping測試B是否能夠連接到服務器A上的數據庫,這是所有操作的起點與基礎
操作如下:
1.1、導出數據庫文件
全局搜索tnsnames.ora文件,Linux命令:
find / -name tnsnames.ora
然後在Docker容器下可以找到,此處沒有進入docker而是在linux搜索是想將路徑直接複製到xftp,然後修改
劉大佬指導,同樣可以通過進入Oracle容器內進行搜索(在已知正在運行容器ID的情況下)
docker ps
docker exec -it 7485d22f2fd5 /bin/bash
find / -name tnsnames.ora
目測diff文件是差異文件夾,暫時直接使用的
/var/lib/docker/overlay2/ce41d80b81d5160e26c3e5017c4cf95ad429603e9023d27fc593b497de9134d5/merged/u01/app/oracle-product/12.1.0/xe/network/admin/samples/tnsnames.ora
大佬指點,sample文件是示例目錄,故新建一個tnsnames.ora在admin文件夾下,如下
添加內容如下
T =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.xx.xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xxx)
)
)
後面命令行進入Oracle容器進行測試
# 查看所有在運行的容器
docker ps
# 使用返回的容器ID進入容器命令行
docker exec -it 7485d22f2fd5 /bin/bash 運行容器
# 如果進入root@62a5a35737c1:/#類似這種容器內命令行則表示成功,此時進入Oracle容器,可使用Oracle自
# 帶SQLPlus等,tnsping也是Oracle自帶的Oracle Net 工具,可以
# 1)驗證名字解析(tnsnames.ora內配置的Service)
# 2)遠程的listener是否啓動
# 驗證是否連接到服務器A的Oracle
tnsping X
此時一路暢通,沒踩到坑。。此時同樣在Oracle容器內,執行exp
exp account/password@tnsName file=/u01/app/oracle/file.dmp log=/u01/app/oracle/file.log full=y
# exp 服務器A上數據庫賬號/密碼@本地服務器B配置的tnsnames.ora內的name file=導出路徑(此處爲Oracle容器內相對路徑) log=日誌路徑(相對路徑+1) full=數據庫完全導出
同時因爲在Oracle安裝時就掛載文件到其他目錄,所以此時在備份目錄也可以同步看到
尚未停止。。。
2.1、導入數據庫文件
在導入數據庫dmp前,需創建表空間、用戶、修改Oracle編碼
之前測試掛載是否成功時創建了一個tablespace,命令爲
create tablespace test
logging
datafile '/u01/app/oracle/xxx.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
後來shoucan,直接刪除了xxx.dbf文件,但是根據
select * from dba_tablespaces;
select file_name,online_status from dba_data_files ;
查詢出路徑還在,且想要drop tablespace時,一直提示無法找到文件,使用重啓大法:後果如下
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress
Process ID: 0
Session ID: 0 Serial number: 0
Oracle無法正常啓動,百度中求生:oracle initialization or shutdown in progress解決方法
# ERROR:
# ORA-01033: ORACLE initialization or shutdown in progress
# Process ID: 0
# Session ID: 0 Serial number: 0
# 解決方法:使用sqlplus登錄
root@6d9e4ca51d51:/# sqlplus /nolog
# 使用sys登錄(system無法登陸)
SQL>connect sys/password as sysdba
SQL> shutdown normal
ORA-01109: 數據庫未打開
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> start mount
SP2-0310: 無法打開文件 "mount.sql"
SQL> startup mount
ORACLE 例程已經啓動。
Total System Global Area 612368384 bytes
Fixed Size 1332348 bytes
Variable Size 183151492 bytes
Database Buffers 423624704 bytes
Redo Buffers 4259840 bytes
數據庫裝載完畢。
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01157: 無法標識/鎖定數據文件 5 - 請參閱 DBWR 跟蹤文件
ORA-01110: 數據文件 5: 'C:\TYKM.DBF'
# 就在此處將不小心刪除的文件狀態設爲offline
SQL> alter database datafile 5 offline drop;【5是數據文件中的5】
數據庫已更改。
SQL> alter database open;【我們一直循環這個語句,直至不再提示錯誤】
數據庫已更改。
SQL> shutdown normal
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。
Total System Global Area 612368384 bytes
Fixed Size 1332348 bytes
Variable Size 187345796 bytes
Database Buffers 419430400 bytes
Redo Buffers 4259840 bytes
啓動完成後執行上方的tablespace查詢結果
這時候狀態不再是ONLINE,再次drop tablespace即可成功
# 刪除名爲tpms的文件及關聯的datafiles
drop tablespace tpms including contents and datafiles;
另外在創建表空間的時候,單個表空間不能大於32G
imp導入命令
imp tpms/Tpms2015 fromuser=tpms touser=tpms file=/u01/app/oracle/tpms20181127.dmp log=/u01/app/oracle/tpms20181127.log ignore=y;
# imp 要導入數據庫的用戶名/密碼 fromuser=從用戶 touser=到用戶 file=原導出的dmp數據文件 log=日誌文件 ignore=忽略錯誤
另外在dmp導入報錯value too large for column (actual: 27, maximum: 20)
猜測是因爲新裝數據庫與原數據庫編碼不同,因爲所有表都來自原封不動導出的文件
1、管理員用戶連接
SQL>conn sys/密碼 as sysdba;
2、關閉數據庫。
SQL>shutdown immediate;
3、啓動數據庫到Mount狀態下。
SQL> STARTUP MOUNT;
# 這些都要執行,以修改狀態
SQL> ALTER SESSION SET SQL_TRACE=TRUE;
Session altered.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
4、啓動數據庫
SQL> Alter database open;
5、修改字符集
# 需要使用INTERNAL_USE來使跳過 新字符集必須爲舊字符集的超集 的檢查
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
或 ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
6、關閉數據庫
SQL> Shutdown immediate;
7、重新啓動數據庫
SQL> startup;
成功!