Linux系統Oracle常見操作

来源:https://www.cnblogs.com/simendavid/archive/2022/09/21/16715743.html
-Advertisement-
Play Games

一、 登錄 1.1 登錄預設資料庫 首先切換到oracle用戶,用資料庫預設管理員登錄。 [root@tsm-zh01 ~]# su – oracle [oracle@redhat ~]$ lsnrctl start #開啟監聽 [oracle@tsm-zh01 ~]$ sqlplus / as s ...


一、 登錄

1.1    登錄預設資料庫

 

首先切換到oracle用戶,用資料庫預設管理員登錄。

[root@tsm-zh01 ~]# su – oracle

[oracle@redhat ~]$ lsnrctl start              #開啟監聽

[oracle@tsm-zh01 ~]$ sqlplus / as sysdba    #sqlplus  用戶名/密碼

SQL> startup;                                     #打開資料庫

1.2資料庫切換

1.2.1 Oracle實例進程顯示

[oracle@tsm-zh01 ~]$   ps -ef  | grep ora_dbw0_$ORACLE_SID

oracle    5956     1  0 Sep21 ?        00:16:18 ora_dbw0_tsmdb1

oracle    5958     1  0 Sep21 ?        00:18:05 ora_dbw0_tsmcnnt1

oracle    5972     1  0 Sep21 ?        00:22:59 ora_dbw0_tsmcity1

 

1.2.2進行資料庫實例切換

在oracle用戶下輸入

export ORACLE_SID=實例名

1.2.3查看當前資料庫實例

SQL> select instance_name from v$instance;

 

INSTANCE_NAME

--------------------------------

tsmcity1

 

1.2.4查看所有啟動實例

 [oracle@tsm-zh01 ~]$ ps -ef|grep smon    #smon : system monitor

R1.2.5查看所有實例

未啟動的可以

ps -elf | grep ora_ ( 對比其後接的SID)

lsnrctl status

1.3開啟和關閉歸檔

1.3.1 查看當前歸檔模式

SQL> archive log list;Database log mode              No Archive ModeAutomatic archival             DisabledArchive destination            USE_DB_RECOVERY_FILE_DESTOldest online log sequence     228Current log sequence           230

1.3.2 關閉資料庫到mount

註意

如果是資料庫集群,不能單獨用shutdown immediate;關閉資料庫,必須進入到grid用戶模式下用srvctl stop database -d  實例名  統一關閉實例;

另外startup mountalter database archivelog;操作,每台集群都要操作,重啟資料庫的時候,直接在oracle用sqlplus按順序啟動。

 

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 SQL> startup mount;ORACLE instance started. Total System Global Area 3423965184 bytesFixed Size                  2180544 bytesVariable Size            2013268544 bytesDatabase Buffers         1392508928 bytesRedo Buffers               16007168 bytesDatabase mounted.

1.3.3 啟動或關閉歸檔

  • 啟動歸檔

如果資料庫一開始沒有設置日誌模式,需要先設置日誌模式

Alter system set log_archive_start=true scope=spfile; 設置歸檔日誌方式為歸檔模式

SQL> alter database archivelog;  Database altered.

  • 設置歸檔路徑

alter system set log_archive_dest_1='location=/ora_arch';

  • 關閉歸檔

SQL> alter database noarchivelog;Database altered.

  • 關閉歸檔的時候可能會報閃回報錯,可以查一下閃回的狀態,關閉後可以正常關閉歸檔

ERROR at line 1:

ORA-38774: cannot disable media recovery - flashback database is enabled

  • 關閉閃回

SQL> select flashback_on from v$database;

FLASHBACK_ON

------------------

YES

 

SQL> alter database flashback off;

Database altered.

1.3.4 重新啟動資料庫

查看資料庫實例狀態

select instance_name,status from v$instance;

INSTANCE_NAME     STATUS
------------------------------------------------
linuxidc      MOUNTED

 

SQL> alter database open;Database altered.

 

2.2 rman管理資料庫

2.2.1 在oracle下直接鏈接庫

[oracle@tsm-zh01 ~]$ export ORACLE_SID=orcl   #如果本機有多個資料庫,先操作這個

 

[oracle@tsm-zh01 ~]$ rman target /

 

Recovery Manager: Release 11.2.0.4.0 - Production on Wed Dec 12 10:53:08 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

connected to target database: TSMCITY (DBID=2201482424)

 

RMAN>

2.2.2 進入rman後再連接庫

[oracle@tsm-zh01 ~]$ rman

 

