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