current_schema参数的用途,current_schema用途
用户A包含表TBL,如果用户A将TBL的访问权限给用户B(grant select any table to B),则在用户B中要想引用用户A的表,不使用同义词,则需要用select * from A.TBL;
之所以这里需要使用A.TBL的格式,是因为TBL表属于用户A的schema,做个比喻,schema(译文方案)好比一个容器,存放的是一系列数据库对象,从官方文档的介绍说明:
“A schema is a collection of database objects. A schema is owned by a database user and has the same name as that user. Schema objects are the logical structures that directly refer to the database’s data. Schema objects include structures like tables, views, and indexes. (There is no relationship between a tablespace and a schema. Objects in the same schema can be in different tablespaces, and a tablespace can hold objects from different schemas.)”
从中可以总结几点:
1. 一个schema由一个数据库用户拥有,并且具有和那个用户相同的名字。
2. schema对象是一种逻辑结构。
3. 表空间和schema之间没有关系。
4. 同一个schema中的对象可以存在于不同的表空间,一个表空间可以拥有多个schema的对象。
再借鉴一个比喻,schema好比一个房间,房间中有各种各样的对象,例如桌子、椅子,房间的主人就是user/owner,他默认拥有这个房间内所有对象的增搬拆权限,但同样只有他可以让另外一个人进入房间,这就是授权。
有点扯远了,上面说到用户B要引用用户A的表,不想使用“用户A.表”的形式,其实除了使用同义词外,还可以使用current_schema来改变当前用户使用的schema。
语法:alter session set current_schema=名称;
尽管当前模式转换了,但是否有读写权限取决于用户是否被授权了,换句话说,这个语句并不能决定改变了shcema,这个用户就有新的schema中对象的读写权限。
实验:
1.
用户A授权用户B:
grant
select any table to B;
2.
修改用户A当前session的shcema为A:
alter session set current_schema=A;
3. 查看当前session的schema:
select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;
>A
show user
USER
is "TEST_PRIV"
4. 查看A的TBL:
select * from TBL;
一切OK。
5. 切换当前session的schema为sys:
alter session set current_schema=sys;
select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA
from dual;
>SYS
6. 查看dba_tables:
select * from dba_tables;
ERROR at line 1:
ORA-00942: table or view does not exist
说明用户B无权访问SYS对象。
总结:
其实之所以需要current_schema,主要是申请一些只读账户时,通常是用grant授予用户访问权限,但访问时如果没有同义词则需要是用“schema(/user).表”的方式,每次新建表都创建同义词的方法也行,但毕竟很是不方便,是用current_schema就很简单了。
Oracle提供了各种通用或细节的技术手段,目标还是为了方便用户的使用,因此我觉得当有个问题感觉用起来不爽的时候,可以找下是否有workround,作为一个好的软件,应该会在你想到之前就已经考虑了这个问题了:)
CPU参数一级缓存和二级缓存的作用!!
一级缓存:
高速缓存分为一级缓存(即L1 Cache)和二级缓存(即L2Cache)。CPU在运行时首先从一级缓存读取数据,然后从二级缓存读取数据,然后从内存和虚拟内存读取数据,因此高速缓存的容量和速度直接影响到CPU的工作性能。
那么,二级缓存的作用又是什么呢?简单地说,二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的数据。同样道理,三级缓存和内存可以看作是二级缓存的缓冲器,它们的容量递增,但单位制造成本却递减。需要注意的是,无论是二级缓存、三级缓存还是内存都不能存储处理器操作的原始指令,这些指令只能存储在CPU的一级指令缓存中,而余下的二级缓存、三级缓存和内存仅用于存储CPU所需数据。
AMD一级数据缓存设计
AMD采用的一级缓存设计属于传统的“实数据读写缓存”设计。基于该架构的一级数据缓存主要用于存储CPU最先读取的数据;而更多的读取数据则分别存储在二级缓存和系统内存当中。做个简单的假设,假如处理器需要读取“AMD ATHLON 64 3000+ IS GOOD”这一串数据(不记空格),那么首先要被读取的“AMDATHL”将被存储在一级数据缓存中,而余下的“ON643000+ISGOOD”则被分别存储在二级缓存和系统内存当中(如下图所示)。
需要注意的是,以上假设只是对AMD处理器一级数据缓存的一个抽象描述,一级数据缓存和二级缓存所能存储的数据长度完全由缓存容量的大小决定,而绝非以上假设中的几个字节。“实数据读写缓存”的优点是数据读取直接快速,但这也需要一级数据缓存具有一定的容量,增加了处理器的制造难度(一级数据缓存的单位制造成本较二级缓存高)。
二、Intel一级数据缓存设计
自P4时代开始,Intel开始采用全新的“数据代码指令追踪缓存”设计。基于这种架构的一级数据缓存不再存储实际的数据,而是存储这些数据在二级缓存中的指令代码(即数据在二级缓存中存储的起始地址)。假设处理器需要读取“INTEL P4 IS GOOD”这一串数据(不记空格),那么所有数据将被存储在二级缓存中,而一级数据代码指令追踪缓存需要存储的仅仅是上述数据的起始地址()。
参考资料:diybbs.zol.com.cn/1/86_132104.html
一、 用途
交流异步电动机在额定电压下起动时,初始起动电流是很大的,往往超过额定电流的许多倍(一般是5~7倍),为了减少起动电流,不使对电网造成影响,通常用降低电压的方法来起动交流异步电动机,常用的降压方法是采用电抗器或自藕变压器,交流电动机的起动过程很短(一般数秒钟至二分钟),起动后就将降压起动用的电抗器或自藕变压器切除。该产品是根据高压异步电动机的启动特性设计的,匹配电动机功率220~1400kW。
二、 结构特点
1.QKSG型干式铁芯起动电抗器的铁芯采用优质进口硅钢片,芯柱经多个气隙分成均匀小段,气隙采用环氧板作为隔绝,并采用高温高强粘接剂,以保证气隙在电抗器运行时不发生变化。
2.铁芯端面采用优质硅钢片端面胶,使硅钢片牢固地结合在一起,大大减小了运行中的噪音,并具有较好的防腐蚀性。
3.线圈绕包式结构,线圈主绝缘采用玻璃纤维浸渍环氧树脂,热烘固化后在真空下浸以耐高温绝缘漆,该线圈不但绝缘性能好,而且机械强度高,电抗器能耐受电机启动时的大电流冲击和冷热冲击而不开裂。
三、 使用条件
1.海拔高度不超过1000米。
2运行环境温度为-25℃~+45℃。
3.安装于户内无剧烈震动,无任何有害气体或粉粉尘的场合,无易燃易爆物品。
4.当起动时间满2分钟(一次或数次之和),应冷却6小时才可再次起动。
四、 性能参数
1.干式起动电抗器比传统油浸电抗器、空心电抗器体积要小,具有重量轻、占空间小,结构简单、安装方便等特点。
2.耐温等级达到H级(180℃);正常运行时,干式铁芯起动电抗器的铁芯温升不大于85K,线圈温升不大于95K。
3.干式铁芯起动电抗器损耗低于油浸电抗器的损耗。
4.干式铁芯起动电抗器的噪声不大于国家标准(50dB)