Recovery Manager: Release 11.2.0.4.0 - Production on Wed Dec 12 10:53:25 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

 

RMAN> connect target /

 

connected to target database: TSMCITY (DBID=2201482424)

 

RMAN>

2.3 rman刪除歸檔日誌

公司所有的歸檔(tsmcnnt、tsmdb、tsmcity)都在tsmcity的歸檔文件夾黎。

2.3.1操作系統刪除(需要和資料庫同步)

在controlfile中記錄著每一個archivelog的相關信息當我們在OS下把這些物理文件delete掉或異常變動後,在controlfile中仍然記錄著這些archivelog的信息,當我們手工清除archive目錄下的文件後,這些記錄並沒有被我們從controlfile中清除掉,也就是oracle並不知道這些文件已經不存在了!這時候我們要做手工的清除。

   1、物理刪除archivelog。在系統裡面找到歸檔日誌文件刪除。如果是陣列用grid用戶asmcmd命令進入到陣列刪除。
    2、進入RMAN 。connect target /   沒有分號
    3、crosscheck archivelog all;    #查看歸檔日誌路徑檢查控制文件和實際物理文件的差別
    4、delete expired archivelog all;  檢查控制文件和實際物理文件的差別

2.3.2 rman命令刪除

1、DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-30'; 刪除30天以前的所有歸檔,時間戳是以歸檔結束計算

2、delete force noprompt archivelog until time 'sysdate-2' ; 刪除2天前的歸檔(強制),force可選項;時間戳是以歸檔開始計算

 

在正常情況才用第一種情況進行刪除,如果採用第二種進行刪除可能會導致部分操作歸檔丟失。

 

3、其他刪除命令

RMAN>delete archivelog until sequence 123; 

RMAN>delete archivelog all completed before 'sysdate - 7';   

RMAN>delete archivelog all completed before 'sysdate - 1'; 

RMAN>delete archivelog from time 'sysdate-1';

2.4 集群管理

集群預設用grid 賬戶管理

 

lsnrctl status (在grid下使用,可以檢測oracle偵聽埠是否打開。)

[root@tsm-zh01 ~]# su - grid

[grid@tsm-zh01 ~]$ asmcmd

ASMCMD>

 

2.4.1單點集群停機:

有時候我們需要單獨關閉一個節點做維護, 那麼單獨關閉

在需要維護的節點Server 上,用root登錄: 

輸入crsctl stop crs  或者 /etc/init.d/init.crs   stop 

 

[root@tsm-zh02 ~]# crsctl stop crs

CRS-2677: Stop of 'ora.gpnpd' on 'tsm-zh02' succeeded

CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'tsm-zh02' has completed

CRS-4133: Oracle High Availability Services has been stopped.

[root@tsm-zh02 ~]crsctl start crs 重啟即可

2.4.2 RAC 數據遷移(ASM 磁碟組)

  • 查看系統表狀態

SQL> select file_name,online_status,tablespace_name from dba_data_files;

 

FILE_NAME

--------------------------------------------------------------------------------

ONLINE_STATUS  TABLESPACE_NAME

-------------- ------------------------------------------------------------

+TSMCITY/tsmcity/datafile/users.290.855748279

ONLINE         USERS

 

+TSMCITY/tsmcity/datafile/undotbs1.292.855748279

ONLINE         UNDOTBS1

 

+TSMCITY/tsmcity/datafile/sysaux.272.855748279

ONLINE         SYSAUX

  • 關閉RAC上涉及的資料庫

srvctl stop database -d XXX

  • 將RAC1啟動到mount狀態

如果用戶將原來的表空間建立在RAC1上,則在RAC1上進行操作;如果是RAC2,就到RAC2上進行操作

SQL>startup mount;

這一步非常重要,否則會提示找不到之前的數據表文件

  • 通過rman 拷貝文件到磁碟組

如果用戶將原來的表空間建立在RAC1上,則在RAC1上進行操作;如果是RAC2,就到RAC2上進行操作

RMAN> connect target /

connected to target database: TSMCITY (DBID=2201482424)

RMAN> copy datafile '/home/oracle/test.dbf' to '+data';

Starting backup at 2017/09/17 02:13:03

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=36 instance=devdb1 device type=DISK

channel ORA_DISK_1: starting datafile copy

input datafile file number=00006 name=/home/oracle/test.dbf

output file name=+DATA/devdb/datafile/users.273.954900787 tag=TAG20170917T021305 RECID=3 STAMP=954900786

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01

