Oracle對於啟動引數檢查不嚴格

yangtingkun發表於2011-02-21

偶然發現Oracle對於pfile啟動引數的檢查並不嚴格。

 

 

比如修改引數檔案如下:

[oracle@yans1 ~]$ vi initprimary.ora

primary.__db_cache_size=1644167168
primary.__java_pool_size=16777216
primary.__large_pool_size=16777216
.
.
.
*.sga_target=2147483648
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1
*.undo_management='AUTO'
*.user_dump_dest='/opt/ora10g/admin/primary/udump'

注意,在undo_tablespace引數的值UNDOTBS1後面缺少了一個引號,如果利用這個PFILE來建立SPFILEOracle會檢查出錯誤:

SQL> create spfile from pfile='/home/oracle/initprimary.ora';
create spfile from pfile='/home/oracle/initprimary.ora'
*
ERROR at line 1:
ORA-01078: failure in processing system parameters
LRM-00111: no closing quote for value 'AUTO'
'

但是如果嘗試利用這個初始化引數啟動到nomountmount狀態,Oracle並不會對引數的正確性進行檢查:

SQL> startup mount pfile=initprimary.ora
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size                  2074112 bytes
Variable Size             486541824 bytes
Database Buffers         1644167168 bytes
Redo Buffers               14700544 bytes
Database mounted.
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      MANUAL
undo_retention                       integer     900
undo_tablespace                      string      AUTO'

可以看到,UNDO_TABLESPACE的值變成了AUOT’,而UNDO_MANAGEMENT的值則丟失,變成了系統的預設值。

這種情況資料庫還可以開啟:

SQL> alter database open;

Database altered.

SQL> select name from v$datafile;

NAME
----------------------------------------------------------------------------------------
/data/oradata/primary/system01.dbf
/data/oradata/primary/undotbs01.dbf
/data/oradata/primary/sysaux01.dbf
/data/oradata/primary/users01.dbf
/data/oradata/primary/test01.dbf
/data/oradata/primary/new01.dbf
/data/oradata/primary/new02.dbf

7 rows selected.

當然只要是非SYS使用者執行任何的需要回滾段的操作,都會導致錯誤:

SQL> conn test/test
Connected.

SQL> create table t_undo (id number) tablespace new;
create table t_undo (id number) tablespace new
*
ERROR at line 1:
ORA-01552: cannot use system rollback segment for non-system tablespace 'NEW'

看來Oracle對於啟動引數的檢查還存在漏洞。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-687650/,如需轉載,請註明出處,否則將追究法律責任。

相關文章