1. 程式人生 > >數據庫session立即生效(64---8192) SCOPE參數

數據庫session立即生效(64---8192) SCOPE參數

初始 fine ews 重要 rop serve 不容易 而且 self

SCOPE=MEMORY|SPFILE|BOTH 指示了修改參數時的“作用域”:

SCOPE=MEMORY :只在實例中修改,重啟數據庫後此次修改失效。
SCOPE=SPFILE :只修改SPFILE中的值,重啟數據庫後這個修改才會生效。
SCOPE=BOTH :在內存和SPFILE中都會完成參數修改。這個參數修改在當前實例中生效,下次以SPFILE啟動數據庫時也會生效。

數據庫參數文件分為二類:

1.初始參數文件:pfile(initialization parameter file)
2.服務器參數文件:spfile(server-side parameter file)

主要的區別是:
1.pfile是文本文件,spfile是二進制文件
2.pfile可以通過文本編輯器修改,spfile主要是通過alter system set parameter=value [scope=memory|spfile|both]修改

oracle啟動時,讀取參數文件的順序是:
1.spfile$ORACLE_SID.ORA(創建數據庫時創建的spfile)
2.spfile.ora(oracle缺省spfile文件)
3.init$ORACLE_SID.ora(創建數據庫時創建的pfile)
4.init.ora(oracle缺省pfile文件)
oracle會按順序讀出這些參數文件,如果在1沒有找到就去找2,直到找到。

和參數文件相關常用SQL如下:

1.查看當前使用的spfile和pfile的位置:show parameter spfile/show parameter pfile

2.查看參數文件的具體設置:show parameters

3.從spfile獲取pfile:

create pfile=‘pfilesid.ora‘ from spfile

create pfile=‘pfilesid.ora‘ from spfile=‘/$ORACLE_HOME/dbs/spfile.ora‘

4.修改參數

alter system set parameter=value [scope=memory|spfile|both]

1.修改後當前實例起作用,重啟數據庫不起作用:scope=memory
2.修改後當前實例不起作用,下次重啟數據庫才起作用:scope=spfile
3.修改後當前實例起作用,下次重啟數據庫也起作用:scope=both
Notice:命令alter system set parameter=value在沒有加scope選項時,默認值是什麽呢?多數朋友可能不加思索就會回答both這答案,實際的情況是,當oracle在以spfile參數啟動時,默認值是both,而以pfile啟動時,默認值是memory,也就是只修改當前值。所以如果不能確定啟動的參數文件,可以用show parameter spfile查看。

5.指定初始參數文件啟動數據庫:startup pfile=‘/$ORACLE_HOME/dbs/init$ORACLE_SID.ora‘
不能以指定服務器參數文件spfile來啟動數據庫,可以先將spfile轉換成pfile,再用這個命令來達到目的。

6.查看系統是以pfile還是spfile啟動:show parameter spfile。如果是null值,就是pfile啟動的。

2.參數文件的動作原理
oracle實例在啟動時,會去讀取參數文件中的配置,這個過程是這樣的:

數據庫的startup命令中可以指定以哪個pfile來啟動,但是請註意,只能指定pfile,不 能指定spfile。

當使用不帶pfile 子句的startup 命令時,Oracle 將從平臺指定的默認位置上的服務器 參數文件(spfile) 中讀取初始化參數。Oracle查找spfile或者init.ora的順序是:在平臺指定的默認位置上,Oracle首先查找名為spfile$ORACLE_SID.ora的文件,如果沒有就查找spfile.ora文件,還沒有的話,就找init$ORACLE_SID.ora文件。

在$ORACLE_BASE\admin\db_name\spfile下,你可以看到一個類似這樣init.ora.1 92003215317]名字的文件,這就是初始化參數文件,只是跟上了時間戳。對於Oracle920 ,缺省的就使用spfile啟動,但是這個spfile不是憑空而來,而是根據這個文件創建而來 ,你可以去掉這個長後綴,就是標準的pfile文件了。

數據庫中的同義詞(SYNONYM)

建立:create 【public】 synonym 同義詞名稱(一般可以與表名不同,這樣不容易混淆) for AA.table_name;--在當前用戶下建立一個同義詞(去同義“AA”中的表:table_name,public的是可選參數,本人建議盡量建立公用的 同義詞)
刪除:DROP 【public】 SYNONYM 同義詞名稱; ---------此處特別註意 關鍵字 public 的存在--------;
查看:select * from user_synonyms sy where sy.synonym_name =‘A_CODEMAPPING‘; --查看私有的同義詞,自己看到自己創建的;
select * from all_synonyms sy where sy.synonym_name =‘A_CODEMAPPING‘; --可以查看到 某某創建的 公共的 同義詞
參看信息中包括,同義詞擁有者,表擁有者,是否public的等信息;
1》同義詞 分為私有的 和公共的兩種;
私有的:
也只有 本用戶使用,包括別的用戶查不到 用戶 “BB” 有這個同義詞(這點很重喲奧);
共有的:
可以被其它的任何用戶使用, 也可以被人家查到,看到這個同義詞,當然最重要的也可以被別的用戶刪除;

同義詞相當於模式對象的別名,起著連結數據庫模式對象和應用程序的作用,假如模式對象需要更換,則不用修改應用程序而直接修改同義詞就可以了

建立一個同義詞可以排除一個對象名字的限制.
如果你的數據庫有多個用戶,USER_A要訪問USER_B的TABLE1,只能使用USER_B.TABLE1
建一個同義詞abc指向USER_B.TABLE1,那你就可以select * from abc了,而且public的同義詞會直接出現在所有用戶的面前,開發不就方便多了

創建同義詞

語法:

CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.] synonym_name FOR [schema.] object_name [@dblink];

語法說明:
OR REPLACE: 在不使用DROP的前提下容許你重新創建(如果同義詞已經存在)。

PUBLIC: 所創建的同義詞是全局的同義詞,所有數據庫用戶都可以使用。

schema: 要創建同義詞的對象所在的schema,如果省略,則默認的應用對象在當前schema下。

object_name: 要創建同義詞的對象,它可以是以下幾種類型:

TABLE
VIEW
SEQUENCE
STORED PROCEDURE
FUNCTION
PACKAGE
MATERIALIZED VIEW
JAVA CLASS SCHEMA OBJECT
USER-DEFINED OBJECT
SYNONYM


示例:

CREATE PUBLIC SYNONYM suppliers FOR app.suppliers;
示例中創建的同義詞名為suppliers,這樣,其他schema下的用戶可以使用該同義詞來使用app下的suppliers表而不必加上app。例如:
SELECT *
FROM suppliers;

刪除同義詞
語法

DROP [PUBLIC] SYNONYM [schema.] synonym_name [FORCE];
說明:
PUBLIC: 容許刪除PUBLIC同義詞, 如果使用了PUBLIC關鍵字,則可以省略schema。

FORCE:用來強制刪除同義詞,即使它在數據庫中有其它的依賴。

示例:

DROP PUBLIC SYNONYM suppliers;

數據庫session立即生效(64---8192) SCOPE參數