Finished backup at 2017/09/17 02:13:07

 

Starting Control File and SPFILE Autobackup at 2017/09/17 02:13:07

piece handle=+FLASH/devdb/autobackup/2017_09_17/s_954900552.304.954900789 comment=NONE

Finished Control File and SPFILE Autobackup at 2017/09/17 02:13:10

  • 拷貝完畢後更改文件名

SQL>alter database rename file '/home/oracle/test.dbf' to '+DATA/devdb/datafile/USERS.273.954900787';

  • 啟動資料庫集群

srvctl start database -d XXX

如果是資料庫集群建議採用如上操作,在grid裡面啟動資料庫,採用如下單點操作也可以進行

#RAC1
SQL> alter database open;
Database altered.
SQL>

#RAC2
SQL> startup;

二、 用戶管理、表空間和授權

2.1 用戶管理

2.1.1 創建用戶

CREATE USER 用戶名 IDENTIFIED BY 密碼 PROFILE DEFAULT DEFAUL T TABLESPACE 表空間 ACCOUNT UNLOCK;

 

PROFILE DEFAULT:預設的用戶口令限制,比如密碼錯誤次數、密碼鎖定時間。

ACCOUNT UNLOCK:賬戶是否啟用或者鎖定,預設是啟用。

2.1.2 刪除用戶

DROP USER 用戶名 CASCADE;

若用戶擁有對象,則不能直接刪除,否則將返回一個錯誤值。指定關鍵字cascade,可刪除用戶所有的對象,然後再刪除用戶。

2.1.3 更改口令

ALTER USER 用戶名 IDENTIFIED BY 改變的口令;

 

2.1.4 查詢所有用戶

SELECT * FROM ALL_USERS;

2.2 表空間管理

2.2.1 創建表空間

CREATE TABLESPACE 表空間名 DATAFILE '/路徑/文件名.dbf' SIZE 50M  
AUTOEXTEND ON   NEXT 50M MAXSIZE 2048M  
[PERMANENT | TEMPORARY] [EXTENT MANAGEMENT LOCAL | DICTIONARY];

AUTOEXTEND:自動增長,預設關閉 ;

NEXT:下次增長的空間;

MAXSIZE:最大增長空間;

[PERMANENT | TEMPORARY] 永久或者臨時表空間,一般先創建臨時表空間再創建永久表空間

[EXTENT MANAGEMENT LOCAL | DICTIONARY]:管理方式,預設是本地管理;

2.2.2 指定用戶表空間

1、創建用戶並指定表空間:

CREATE USER 用戶名 IDENTIFIED BY 密碼  DEFAULT TABLESPACE 永久表空間名  TEMPORARY TABLESPACE 臨時表空間; 

 

2、更改用戶表空間:

ALTER USER  用戶名 DEFAULT TABLESPACE 表空間名;

2.2.3 刪除表空間、數據文件

刪除表空間(先離線)

DROP TABLESPACE 表空間名字 INCLUDING CONTENTS AND DATAFILES;

刪除單個數據文件

ALTER TABLESPACE TEST_SPACE DROP

DATAFILE '/DATA/ORACLE/ORADATA/ORCL/TEST2.DBF';  #刪除文件

2.2.4修改表空間

1、增加文件:

ALTER TABLESPACE 表空間名ADD DATAFILE '/路徑/aaa.dbf' SIZE 1000M;

 

2、修改表空間數據文件尺寸

ALTER DATABASE  資料庫名 DATAFILE ‘/路徑/AA.DBF’ RESIZE 2048M;

 

3、表空間屬性

使表空間聯機|離線

ALTER TABLESPACE game ONLINE|OFFLINE;

使數據文件離線|連接

ALTER DATABASE DATAFILE ‘ssss’ OFFLINE|ONLINE;

使表空間只讀|讀寫

ALTER TABLESPACE game READ ONLY|WRITE;

 

2.2.5 表空間查詢

1、看表空間名稱和狀態

select tablespace_name,status from user_tablespaces;

 

2、查詢表空間使用情況

SET lines 2000

SET pagesize 2000

 

SELECT total.tablespace_name,

       Round(total.mb, 2)           AS total_mb,

       Round(total.mb - free.mb, 2) AS used_mb,

       Round(free.mb, 2)            AS free_mb,

       Round(( 1 - free.mb / total.mb ) * 100, 2)

       || '%'                       AS used_pct

