数据库session立即生效(64---8192) SCOPE参数

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;

posted @ 2019-04-20 15:15  konglingbin  阅读(653)  评论(0编辑  收藏  举报