oracle11g-R2数据库的逻辑备份(数据泵的导入导出)
一、環境:
server1遷移到server2
server1:
服務器號:201
系統:Windows server 2008 R2 x64
IP地址:192.168.2.201
oracle數據庫版本:oracle 11g R2
端口號:1521
用戶名:brdb_1031
密碼:nc2015
遷移到
server2:
服務器號:207
系統:centos7-x64
IP地址:192.168.2.207
oracle數據庫版本:oracle 11g R2
oracle安裝平臺:阿里云docker鏡像
端口號:1521
二、準備:
1、在備份前,先檢查兩個數據庫的字符集是否相等
SQL語句:
select userenv('language') from dual;
server1字符集
server2字符集
2、修改server2字符集
AL32UTF8字符集修改為ZHS16GBK
執行如下SQL語句就可修改:
select userenv('language') from dual; shutdown immediate; startup mount; alter system enable restricted session; alter system set job_queue_processes=0; alter system set aq_tm_processes=0; alter database flashback off; alter database open; show parameter recovery; alter system reset db_recovery_file_dest scope=spfile sid='*'; alter system reset db_recovery_file_dest_size scope=spfile sid='*'; alter database character set internal_use ZHS16GBK; shutdown immediate startup exit演示方法二:
連接數據庫
$ sqlplus / as sysdba
[oracle@dev /]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Fri May 31 09:34:26 2019Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>查看字符集
SQL> select userenv('language') from dual;
SQL> select userenv('language') from dual;USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.AL32UTF8SQL>關閉數據庫
SQL> shutdown immediate;
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.裝載啟動數據庫到mount狀態
SQL> startup mount
SQL> startup mount ORACLE instance started.Total System Global Area 1603411968 bytes Fixed Size 2213776 bytes Variable Size 402655344 bytes Database Buffers 1191182336 bytes Redo Buffers 7360512 bytes Database mounted.執行如下命令
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.SQL> alter database open;Database altered.SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set # 提示我們的字符集:新字符集必須為舊字符集的超集,這時我們可以跳過超集的檢查做更改:SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;Database altered.SQL>我們看到這個過程和之前ALTER DATABASE CHARACTER SET操作的內部過程是完全相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle數據庫繞過了子集與超集的校驗
關閉數據庫
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL>啟動數據庫
SQL> startup ORACLE instance started.Total System Global Area 1603411968 bytes Fixed Size 2213776 bytes Variable Size 402655344 bytes Database Buffers 1191182336 bytes Redo Buffers 7360512 bytes Database mounted. Database opened.查看字符集
報錯:
SQL> select userenv(‘language’) from dual; select userenv(‘language’) from dual* ERROR at line 1: ORA-00911: invalid characterSQL> SQL> SQL> SQL> select userenv(‘language’) from dual; select userenv(‘language’) from dual* ERROR at line 1: ORA-00911: invalid characterSQL>稍等幾分鐘自動恢復
SQL> select userenv('language') from dual;USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.ZHS16GBKSQL> SQL>數據庫字符集修改完畢
三、數據庫的導出(expdp)
server1:
注意:數據庫的導出和導入都在Windows命令模式下執行
1、數據庫的導出(expdp)
導出某個用戶的表空間
語法如下:
expdp 導出用戶名/密碼@數據庫的SID
expdp 登陸用戶名/密碼@數據庫的IP/orcl
schemas=指定導出用戶名
dumpfile=文件名.dmp
logfile=日志名.log
directory=備份儲存路徑名
tables=表名(只導出指定的某張表)
實例:
expdp brdb_1031/nc2015@orcl dumpfile=brdb_1031_%date:~0,4%-%date:~5,2%-%date:~8,2%.dmp logfile=brdb_1031_%date:~0,4%-%date:~5,2%-%date:~8,2%.log directory=backfile
說明:備份存儲路徑名可以自己創建也可以查看已有的路徑
查看系統中所有的路徑
SQL語句:
select * from dba_directories
導出結果如下:
2、只導出指定的某張表
tables=表名
實例:
expdp brdb_0530/nc2015@orcl tables=SYS_USER dumpfile=SYS_USER_%date:~0,4%-%date:~5,2%-%date:~8,2%.dmp directory=BACKFILE
導出結果如下:
3、只導入某張表
?實例:
impdp brdb_0530_ys/123456@orcl dumpfile=SYS_USER_2019-07-17.dmp directory=BACKFILE table_exists_action=replace remap_tablespace=BRDB1031TABLESPACE:brdb_0530_ys remap_schema=brdb_0530:brdb_0530_ys
四、數據庫的導入(impdp)
server2
數據庫的導入:
SQL語句:
1、創建物理路徑
自行創建一個完整的目錄文件夾,用于存放dmp文件
例如:
/oracle-backup-import
創建一個完整的目錄文件夾,用于存放表空間
例如:
/oracle-tablespace
2、創建邏輯目錄
注意:路徑一定要和物理路徑是對應關系
語法:
create directory 路徑名 as '路徑'
實例:
import導入備份文件路徑名
create directory import__dir as '/oracle-backup-import'
表空間存放文件路徑名
create directory oracle_data as '/oracle-tablespace'
3、創建表空間
語法:
create tablespace 表空間名
datafile ‘物理地址(相當于文件路徑)’
size 初始大小(單位M)
autoextend on next 每次自增的大小(單位M)
maxsize unlimited (此關鍵字用于不限制表空間大小)
實例:
create tablespace brdb_1031
datafile '/oracle-tablespace/brdb_1031_tablespace.dbf'
size 200M
autoextend on next 100M
maxsize UNLIMITED;
注意:
在Linux系統中需要給目錄授權,否則報錯:permission denied
# chown oracle:oinstall oracle-backup-import
# chown oracle:oinstall oracle-tablespace/
[root@dev /]# chown oracle:oinstall oracle-backup-import [root@dev /]# chown oracle:oinstall oracle-tablespace/ [root@dev /]# [root@dev /]# ll total 24 dr-xr-xr-x. 2 root root 4096 Dec 3 2013 bin dr-xr-xr-x. 4 root root 29 Dec 3 2013 boot drwxr-xr-x. 5 root root 340 May 31 09:14 dev drwxr-xr-x. 1 root root 21 May 31 09:18 etc drwxr-xr-x. 1 root root 20 Aug 29 2014 home dr-xr-xr-x. 8 root root 168 Aug 23 2014 lib dr-xr-xr-x. 7 root root 8192 Aug 23 2014 lib64 drwxr-xr-x. 2 root root 6 Sep 23 2011 media drwxr-xr-x. 2 root root 6 Sep 23 2011 mnt drwxr-xr-x. 2 root root 6 Sep 23 2011 opt drwxr-xr-x. 2 oracle oinstall 6 May 31 09:02 oracle-backup-import drwxr-xr-x. 2 oracle oinstall 6 May 31 09:08 oracle-tablespace dr-xr-xr-x. 249 root root 0 May 31 09:14 proc dr-xr-x---. 3 root root 124 Aug 26 2014 root dr-xr-xr-x. 2 root root 4096 Aug 23 2014 sbin drwxr-xr-x. 2 root root 6 Sep 23 2011 selinux drwxr-xr-x. 2 root root 6 Sep 23 2011 srv dr-xr-xr-x. 13 root root 0 May 26 09:46 sys drwxrwxrwt. 1 root root 6 May 31 09:14 tmp drwxr-xr-x. 1 root root 17 Aug 23 2014 usr drwxr-xr-x. 1 root root 17 Aug 23 2014 var [root@dev /]#?查看已經創建的表空間文件
[root@dev /]# cd oracle-tablespace/ [root@dev oracle-tablespace]# [root@dev oracle-tablespace]# ll total 204808 -rw-r-----. 1 oracle oinstall 209723392 May 31 11:32 brdb_1031_tablespace.dbf4、創建用戶并指定表空間
語法:
create user 用戶名 identified by 口令[即密碼] default tablespace 表空間名;
實例:
create user brdb_1031 identified by 123456 default tablespace brdb_1031
5、目錄授權
語法:
grant read,write on directory 路徑名 to 用戶;
實例:
grant read,write on directory oracle_data to brdb_1031
6、用戶授權
一般情況下,我們可以直接賦予角色三種權限connect、resource、dba
語法:
grant 權限1, 權限2, 權限3…… to 用戶名
實例:
grant connect, resource, dba to brdb_1031
7、查詢數據庫用戶信息
select * from dba_users
在導出服務器上查詢,主要看表空間名(server1)
8、導入dmp文件
server2:
語法:
impdp 用戶名/密碼@數據庫的SID
directory=備份文件存放位置
dumpfile=導出的文件名
logfile=導出的日志名
schemas=指定導入用戶名
remap_tablespace=轉換表空間(原表空間:新表空間,多個轉換用逗號隔開)
remap_schema=轉換用戶名(原用戶名:新用戶名)
Oracle11g使用數據泵方式導入出現ORA-39151錯誤時
導入的數據庫中已經有相同的用戶名和老舊的表
可以在后邊加上參數
table_exists_action=replace(若表存在則替換)
table_exists_action=append/truncate/replace????
--append為追加數據
truncate為先刪除原表數據再插入數據
replace先drop表,然后創建表,最后插入數據(建議使用replace)
nologfile=y (不寫入日志文件)
exclude=user(忽略用戶對象已經存在的錯誤)
tables=表名(只導入指定的某張表)
實例:
$ impdp brdb_1031/123456@helowin directory=IMPORT_DIR dumpfile=BRDB_1031_2019-05-31.DMP logfile=brdb_1031_2019-05-31.log remap_tablespace=BRDB1031TABLESPACE:brdb_1031
?導入完成,時間較慢,耐心等待
9、相同數據庫的備份還原
注意:導入數據前需要先刪除序列
實例:
impdp ys_nk/nc2015@orcl directory=BACKUP dumpfile=YS_NK_2019-06-14.DMP table_exists_action=replace
table_exists_action=replace(先刪除原來的表,然后創建表,最后插入數據)
10、tables=表名(只導入指定的某張表)
實例:
impdp brdb_bjsc_0718/cnbi2018@orcl directory=dmpdir2 dumpfile=BRDB_BJSC_0718-2019-07-02.DUMP tables=(brdb_bjsc_0718.sys_user,brdb_bjsc_0718.SYS_USERCOMPANY) table_exists_action=replace
說明:全庫備份文件只恢復某張表的情況
end
轉載于:https://www.cnblogs.com/djlsunshine/p/10948021.html
總結
以上是生活随笔為你收集整理的oracle11g-R2数据库的逻辑备份(数据泵的导入导出)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟桌面分屏_无需分屏软件!让一台主机为
- 下一篇: linux cmake编译源码,linu