FROM   (SELECT tablespace_name,

               Sum(bytes) / 1024 / 1024 AS mb

        FROM   dba_free_space

        GROUP  BY tablespace_name) free,

       (SELECT tablespace_name,

               Sum(user_bytes) / 1024 / 1024 AS mb

        FROM   dba_data_files

        GROUP  BY tablespace_name) total

WHERE  free.tablespace_name = total.tablespace_name

ORDER  BY tablespace_name;

3、查詢表空間的free space

select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;

 

4、查詢表空間的總容量

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

 

5、查詢表空間使用率

SELECT total.tablespace_name,

       Round(total.MB, 2)           AS Total_MB,

       Round(total.MB - free.MB, 2) AS Used_MB,

       Round(( 1 - free.MB / total.MB ) * 100, 2)

       || '%'                       AS Used_Pct

FROM   (SELECT tablespace_name,

               Sum(bytes) / 1024 / 1024 AS MB

        FROM   dba_free_space

        GROUP  BY tablespace_name) free,

       (SELECT tablespace_name,

               Sum(bytes) / 1024 / 1024 AS MB

        FROM   dba_data_files

        GROUP  BY tablespace_name) total

WHERE  free.tablespace_name = total.tablespace_name;

 

6、表空間數據文件

SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME,ROUND(BYTES/(1024*1024),0) TOTAL_SPACE FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME;

 

2.2.6 用戶授權

GRANT CONNECT,RESOURCE,DBA TO 用戶名;

REVOKE  CONNECT,RESOURCE,DBA FROM 用戶名;      #收回許可權

2.27 表空間備份和恢復

1、離線備份和恢復(冷備份)

       Shutdown 資料庫後直接複製相關文件即可,如果需要恢復,停機後再複製到原來的路徑,然後開啟資料庫。

2、聯機備份和恢復(熱備份)

熱備份的前提是資料庫必須運行在歸檔模式下,而且必須備份的只有數據文件,控制文件、重做日誌文件、歸檔日誌文件都是靠物理冗餘來保護的。

由於數據文件處於備份狀態時重做日誌後臺進程要將這些文件的所有的變化數據塊寫到重做日誌文件中,這對重做日誌緩衝區和重做日誌文件的壓力都增大了,所以需要註意幾下加點:

  •   重做日誌緩衝區和重做日誌文件適當增大
  •   在聯機備份時,每次只備份一個表空間
  •   在DML最少的時候做備份

 

 

  • 設置資料庫日誌模式為歸檔模式

 

Alter system set log_archive _start=true scope=spfile; 

上述參數在oracle 10g已經廢棄

Shutdown immediate;

Startup mount;

Alter database archive;

 

  • 開啟資料庫

既然是聯機備份,資料庫肯定是要保持正常開啟狀態的。

Alter database open;  

 

  • 備份表空間

 

Alter tablespace 空間名 begin backup; 執行此命令後,用cp命令複製表空間文件即可(用oracle用戶拷貝,否則文件許可權不對,無法恢復)。

Alter tablespace 空間名 end backup;

select * from v$backup; 查看是否備份成功

 

  • 重做日誌寫入

 

select group#,sequence#,status,archived from v$log; 查看當前重做日誌:

Alter system archive log current;

Alter system switch logfile;

重做日誌文件一般有3個,切換3次。

 

  • 如果資料庫某個表空間出現問題,無法正常啟動資料庫,操作如下;

先將表空間提示的數據文件切換到離線狀態

Alter database datafile  10 offline drop;    數字10為系統提示的文件編號;

Select * from v$recover_file;  查詢是否為編號為10的文件報錯。

刪除並複製之前備份的文件到表空間文件位置。

Alter database open;

  • 恢復

Recover datafile 10;

Alter datafile 10 online;

完畢。

三、 備份和恢復

3.1 熱備份

3.2 邏輯備份

  1. EXP和IMP是客戶端工具程式,它們既可以在客戶端使用,也可以在服務端使用。
  2. EXPDP和IMPDP是服務端的工具程式,他們只能在ORACLE服務端使用,不能在客戶端使用。即EXPDP導出的數據只能在服務端。
  3. IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件

3.2.1 exp 和imp

3.2.2 expdp 和impdp

3.2.2.1 expdp 導出

expdp或impdp命令時,可暫不指出用戶名/密碼@實例名 as 身份,然後根據提示再輸入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

1、創建邏輯目錄.

該命令不會在操作系統創建真正的目錄,最好以oracle等管理員創建。

sql>create directory dpdata1 as '/test/dump';

