數據庫——Oracle 配置管理

Oracle 配置管理

一、管理控制文件

1、獲得控制文件信息

SQL> select name from v$controlfile;       

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl

當前數據庫實例控制文件的物理位置

SQL> select name,value from v$parameter where name='control_files';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
control_files
/u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control
02.ctl

2、查看控制文件中所存內容的信息

SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;

3、存儲多重控制文件

[root@oracle ~]# mkdir /backup         //創建備份文件目錄
[root@oracle ~]# chown -R oracle /backup/         //賦予權限
SQL> alter system set
  2  control_files=
  3   '/u01/app/oracle/oradata/orcl/control01.ctl',         //控制文件指定路徑1
  4  '/backup/control02.ctl' scope=spfile;         //控制文件指定路徑2(可增加)

系統已更改。
[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/control02.ctl /backup/control02.ctl         //將文件複製到新的位置/backup目錄

4、備份和恢復控制文件

1、備份爲二進制文件

[root@oracle ~]# mkdir /u01/app/oracle/oradata/orcl/backup
[root@oracle ~]# chown -R oracle /u01/app/oracle/oradata/orcl/backup/
[root@oracle ~]# su - oracle
Last login: Wed Jul 31 18:45:40 CST 2019 on pts/0
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> startup
ORACLE 例程已經啓動。

Total System Global Area 1593835520 bytes
Fixed Size		    8793256 bytes
Variable Size		 1023411032 bytes
Database Buffers	  553648128 bytes
Redo Buffers		    7983104 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> alter database backup controlfile to '/u01/app/oracle/oradata/orcl/backup/control.bkp';         //備份到/backup中,文件名爲control.bkp

數據庫已更改。

2、恢復控制文件

[oracle@oracle ~]$ sqlplus / as sysdba         
SQL> startup         //數據庫發生錯誤
ORACLE 例程已經啓動。

Total System Global Area 1593835520 bytes
Fixed Size		    8793256 bytes
Variable Size		 1023411032 bytes
Database Buffers	  553648128 bytes
Redo Buffers		    7983104 bytes
ORA-00205: ?????????, ??????, ???????


SQL> quit
從 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 斷開
[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/backup/control.bkp /u01/app/oracle/oradata/orcl/control01.ctl          //複製備份文件到原來的路徑
[oracle@oracle ~]$ cp /u01/app/oracle/oradata/orcl/backup/control.bkp /u01/app/oracle/oradata/orcl/control02.ctl          //爲了保持一致,將所有控制文件也恢復一份
[oracle@oracle ~]$ sqlplus / as sysdba

SQL> alter database mount;         //數據庫掛載

數據庫已更改。

SQL> select group#,sequence#,archived,status from v$log;         //查看當前活動的日誌文件

    GROUP#  SEQUENCE# ARCHIVED	STATUS
---------- ---------- --------- ------------------------------------------------
	 1	    4 NO	INACTIVE
	 3	    3 NO	INACTIVE
	 2	    5 NO	CURRENT         //當前正在使用的日誌

SQL> select group#,status,type,member from v$logfile;         //查找日誌目錄

    GROUP# STATUS		 TYPE
---------- --------------------- ---------------------
MEMBER
--------------------------------------------------------------------------------
	 3			 ONLINE
/u01/app/oracle/oradata/orcl/redo03.log

	 2			 ONLINE
/u01/app/oracle/oradata/orcl/redo02.log         //對應上面命令查到的活動日誌文件

	 1			 ONLINE
/u01/app/oracle/oradata/orcl/redo01.log


SQL> recover database using backup controlfile;         //使用備份控制文件恢復數據庫
ORA-00279: ?? 1752953 (? 05/13/2020 21:31:17 ??) ???? 1 ????
ORA-00289: ??:
/u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_5_975664254.dbf
ORA-00280: ?? 1752953 (???? 1) ??? #5 ?


指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo02.log         //查找到的日誌目錄
已應用的日誌。
完成介質恢復。
SQL>  alter database open resetlogs;         //要打開數據時,重置重做日誌

數據庫已更改。

SQL> shutdown  immediate         //關閉數據庫
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup         //啓動數據庫,恢復完成
ORACLE 例程已經啓動。

Total System Global Area 1593835520 bytes
Fixed Size		    8793256 bytes
Variable Size		 1023411032 bytes
Database Buffers	  553648128 bytes
Redo Buffers		    7983104 bytes
數據庫裝載完畢。
數據庫已經打開。

二、管理重做日誌文件

1、讀取重做日誌文件信息

1、使用v$log查看重做曰志信息

SQL> col status for a10         //設置格式化字符,a1O代表status列顯示10字符寬度
SQL> select group#,sequence#,bytes,members,archived,status from v$log;

    GROUP#  SEQUENCE#	   BYTES    MEMBERS ARCHIVED  STATUS
---------- ---------- ---------- ---------- --------- ----------
	 1	    4  209715200	  1 NO	      INACTIVE       
	 2	    5  209715200	  1 NO	      CURRENT         //當前曰志組
	 3	    3  209715200	  1 NO	      INACTIVE

2、查看重做日誌組信息

SQL> set line 120;         //設置顯示寬度爲120
SQL> col member for a50;         //member列的輸出格式爲50個固定字符長度
SQL> select group#,status,type,member from v$logfile;

    GROUP# STATUS     TYPE		    MEMBER
---------- ---------- --------------------- --------------------------------------------------
	 3	      ONLINE		    /u01/app/oracle/oradata/orcl/redo03.log
	 2	      ONLINE		    /u01/app/oracle/oradata/orcl/redo02.log
	 1	      ONLINE		    /u01/app/oracle/oradata/orcl/redo01.log

STATUS參數

空白:此文件正在使用。
stale:該文件內容是不完整的。
invalid:該文件不可以被訪問 , 如剛建立。
deleted:該文件已不再有用。

SQL> alter  system  switch   logfile;

系統已更改。

SQL> select group#,sequence#,bytes,members,archived,status from v$log;
SQL> alter system checkpoint;

系統已更改。

2、重做日誌組及其成員管理

1、創建重做日誌組

[root@oracle ~]# mkdir -p /backup/orcl/log         //創建重做日誌組備份文件夾
[root@oracle ~]# chown -R oracle /backup/         
[root@oracle ~]# su - oracle 
Last login: Wed May 13 22:57:23 CST 2020 on pts/0
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> alter database add logfile group 4         //alter database:數據庫實例名;group:日誌組編號
  2  ('/u01/app/oracle/oradata/orcl/redo04a.log',         //曰志文件路徑及名稱
  3  '/backup/orcl/log/redo04b.log') size 10m;         //size:日誌文件大小

數據庫已更改。
SQL> select group#,status,type,member from v$logfile;         //查看重做日誌組信息

    GROUP# STATUS     TYPE		    MEMBER
---------- ---------- --------------------- --------------------------------------------------
	 3	      ONLINE		    /u01/app/oracle/oradata/orcl/redo03.log
	 2	      ONLINE		    /u01/app/oracle/oradata/orcl/redo02.log
	 1	      ONLINE		    /u01/app/oracle/oradata/orcl/redo01.log
	 4	      ONLINE		    /u01/app/oracle/oradata/orcl/redo04a.log         //新添加日誌1
	 4	      ONLINE		    /backup/orcl/log/redo04b.log         //新添加日誌2

2、刪除重做日誌組

SQL> select group#,sequence#,bytes,members,archived,status from v$log;         //查看重做曰志信息

    GROUP#  SEQUENCE#	   BYTES    MEMBERS ARCHIVED  STATUS
---------- ---------- ---------- ---------- --------- ----------
	 1	    4  209715200	  1 NO	      INACTIVE
	 2	    5  209715200	  1 NO	      CURRENT
	 3	    3  209715200	  1 NO	      INACTIVE
	 4	    0	10485760	  2 YES       UNUSED

SQL> alter database drop logfile group 4;         //刪除重做日誌組第4組

數據庫已更改。

SQL> select group#,sequence#,bytes,members,archived,status from v$log;         //查看重做曰志信息

    GROUP#  SEQUENCE#	   BYTES    MEMBERS ARCHIVED  STATUS
---------- ---------- ---------- ---------- --------- ----------
	 1	    4  209715200	  1 NO	      INACTIVE
	 2	    5  209715200	  1 NO	      CURRENT
	 3	    3  209715200	  1 NO	      INACTIVE

如果無法刪除,強制切換一下日誌

SQL>alter system switch logfile;

當前的日誌組不能刪除,要刪除當前日誌組需要先對當前日誌組進行切換,使用命令爲alter system switch logfile
活動的日誌組不可以刪除
沒有歸檔的日誌組不可以刪除(前提是已經運行在歸檔模式)

3、添加/刪除重做日誌文件

SQL> alter  database add logfile member         //添加重做日誌文件
  2  '/backup/orcl/log/redo01b.log' to group 1,
  3  '/backup/orcl/log/redo02b.log' to group 2;

數據庫已更改。

SQL> select group#,status,type,member from v$logfile;         //查看重做日誌組信息

    GROUP# STATUS     TYPE		    MEMBER
---------- ---------- --------------------- -----------------------------------------
	 3	      ONLINE		    /u01/app/oracle/oradata/orcl/redo03.log
	 2	      ONLINE		    /u01/app/oracle/oradata/orcl/redo02.log
	 1	      ONLINE		    /u01/app/oracle/oradata/orcl/redo01.log
	 1 INVALID    ONLINE		    /backup/orcl/log/redo01b.log
	 2 INVALID    ONLINE		    /backup/orcl/log/redo02b.log

SQL> alter database drop logfile member         //刪除重做日誌文件
  2  '/backup/orcl/log/redo02b.log';
alter database drop logfile member
*
第 1 行出現錯誤:
ORA-01609: 日誌 2 是線程 1 的當前日誌 - 無法刪除成員 ORA-00312:
聯機日誌 2 線程 1: '/u01/app/oracle/oradata/orcl/redo02.log'
ORA-00312: 聯機日誌 2 線程 1: '/backup/orcl/log/redo02b.log'


SQL> alter system switch logfile;         //出現錯誤提示,強制切換重做日誌

系統已更改。

SQL> alter database drop logfile member
  2  '/backup/orcl/log/redo02b.log';

數據庫已更改。

SQL> select group#,status,type,member from v$logfile;

    GROUP# STATUS     TYPE		    MEMBER
---------- ---------- --------------------- --------------------------------------
	 3	      ONLINE		    /u01/app/oracle/oradata/orcl/redo03.log
	 2	      ONLINE		    /u01/app/oracle/oradata/orcl/redo02.log
	 1	      ONLINE		    /u01/app/oracle/oradata/orcl/redo01.log
	 1 INVALID    ONLINE		    /backup/orcl/log/redo01b.log

不能刪除當前組的成員,若要刪除則先執行強制性切換重做日誌的命令
活動的日誌成員不可以刪除
沒有歸檔的日誌文件不能刪除(前提是已運行在歸檔模式下)
當日志組只有一個成員

3、日誌切換和檢查點事件

檢查點事件越頻繁,一旦數據庫發生故障,需要數據庫恢復的重做曰志中的數據就越少。

SQL> ALTER SYSTEM SWITCH LOGFILE;         //強制日誌切換

系統已更改。

SQL> ALTER SYSTEM CHECKPOINT;         //強制產生檢查點事件

系統已更改。

三、管理歸檔日誌文件

1、配置數據庫歸檔日誌

SQL> archive log list;         //查詢數據庫歸檔模式,確認非存檔
數據庫日誌模式             非存檔模式
自動存檔             禁用
存檔終點            /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch
最早的聯機日誌序列     5
當前日誌序列           7
SQL> shutdown immediate         //關閉數據庫
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount;         //動數據庫到mount狀態
ORACLE 例程已經啓動。

Total System Global Area 1593835520 bytes
Fixed Size		    8793256 bytes
Variable Size		 1023411032 bytes
Database Buffers	  553648128 bytes
Redo Buffers		    7983104 bytes
數據庫裝載完畢。
SQL> alter database  archivelog;         //將數據庫設置爲歸檔方式

數據庫已更改。

SQL> archive log list;         //查詢數據庫歸檔模式
數據庫日誌模式            存檔模式
自動存檔             啓用
存檔終點            /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch
最早的聯機日誌序列     5
下一個存檔日誌序列   7
當前日誌序列           7
SQL> alter database open;         //打開數據庫

數據庫已更改。

SQL> alter system switch logfile;         //強制日誌切換

系統已更改。

SQL> select dest_id,name,archived from v$archived_log;         //查看歸檔日誌文件的路徑

   DEST_ID NAME 								  ARCHIVED
---------- ---------------------------------------------------------------------
	 1 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_7_975664254.dbf	  YES

2、獲取歸檔日誌信息

SQL> select dest_id,name,archived from v$archived_log;         //獲取已歸檔的日誌文件的信息

   DEST_ID NAME 								  ARCHIVED
---------- ---------------------------------------------------------------------- ----
	 1 /u01/app/oracle/product/12.2.0/dbhome_1/dbs/arch1_7_975664254.dbf	  YES

四、數據字典管理

1、靜態數據字典視圖

1、查看當前用戶擁有的所有表的信息

SQL> select * from user_tables;

2、查詢該用戶擁有哪些索引

SQL> select index_name from user_indexes;

3、查詢該用戶擁有哪些視圖

SQL> select view_name from user_views;

4、查詢該用戶擁有哪些數據庫對象

SQL> select object_name from user_objects;

5、描述當前用戶的信息

SQL> select * from user_users;

6、查詢當前用戶能夠訪間的所有表、過程、函數等信息

SQL> select owner,object_name,object_type from all_objects;

7、查看所有的視圖及其描述

SQL> desc dictionary

8、查詢USER開頭的視圖

SQL> select table_name from dictionary where table_name like 'USER%';

2、動態數據字典視圖及使用

1、查詢和曰志文件相關的信息

SQL> col name for a25
SQL> col object_id for 999999999
SQL> select * from v$fixed_table where name like 'V$LOG%';

NAME			   OBJECT_ID TYPE	      TABLE_NUM     CON_ID
------------------------- ---------- --------------- ---------- ----------
V$LOGFILE		  ########## VIEW		  65537 	 0
V$LOG			  ########## VIEW		  65537 	 0
V$LOGHIST		  ########## VIEW		  65537 	 0
V$LOG_HISTORY		  ########## VIEW		  65537 	 0
V$LOGMNR_CONTENTS	  ########## VIEW		  65537 	 0
V$LOGMNR_LOGS		  ########## VIEW		  65537 	 0
V$LOGMNR_DICTIONARY	  ########## VIEW		  65537 	 0
V$LOGMNR_PARAMETERS	  ########## VIEW		  65537 	 0
V$LOGMNR_LOGFILE	  ########## VIEW		  65537 	 0
V$LOGMNR_PROCESS	  ########## VIEW		  65537 	 0
V$LOGMNR_TRANSACTION	  ########## VIEW		  65537 	 0
......

2、查看重做日誌組狀態信息

SQL> select group#,members,archived,status from v$log;

    GROUP#    MEMBERS ARCHIVED	STATUS
---------- ---------- --------- ------------------------------------------------
	 1	    1 NO	INACTIVE
	 2	    1 NO	CURRENT
	 3	    1 NO	INACTIVE

3、查看重做曰志文件信息

SQL> col group# for 9
SQL> col type for a7
SQL> col member for a40
SQL> set line 120;
SQL> select* from v$logfile;

GROUP# STATUS  TYPE    MEMBER					IS_RECOVE     CON_ID
------ ------- ------- ---------------------------------------- --------- ----------
     3	       ONLINE  /u01/app/oracle/oradata/orcl/redo03.log	NO	  0
     2	       ONLINE  /u01/app/oracle/oradata/orcl/redo02.log	NO	  0
     1	       ONLINE  /u01/app/oracle/oradata/orcl/redo01.log	NO	  0

4、查詢當前正在使用的重做日誌文件的信息

SQL> col STATUS for a20
SQL> select l.group#,l.archived,l.status,lf.type,lf.member from v$log l, v$logfile lf where l.group#=lf.group#;

GROUP# ARCHIVED  STATUS 	      TYPE    MEMBER
------ --------- -------------------- ------- ----------------------------------------
     3 NO	 INACTIVE	      ONLINE  /u01/app/oracle/oradata/orcl/redo03.log
     2 NO	 CURRENT	      ONLINE  /u01/app/oracle/oradata/orcl/redo02.log
     1 NO	 INACTIVE	      ONLINE  /u01/app/oracle/oradata/orcl/redo01.log

5、查看實例信息

SQL> col host_name for a10
SQL> col instance_name for a10
SQL> col version for a15
SQL> select instance_name,host_name,version,startup_time,logins from v$instance;

INSTANCE_N HOST_NAME  VERSION	      STARTUP_TIME LOGINS
---------- ---------- --------------- ------------ ------------------------------
orcl       oracle     12.2.0.1.0      14-5月 -20   ALLOWED

6、查看當前數據庫的信息

SQL> col name for a10;
SQL> select name,created,log_mode from v$database;

NAME	   CREATED	LOG_MODE
---------- ------------ ------------------------------------
ORCL       09-5月 -18   NOARCHIVELOG
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章