天天看點

Oracle 整庫備份還原

http://www.mamicode.com/info-detail-2481866.html

sql語句

system使用者登陸

檢視表空間和存放位置

select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;

檢視所有表空間的大小

select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;

檢視未使用的表空間大小

select tablespace_name,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;

清理螢幕

clear screen

檢視服務端編碼

select userenv(\'language\') from dual;

本地機器添加系統變量NLS_LANG,變量值為:服務端完整的編碼類型即可解決顯示不出中文的問題

檢視所有表空間大小,使用情況,使用率的sql語句

SELECT a.tablespace_name "表空間名",

       total "表空間大小",

       free "表空間剩餘大小",

       (total - free) "表空間使用大小",

       total / (1024 * 1024 * 1024) "表空間大小(G)",

       free / (1024 * 1024 * 1024) "表空間剩餘大小(G)",

       (total - free) / (1024 * 1024 * 1024) "表空間使用大小(G)",

       round((total - free) / total, 4) * 100 "使用率 %"

  FROM (SELECT tablespace_name, SUM(bytes) free

          FROM dba_free_space

         GROUP BY tablespace_name) a,

       (SELECT tablespace_name, SUM(bytes) total

          FROM dba_data_files

         GROUP BY tablespace_name) b

 WHERE a.tablespace_name = b.tablespace_name

執行上述sql語句即可檢視所有的表空間名稱,大小,使用情況。前提是執行者需要有dba權限。

Oracle 整庫備份還原

整庫備份還原首先需要system使用者登陸,查詢字元集,注意保持字元集的一緻,然後然後建立備份目錄,備份目錄要對oracle使用者開放讀寫權限。

1,備份

在系統上建立備份檔案的存儲目錄,并且賦權給你oracle讀寫

mkdir /oraclebak

chown -R oracle:oinstall /oraclebak

以oracle使用者登陸作業系統,以system使用者的登陸sqlplus,建立備份的映射目錄。

SQL> create directory data_dir as \'/oraclebak\';

以oracle使用者登陸作業系統使用expdp執行備份工作。

expdp system/oracle directory=data_dir dumpfile=full.dmp full=y compression=all

2,還原,因為是全庫備份,所有不需要考慮使用者以及使用者權限的問題,必須要考慮的問題是還原的時候,目的資料庫一定要建立原資料庫的名稱一緻的表空間,且目的資料庫表空間容量大于原資料庫。

以下為原資料庫表空間資訊

Oracle 整庫備份還原

因為原資料庫有ZWFW_MIG表空間,且大小為1G,是以在目的資料庫上也建立大小大于1G,名稱為ZWFW_MIG的表空間,以下為具體指令

CREATE TABLESPACE ZWFW_MIG

DATAFILE \'/oracledata/ZWFW_MIG.dat\'

SIZE 1024M

REUSE

AUTOEXTEND ON NEXT 100M MAXSIZE 2048M;

關鍵詞解釋:

CREATE TABLESPACE:建立表空間的關鍵字

ZWFW_MIG:新建立的表空間的名字

DATAFILE \'/oracledata/ZWFW_MIG.dat\' :定義表空間對應的資料檔案位置,注意oracle使用者要有權限

SIZE 1024M:表空間大小為1024MB

REUSE:允許oracle重新使用資料檔案

AUTOEXTEND ON NEXT 100M MAXSIZE 2048M;:允許表空間自動增長,每次增長100M,最大為2048M

以上為建立新的表空間,如果目的資料庫已有對應的表空間,則不需要另外建立,隻需要擴充目的資料庫的表空間即可,有兩種方式擴充,

第一,當對應的表空間資料檔案所在目錄有足夠的存儲空間時,直接使用以下指令重新定義資料檔案的大小,資料檔案大小重新定義之後,表空間大小就被改變了。

alter database datafile \'/u01/app/oracle/12/oradata/orcl/sysaux01.dbf\' resize 3096m; (重新定義/u01/app/oracle/12/oradata/orcl/sysaux01.dbf資料檔案的大小為3GB)

第二,當表空間對應的資料檔案所在目錄沒有足夠的存儲空間時,需要另外增加資料檔案,對應的指令如下

alter tablespace UNDOTBS1 add datafile \'/oracledata/UNDOTBS1.dbf\' size 5120m; (為UNDOTBS1表空間添加資料檔案,添加的資料檔案為5120M,位置為/oracledata/UNDOTBS1.dbf)

關于臨時表空間:

查詢原資料庫的臨時表空間,

select c.tablespace_name,

to_char(c.bytes/1024/1024/1024,\'99,999.999\') total_gb,

to_char( (c.bytes-d.bytes_used)/1024/1024/1024,\'99,999.999\') free_gb,

to_char(d.bytes_used/1024/1024/1024,\'99,999.999\') use_gb,

to_char(d.bytes_used*100/c.bytes,\'99.99\') || \'%\'use

from (select tablespace_name,sum(bytes) bytes

from dba_temp_files GROUP by tablespace_name) c,

(select tablespace_name,sum(bytes_cached) bytes_used

from v$temp_extent_pool GROUP by tablespace_name) d

where c.tablespace_name = d.tablespace_name;

擴充臨時表空間

擴充臨時表空間和擴充永久表空間的指令基本相似,僅僅是添加了temp關鍵字

alter tablespace TEMP add tempfile \'/oracledata/TEMP1.dbf\' size 15360m;

以上指令為為TEMP臨時表空間添加資料檔案,資料檔案為15G

建立臨時表空間

create temporary tablespace ZWFW_TEMP tempfile \'/oracledata/ZWFW_TEMP1.dbf\' size 1024m reuse autoextend on next 100m maxsize 2048m;

查詢所有表空間的所有資訊

select * from dba_tablespaces

建立還原的操作目錄對象

create directory data_dir as \'/oracledata\';

關于歸檔模式,關閉歸檔模式可以快速的執行還原操作,且生成的日志較小。關于歸檔模式的指令如下

1.改變非歸檔模式到歸檔模式:

1)SQL> conn / as sysdba (以DBA身份連接配接資料庫)

2)SQL> shutdown immediate;(立即關閉資料庫)

3)SQL> startup mount (啟動執行個體并加載資料庫,但不打開)

4)SQL> alter database archivelog; (更改資料庫為歸檔模式)

5)SQL> alter database open; (打開資料庫)

6)SQL> alter system archive log start; (啟用自動歸檔)

7)SQL> exit (退出)

做一次完全備份,因為非歸檔日志模式下産生的備份日志對于歸檔模式已經不可用了.這一步非非常重要!

2.改變歸檔模式到非歸檔模式:

1)SQL>SHUTDOWN NORMAL/IMMEDIATE;

2)SQL>STARTUP MOUNT;

3)SQL>ALTER DATABASE NOARCHIVELOG;

4)SQL>ALTER DATABASE OPEN;

執行還原指令

impdp system/system directory=data_dir dumpfile=full.dmp full=y

1,建立表空間

2,

3,建立表

4,插入資料

5,定義導出目錄

6,導出全庫

7,建立表空間

8,導入全庫