查看管理理員目錄(同時查看操作系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
sql>select * from dba_directories;

2、授權資料庫用戶許可權

給scott用戶賦予在指定目錄的操作許可權,最好以system等管理員賦予。
sql>grant read,write on directory dpdata1 to scott;

#Scott是資料庫用戶,如果用管理sys去操作,可以不用授權操作,以 \’sys/密碼@實例名 as sysdba\’ 的形式登錄即可。比如\’sys / as sysdba \’

3、導出數據

1)按用戶導

 

expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1 logfile=expdpd.log  version=10.2.0.4

#Schemas=用戶名,Logfile可以不指定,系統會自動生成

#version如果指定版本號:則可以再低版本中進行恢復保證相容性


2)並行進程parallel

 

expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott_%U.dmp parallel=4 job_name=scott3

#註意:dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式為scott_nn.dmp,其中nn 從 01 開始,然後按需要向上增加,上限為最大線程數。

Sql>show parameters cpu                            #查看cpu支持的線程數。


3)按表名導

expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1

#預設導出的該用戶名下麵的表,如果需要導出其他用戶的表  tables=用戶名.表名


4)按查詢條件導

expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20'


5)按表空間導


expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example


6)導整個資料庫

expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y

 

7)partfile

 

expdp partfile=expdp.txt

文本文件裡面可以寫腳本,命令

 

3.2.2.2 impdp 恢復

  • 導到指定用戶下

 

impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott

#即使用戶不存在也可以導入數據,建議先建立用戶在導入數據。


2)改變表的owner

 

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system

#將表的所有者從scott變為system


3)導入表空間

 

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example


4)導入資料庫

 

impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y


5)追加數據

 

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION

 

3.2.2.3並行操作(PARALLEL) 說明

您可以通過 PARALLEL 參數為導出使用一個以上的線程來顯著地加速作業。每個線程創建一個單獨的轉儲文件,因此參數 dumpfile 應當擁有和並行度一樣多的項目。您可以指定通配符作為文件名,而不是顯式地輸入各個文件名,例如: 

 

expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export 

 

註意:dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式將為expCASES_nn.dmp,其中nn 從 01 開始,然後按需要向上增加。 

在並行模式下,狀態屏幕將顯示四個工作進程。(在預設模式下,只有一個進程是可見的)所有的工作進程同步取出數據,併在狀態屏幕上顯示它們的進度。

分離訪問數據文件和轉儲目錄文件系統的輸入/輸出通道是很重要的。否則,與維護 Data Pump 作業相關的開銷可能超過並行線程的效益,並因此而降低性能。並行方式只有在表的數量多於並行值並且表很大時才是有效的。 

3.3    冷備份(非歸檔模式)

拷貝相關的數據文件、歸檔日誌、重做日誌、控制文件即可,可以保持文件一致性。

 

connect tigger/sccot as sysdba;

shutdown immediate;    #先關閉資料庫

cp d:/test*.dbf d:export     #--cp 文件  目標文件夾    數據文件

cp d:/test*.ctl d:export   #--控制文件

cp d:/test*.log d:export   #--日誌文件

startup;

 

查看控制文件路徑

select status,name from v$controlfile;

查看數據文件路徑

select status,file_name from dba_data_files;

查看日誌文件

select group#,status,member from v$logfile;

3.4    RMAN備份和恢復

3.4.1聯機備份

1、開啟歸檔

 

Sql> alter database archivelog;      #開啟歸檔

Sql>archive log list;                #查看歸檔狀態

 

2、創建恢複目錄

一般情況恢複目錄是用另外一臺伺服器的資料庫來創建的,以保證當前伺服器宕機後,恢複目錄仍然可以使用。

 

2.1創建恢復用表空間

#Sqlplus  遠程用戶名/密碼@遠程資料庫名 ;

Sql>create tablespace  表空間名 datafile ‘路徑’ size 200m autoextend on next 50m maxsize 500m;

Sql>create user 用戶名 idendified by 密碼 default tablespace 表空間名; #創建用於管理恢複目錄表空間的用戶

Sql>grant connect,resource,recovery_catalog_owner to 用戶名; #授予用戶管理表空間的許可權

在恢復用表空間中創建恢複目錄

2.2創建遠程恢複目錄

rman

Rman>connect catalog  遠程用戶/密碼@遠程資料庫名;    #用rman 連接到遠程資料庫

Rman>create catalog;      #創建恢複目錄

 

#創建完恢複目錄後,在遠程資料庫中登錄用戶,可以查到多了很多數據表信息。

 

