1. 程式人生 > >oracle日常維護

oracle日常維護

Oracle日常維護

1.增加表空間大小

查詢表空間檔案路徑

select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

增減表空間檔案

ALTER TABLESPACE USERS ADD DATAFILE '/data/oradata/orcl/users02.dbf' SIZE 10240M;

修改表空間大小

alter database datafile '/data/orcl/users02.dbf' resize 50m;

修改表空間大小自增

alter database
datafile '/data/orcl/users02.dbf' autoextend onnext 50m maxsize 500m; - onnext 50m 每次增加的大小 - maxsize 500m 最大檔案大小

2.必須加上表名才能查詢

問題:


使用者查詢表一定要加上表空間名的問題
ORACLE 10G 建立了一個測試用的使用者TEST,打算這個使用者只有查詢的許可權,預設的表空間指向THGE的這個表空間,給這個使用者賦予了connect resource的角色,許可權為SELECT ANY TABLE

查詢一個表, 這樣寫就沒錯
SELECT COUNT(*) FROM THGE.KTYLOG;
這樣寫就說這個表或檢視沒找到
SELECT COUNT(*) FROM KTYLOG;

解決:

我們都知道,在oracle中對使用者的管理是使用許可權的方式來管理的,也就是說,如果我們想使用資料庫,我們就必須得有許可權,但是如果是別人將許可權授予了我們,我們也是能對

資料庫進行操作的,但是我們必須要已授權的表的名稱前鍵入該表所有者的名稱,所以這就是比較麻煩的,遇到這種情況,我們該怎麼辦呢?建立個同義詞吧!這樣我們就可以直

接使用同義詞來使用表了。

建立同義詞的具體語法是:create [public] SYNONYM synooym for object;其中synooym表示要建立的同義詞的名稱,object表示表,檢視,序列等我們要建立同義詞的物件的名
稱。 CREATE PUBLIC SYNONYM public_emp FOR jward.emp; -- jward 使用者名稱 刪除同義詞 使用DROP SYNONYM語句刪除不再需要的同義詞 要想刪除私有同義詞 就省略 PUBLIC 關鍵字 要想刪除公共同義詞 就要包括PUBLIC 關鍵字 DROP SYNONYM emp; --刪除名為emp 的私有同義詞 DROP PUBLIC SYNONYM public_emp; --刪除名為public_emp的公有同義詞

3.ASM磁碟空間不足

查詢ASM磁碟空間

SQL> select group_number,name,total_mb,free_mb from v$asm_diskgroup;

GROUP_NUMBER NAME			      TOTAL_MB	  FREE_MB
------------ ------------------------------ ---------- ----------
	   1 CRS				 51136	    50739
	   2 DATA				368616	   336503
	   3 REDO				 81917	    77947

4.歸檔日誌已滿

現象:

SQL> conn trade
Enter password: 
ERROR:
ORA-00257: archiver error. Connect internal only, until freed.


Warning: You are no longer connected to ORACLE.

解決:

檢視使用情況

# 檢視歸檔日誌路徑
SQL> show parameter log_archive_dest;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest		     string
log_archive_dest_1		     string
log_archive_dest_10		     string
log_archive_dest_11		     string
log_archive_dest_12		     string
log_archive_dest_13		     string
log_archive_dest_14		     string
log_archive_dest_15		     string
log_archive_dest_16		     string
log_archive_dest_17		     string
log_archive_dest_18		     string

# 檢視ASM磁碟使用空間情況
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

FILE_TYPE	     PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
CONTROL FILE			    .46 			0
	      1

REDO LOG			   5.26 			0
	      4

ARCHIVED LOG			  93.77 			0
	    101
	  
# 查詢最大限制
SQL> show parameter recover;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest		     string	 +REDO
db_recovery_file_dest_size	     big integer 30G
recovery_parallelism		     integer	
  • 方法1:刪除無用的日誌

    # 檢查一些無用的archivelog
    RMAN> crosscheck archivelog all;
    
    # 刪除過期的歸檔
    RMAN> delete expired archivelog all;
    
    #刪除截止到前一天的所有archivelog
    delete archivelog until time 'sysdate-1' ;
    
  • 方法2:增加archivelog空間大小

    # 強制關閉資料庫
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area 2087780352 bytes
    Fixed Size		    2214936 bytes
    Variable Size		 1308623848 bytes
    Database Buffers	  771751936 bytes
    Redo Buffers		    5189632 bytes
    Database mounted.
    # 檢視歸檔日誌資訊
    SQL> archive log list;
    Database log mode	       Archive Mode
    Automatic archival	       Enabled
    Archive destination	       USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence     60
    Next log sequence to archive   0
    Current log sequence	       61
    # 增加歸檔到30G
    SQL> alter system set db_recovery_file_dest_size=30G scope=both;
    
    System altered.
    
    # 開啟資料庫
    SQL> alter database open;
    
    Database altered.