当前位置: 代码迷 >> 综合 >> Oracle 11gR2 active datagurad temproray tablespace同步问题
  详细解决方案

Oracle 11gR2 active datagurad temproray tablespace同步问题

热度:64   发布时间:2024-01-12 23:42:17.0

公司业务系统的数据库磁盘空间告急,无奈采购的磁盘没到货。经过商讨制定了临时方案

先来看一下主备库磁盘状态。

#主库磁盘信息
[oracle@db01 db]$              df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-lv_root50G  5.1G   42G  11% /
tmpfs                 127G  172K  127G   1% /dev/shm
/dev/mapper/data-lv_app41G   11G   28G  29% /app
/dev/sda2             190M   39M  141M  22% /boot
/dev/sda1             200M  264K  200M   1% /boot/efi
/dev/mapper/ssddata-oradata733G  537G  159G  78% /oradata
/dev/mapper/data-redo9.8G  5.6G  3.7G  60% /redo
/dev/mapper/data-arch148G  8.9G  132G   7% /arch#备库磁盘信息
[oracle@dbdg temp]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/data-root50G  6.5G   41G  14% /
tmpfs                 127G   92K  127G   1% /dev/shm
/dev/sda2             186M   66M  111M  38% /boot
/dev/sda1             200M  268K  200M   1% /boot/efi
/dev/mapper/oradata-oradata549G  471G   51G  91% /oradata
/dev/mapper/data-redo9.7G  5.6G  3.7G  61% /redo
/dev/mapper/data-arch99G   32G   63G  34% /arch
/dev/mapper/data-app   50G   22G   26G  46% /app
/dev/mapper/temp-temp197G  389M  187G   1% /oradata/dbdg/temp

场景:db表空间使用率超过95%,需要添加数据文件。而dbdg磁盘空间无法支撑此次表空间扩容操作。两台数据库均使用本地磁盘。扩容只能采购。

方案:dbdg添加一块临时的机械磁盘,迁移TEMP表空间。为数据表空间腾出容量。

这就涉及到oracle dataguard架构配置TEMP的操作。具体操作如下:

#dbSQL>  create temporary tablespace temp01  tempfile '/oradata/db/temp/temp_01.dbf' size 50m autoextend on  next 50m maxsize 32767m extent management local;Database altered.SQL>   alter database default temporary tablespace temp01;Database altered.SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';PROPERTY_NAME		       PROPERTY_VALUE
------------------------------ ------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE        TEMP01SQL> select file_name,tablespace_name,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files;FILE_NAME							   TABLESPACE_NAME		  AUT	  MAX_MB
------------------------------------------------------------------ ------------------------------ --- ----------
/oradata/db/temp/temp_01.dbf				   TEMP01			  YES	   32767
/oradata/db/tmp01.dbf					   TMP				  YES 32767.9844

此时数据库的默认表空间已经切换为TEMP了。

#dbdg
SQL> select name,db_unique_name,open_mode from v$database;NAME	  DB_UNIQUE_NAME		         OPEN_MODE
--------- ------------------------------ --------------------
DB	      dbdg			                 READ ONLY WITH APPLYSQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';PROPERTY_NAME		       PROPERTY_VALUE
------------------------------ ------------------------------------
DEFAULT_TEMP_TABLESPACE        TEMP01 SQL> select file_name,tablespace_name,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files;FILE_NAME							   TABLESPACE_NAME		  AUT	  MAX_MB
------------------------------------------------------------------ ------------------------------ --- ----------
/oradata/dbdg/tmp01.dbf					   TMP				  YES 32767.9844

默认表空间配置已经同步到备库中的数据字典,但tempfile并没有创建成功。

核验操作系统文件

#db
[oracle@db01 temp]$ pwd
/oradata/db/temp
[oracle@db01 temp]$ ls
temp_01.dbf  #dbdg
[oracle@dbdg temp]$ pwd
/oradata/dbdg/temp
[oracle@dbdg temp]$ ls
lost+found  

备库数据字典中已经同步到配置了,但系统中却没有TEMP的数据文件。

#db&dbdg
SQL> show parameter standby_fileNAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
standby_file_management 	     string	 AUTO

standby_file_management也是自动的,主库创建文件的操作应该可以同步到备库,并成功执行的。然而事实并非如此。

通过查阅资料,需要手动在备库中添加TEMP数据文件

#dbdg
SQL> select name,db_unique_name,open_mode from v$database;NAME	  DB_UNIQUE_NAME		 OPEN_MODE
--------- ------------------------------ --------------------
DB	  dbdg			 READ ONLY WITH APPLYSQL> alter tablespace temp01 add  tempfile '/oradata/dbdg/temp/temp_01.dbf' size 50m autoextend on  next 50m maxsize 32767m;
alter tablespace temp01 add  tempfile '/oradata/dbdg/temp/temp_01.dbf' size 50m autoextend on  next 50m maxsize 32767m
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
ORA-06512: at line 62

返回错误,数据库为只读状态。

苦查资料无果的情况下,无意间查看了一下操作系统目录。发现备库的/oradata/dbdg/temp中竟然出现了temp_01.dbf的文件。

#dbdg
SQL> select file_name,tablespace_name,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files;FILE_NAME							   TABLESPACE_NAME		  AUT	  MAX_MB
------------------------------------------------------------------ ------------------------------ --- ----------
/oradata/dbdg/temp/temp_01.dbf				   TEMP01			  YES	   32767
/oradata/dbdg/tmp01.dbf					   TMP				  YES 32767.9844

备库中的dba_temp_files也增加了一条数据记录,新建临时表空间的文件信息。此时测试了备库查询也不在报无法找到临时表空间的错误了。

总结

tempfile和datafile、redologfile不同,tempfile和temp tablespace在DG环境下同步效果不好。在这次事件中甚至出现了没有文件对应的临时表空间。而在备库以read only with apply模式打开后,执行文件添加命令。虽然报错,但文件系统中确实出现了对应的tempfile。其中原理还需进一步研究。

  相关解决方案