2.3 註冊需要備份的資料庫

#Rman target /;   #用rman連接需要備份的資料庫

Rman >connect catalog 用戶名/密碼@遠程資料庫名;

Rman>register database;    #註冊需要備份的資料庫到恢複目錄

 

註冊完畢後可以在恢複目錄看到資料庫的註冊信息

 

3、備份

3.1 rman參數說明

https://www.cnblogs.com/-abm/p/9261034.html

%c 備份片的拷貝數 
%d 資料庫名稱 
%D 位於該月中的第幾天 (DD) 
%M 位於該年中的第幾月 (MM) 
%F 一個基於DBID唯一的名稱,這個格式的形式為c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII為該資料庫的DBID,YYYYMMDD為
日期,QQ是一個1-256的序列 
%n 資料庫名稱,向右填補到最大八個字元 
%u 一個八個字元的名稱代表備份集與創建時間 
%p 該備份集中的備份片號,從1開始到創建的文件數
%U 一個唯一的文件名,代表%u_%p_%c 
%s 備份集的號 
%t 備份集時間戳 
%T 年月日格式(YYYYMMDD)

3.2 連接遠程恢複目錄

在rman連接到本地資料庫之後,必須再遠程連接恢複目錄,這樣才會將備份信息寫入到恢複目錄,否則仍然是nocatlog模式,所有信息值存入到控制文件中。

 

#rman target /  catalog  用戶名/密碼@遠程資料庫名   #前半部分是登錄到本地,後半部分連接到遠程

#rman target /

Rman> connect catalog 遠程用戶名/密碼@遠程資料庫名;

 

3.3備份

Rman>backup as compressed backupset database plus archivelog delete all input;

#plus archivelog 備份的同時備份歸檔日誌,包括剛剛運行backup所生成的日誌

#delet all input 刪除所有已備份的的歸檔日誌

 

RMAN>configure channel device type disk format '/home/oracle/oradata/backup/data_%d_%M_%U';

#設置數據文件備份路徑

 

RMAN>configure controlfile autobackup format for device type disk to '/home/oracle/oradata/backup/ctl_%d_%M_%F';

#設置控制文件備份路徑

 

 

通道備份

run
{

allocate channel ch1 device type disk;

allocate channel ch2 device type disk;

backup database format '/home/oracle/oradata/backup/Data_%d_%M_%U'

plus archivelog format '/home/oracle/oradata/backup/log_%d_%M_%U';

 

sql ‘alter system archive log current’;   #備份所有的歸檔日誌

release channel ch1;

release channel ch2;
}

報錯 operation disallowed: snapshot control file enqueue unavailable

錯誤信息

RMAN> backup current controlfile format '/tmp/xifenfei.ctl';

Starting backup at 10-JUN-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=628 instance=orcl1 devtype=DISK

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

waiting for snapshot control file enqueue

cannot make a snapshot control file

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03009: failure of backup command on ORA_DISK_1 channel at 06/10/2015 16:03:10

ORA-00230: operation disallowed: snapshot control file enqueue unavailable

查看會話

SQL> SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE,

  2  ACTION, LOGON_TIME "Logon"

  3  FROM V$SESSION s, V$ENQUEUE_LOCK l

  4  WHERE l.SID = s.SID

  5  AND l.TYPE = 'CF'

  6  AND l.ID1 = 0

  7  AND l.ID2 = 2;

 

     SID User

---------- ------------------------------

PROGRAM

------------------------------------------------

MODULE

------------------------------------------------

ACTION                           Logon

-------------------------------- ------------

       648 SYS

rman@db1 (TNS V1-V3)

backup full datafile

0000152 STARTED111               03-JUN-15

查詢並kill相關session

查詢資料庫SID

Sql>select saddr,sid,serial#,paddr,username,status from v$session where sid = 648 ;SADDR                   SID    SERIAL# PADDR            USERNAME                                                     STATUS---------------- ---------- ---------- ---------------- ------------------------------------------------------------ ----------------00000000849D3D48          648        319 000000008488C070 SYS                                                          ACTIVE

 

查詢系統SPID

SQL> select spid from v$process where addr in(select paddr from v$session where sid=648);

 

SPID

------------

40108238                             #這個SPID對應的就是操作系統的進程號

 

殺死session

alter system kill session ‘648,319';     #兩個數字代表SID和SERIAL

 

殺死spid

SQL> !ps -ef|grep 40108238

  oracle 39125244 65011720   0 15:59:27  pts/0  0:00 grep 40108238

  oracle 40108238        1   0   Jun 03      -  1:18 oracleorcl1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

 

$kill -9 40108238

或者直接一步

sql>ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE/POST_TRANSACTION;

POST_TRANSACTION表示等待事務完成後斷開會話,IMMEDIATE表示中斷會話,

3.4.2恢復

1、查看備份信息

恢復的時候一定要先檢查備份文件,刪除失效(expired)備份,否則恢復會報錯。

 

Rman>Report obsolete ;     #查看冗餘無效備份

Rman>Delete noprompt obsolete;

Rman>Crosscheck backup;      #檢查備份信息

Rman>Delete noprompt expired backup;             #刪除過期備份

 

Rman>delete noprompt backupset   41      #(BS Key的值)  刪除指定備份

Rman>delete noprompt backup;         #刪除所有備份

2、非系統表空間dbf文件丟失

SQL> startup

Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/usr/oracle/app/oradata/orcl/users01.dbf'  #提示data file 4不能識別。

 

SQL> alter database datafile 4 offline;

SQL> alter database open;

RMAN> restore datafile 4;    #恢複數據文件4

RMAN> recover datafile 4;    #還原數據文件 4

SQL> alter database datafile 4 online;   

 

3、系統表空間dbf文件丟失

系統表空間文件丟失時,無法啟動資料庫,不能夠到open狀態,所以跳過SQL> alter database open; 命令直接恢複數據塊最後再執行SQL> alter database open;

 

SQL> alter database datafile 4 offline;

Database altered.

Database altered.

RMAN> restore datafile 4;    #恢複數據文件4

RMAN> recover datafile 4;    #還原數據文件 4

SQL> alter database datafile 4 online;   

Database altered.

SQL> alter database open;     #open在最後執行

4、控制文件丟失,數據文件丟失

控制文件丟失後,資料庫只能啟動到nomount狀態

 

啟動資料庫到nomount狀態

SQL> startup nomount;
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying control file, check alert log for more info

  

rman中恢復控制文件

[oracle@oracledb ~]$ rman target/

Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jun 15 15:01:13 2017

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

connected to target database: ORCL (not mounted)

RMAN> restore controlfile from '/home/oracle/oradata/backup/control/ctl_ORCL_06_15_c-1452257309-20170615-05';     #恢復控制文件

Starting restore at 15-JUN-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:16
output file name=/usr/oracle/app/oradata/orcl/control01.ctl
output file name=/usr/oracle/app/flash_recovery_area/orcl/control02.ctl
Finished restore at 15-JUN-17

 

啟動資料庫到mount狀態下

SQL> alter database mount;

 

恢複數據文件

RMAN> restore database;

RMAN> recover database;

SQL> alter database open resetlogs;    #控制文件丟失後需要執行重設日誌文件

 

       再進行一次全備份!!!

四、 日誌管理

4.1錯誤日誌查詢

1 通過命令查看錯誤日誌目錄:show parameter background_dump_dest

  /usr/oracle/app/diag/rdbms/orcl/orcl/trace 

   

 

col * format a20  設置每一列的寬度為20個字元; *也可以用具體的列名來代替

 

 

 

五、 常見錯誤

5.1 sysaux 表空間SM/AWR占用過大

1、首先查看sysaux中各個項目占的比重。

SM/AWR占據了23GB的空間。

 

SELECT occupant_name"Item",
           round(space_usage_kbytes/1024/1024,3)"Space Used (GB)",
           schema_name "Schema",
           move_procedure "MoveProcedure"
      FROM v$sysaux_occupants
    ORDER BY 2 Desc;

 

2、查看快照,快照是存儲到sysaux表空間的

select snap_id, begin_interval_time from sys.dba_hist_snapshot order by snap_id;

 


select min(snap_id),max(snap_id) from dba_hist_snapshot;

 

3、刪除快照信息

exec dbms_workload_repository.drop_snapshot_range(49303,49323 );

4、查看快照保存時間和間隔

SELECT * FROM DBA_HIST_WR_CONTROL;

 

5、修改快照保存時間和間隔

修改為每隔1小時搜集一次,保存時間為7*24*60分鐘)

 

EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL=>60, RETENTION=>7*24*60);6、回收空間

由於存在高水位線,dbms_workload_repository.drop_snapshot_range 操作實際上是執行delete操作,所在刪除完畢快照後,空間沒有被回收。回收表空間,降低HWM(high water mark)。

 1、查看sysaux表和索引的前10占用情況,尾碼為PK的表示索引表

SELECT *

  FROM (SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB

          FROM DBA_SEGMENTS

         WHERE TABLESPACE_NAME = 'SYSAUX'

         GROUP BY SEGMENT_NAME

         ORDER BY 2 DESC)

 WHERE ROWNUM < 10;

 

可以看到目前表空間還是很大的。

 

2、選擇shrink逐一釋放表空間 ,move也可以釋放表空間,但是要重建索引。可以線上操作

#開啟行轉移,在釋放空間的時候將行向表的前面移動,以便釋放空間

alter table WRH$_SEG_STAT enable row movement;

 

#shrink用於釋放空間,cascade表示將表的索引的空間一起釋放,以尾碼PK結尾的表示索引,釋放的時候去掉PK即可。

ALTER TABLE test SHRINK SPACE compact

alter table WRH$_SEG_STAT shrink space cascade;

 

#關閉行轉移

alter table WRH$_SEG_STAT disable row movement;

 

3、或者選擇move釋放空間,需要停機操作,因為此時是鎖表的,不能夠進行DML操作

alter table  ** move partition **;

#如果是分區表的話,需要先查看分區,按照分區操作

select segment_name,partition_name,bytes/1024/1024/1024 gb from dba_segments where segment_name='WRH$_ACTIVE_SESSION_HISTORY';

 

#重建索引

alter index **_PK  partion  ** rebuild

 

此時再去查看總利用率,發現SM/AWR已經降低到5G了。

 

7、註意事項

由於快照刪除實際上是對錶進行delete操作,因此會產生大量的歸檔,如果磁碟空間不足,將會導致問題。

 

 

  •  
每篇隨筆都來自工作經驗並親自試驗,確保每位讀者能夠接觸到正確的知識。部分隨筆多平臺發佈,謝絕轉載!!!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 個人超級電腦是一個新概念,目前這個市場類似上世紀70年的PC革命時代。本篇是回答一位用戶提問,LAXCUS分散式操作系統如何成為一臺“個人超級電腦”。 ...
  • mysql二進位安裝腳本部署 單實例 [root@localhost ~]# mkdir mysql //創建存放腳本目錄 [root@localhost ~]# ls anaconda-ks.cfg mysql [root@localhost ~]# cd mysql/ [root@localho ...
  • 1.shell命令的執行機制:fork+exec執行命令(任何的shell都會執行) 2.shell中的用戶輸入處理 1 命令行參數:選項、參數 2 運行時輸入 3 read命令: 4 1.基本讀取、 5 2.超時處理-t選項、 6 3.隱藏方式讀取-s選項) 7 4.從文件中讀取 3.shell的 ...
  • 如果現在的我們離開了互聯網,生活會是什麼樣子? 互聯網++++,已經深刻滲透到人們的生活中。 不知道大家有沒有想過?每一個互聯網+結合的背後都是海量的存儲需求。你查看的每一個商品、組建的每一個戰隊、閱讀的每一篇文章,基於互聯網的每一個興趣愛好,都有它的key和value。 在 key-value 數 ...
  • 前言 在正式落地談技術之前,先花一些篇幅說說大數據技術的發展史。我們常說的大數據技術,其實起源於Google在2004年前後發表的三篇論文,分別是分散式文件系統GFS、大數據分散式計算框架MapReduce和NoSQL資料庫系統BigTable(如果大家需要可以留言給我,我可以專門解讀一下)。 一、 ...
  • 2022-09-21 (2)hash操作: ①設置多個hash值,(hmset): 查看說明: help hmset hmset person name A age 1 ②獲得多個hash值,(hmget): 查看說明: help hmget hmget person name age ③將hash ...
  • 摘要:帶你瞭解基於FusionInsight HD&MRS的5種kafka消費端性能優化方法。 本文分享自華為雲社區《FusionInsight HD&MRSkafka消費端性能優化方法》,作者: 穿夾克的壞猴子。 kafka消費端性能優化主要從下麵幾個方面優化: 1.介面使用方面優化: 舊版本hi ...
  • 摘要:RDS關係型資料庫是一種基於雲計算平臺的即開即用、穩定可靠、彈性伸縮、便捷管理的線上關係型資料庫服務。 本文分享自華為雲社區《一致性處理事務這下還是看RDS的吧【秋招特訓】》,作者:樣子的木偶。 什麼是RDS? RDS關係型資料庫是一種基於雲計算平臺的即開即用、穩定可靠、彈性伸縮、便捷管理的在 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...