在Oracle使用过程中经常会用到查看当前或者指定用户对哪些表拥有权限,一下几种方法可以实现查看当前或者指定用户对哪些表拥有权限。
方法1:
根据指定用户名获得对应用户所拥有权限的表
SQL> SELECT table_name, owner FROM all_tables WHERE owner = 'SCOTT'; TABLE_NAME OWNER ------------------------------ ------------------------------ DEPT SCOTT EMP SCOTT BONUS SCOTT SALGRADE SCOTT
方法2:
通过tab视图获得当前登录用户所有表和视图,通过tabletype过滤获得所有表
SQL> SELECT * FROM tab WHERE tabtype = 'TABLE'; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- DEPT TABLE EMP TABLE BONUS TABLE SALGRADE TABLE
方法3:
根据user_tables表获得当前用户拥有所有表
SQL> SELECT table_name FROM user_tables; TABLE_NAME ------------------------------ DEPT EMP BONUS SALGRADE
方法4:
根据sys表空间下all_object表获得指定用户指定类型对象(表)
SQL> SELECT object_name FROM sys.all_objects WHERE owner='SCOTT' AND object_type='TABLE'; OBJECT_NAME ------------------------------ DEPT EMP BONUS SALGRADE
以上4中方式可以根据实际情况随意使用,已达到使用目的。
最近在学习Mongo,向通过官方文档来获得第一手资料,无奈自己的英语水比较跛脚,但是总是要迈出第一步,所以现在尝试翻译在这里,如果有不好的地方,还望各位看官拍砖,废话少说,开始:
官方文档地址:http://docs.mongodb.org/manual/tutorial/getting-started/
1.连接到数据库
通过Mongo命令连接到数据库,然后可以通过mongo shell来在数据库的实例中选择一个逻辑数据库,也可以通过mongo shell获得帮助信息;
1.1.在系统提示符下(命令行),通过运行mongo命令,如下:
mongo
默认情况下,mongo命令会把连接建立在localhost接口,并监听在27017端口。如果要连接到不同的数据库
可以使用 --port和--host操作!
1.2.选择一个数据库
在启动mongl sell之后,会话会默认连接test数据库,任何时候都可以通过db命令来返回当前的数据库:
db
db命令返回当前的数据库,
1.1.1 在mongo shell界面,通过如下命令显示mongo中的所有数据库:
show dbs;
1.1.2 通过以下命令来切换到一个新建的名为mydb的数据库中:
use mydb;
1.1.3 通过db命令来确认当前的数据库为mydb,操作如下:
db;
注意:如果你依然使用show dbs命令,mongo db不会返回mydb的名称,因为MongoDB直到往当前数据库中插入数据时才会
建立该数据库,(这一点类似于Android中SQLite数据库,只有getReadableDatabase()方法调用时才会新建数据库)
注意:在2.3.1的版本中,show databases;同样会返回一个数据库列表!
1.3.显示mongo 帮助
你可以再任何时候通过如下命令来调用mongo shell得到帮助信息:
help;
此外你可以在其他方法比如一些JavaScript函数,cursor对象后面添加.help()
例如:db.help(),db.collection.help()等,他们会返回具体的帮助信息!
2.创建一个聚集并插入文档
在这里,你会将文档插入到mydb数据库中一个新建的名为things的聚集中。
MongoDB会在第一次使用数据库的时候默认创建数据库和聚集,你不必要再第一次插入数据之前进行单独的创建
数据库和聚集。此外,因为MongoDB采用动态模式(dynamic schemas),所以你不必在将文档插入到聚集之前特意指定他们的结构!
插入一个单独的文档
2.1 在命令提示符下,通过以下命令确认当前context是mydb:
db
2.2 如果在刚才的操作中mongo没有返回mydb,通过如下命令将context设置为mydb:
use mydb
2.3 通过以下的JavaScript顺序语句操作,创建两个名为j,k的文档:
j = {name : "mongo"}
k = {x : 3}
2.4 通过以下操作序列将文档j,k插入到聚集things中:
db.things.insert(j)
db.things.insert(k)
当你插入第一个文档的时候,mongod文件会创建mydb数据库和things聚集!
2.5 通过以下操作来确认things已经被创建:
show collections
在这里,mongo shell会返回当前数据库(mydb)下的聚集列表,当前只有一个名叫things的聚集。
每个mongo数据库都有会以个名为system.indexes的聚集!
2.6 通过在things聚集中进行查询操作来确定刚才插入的两条文档已经存在。如下语句所示使用find()函数:
db.things.find()
以上操作会返回如下结果,其中ObjectId是唯一的:
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
所有的MongoDB文档都会有一个唯一的_id字段值,这项操作不需要明确的指定_id字段的值,
MongoDB会自动在文档插入之前生成一个唯一的ObjectId值来填充这个_id字段!
3.通过一个For循环插入多条文档
3.1 命令提示符下,通过下面的For循环向things聚集中添加多条文档:
for(var i=1; i<= 20; i++) db.things.insert( { x : 4 , j : i } )
3.2 通过如下命令查询聚集中的文档:
db.things.find()
这里mongo shell会显示聚集中的前20条文档,每个文档的ObjectId都是唯一的:
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }
{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85a"), "x" : 4, "j" : 5 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85b"), "x" : 4, "j" : 6 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85c"), "x" : 4, "j" : 7 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85d"), "x" : 4, "j" : 8 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85f"), "x" : 4, "j" : 10 }
{ "_id" : ObjectId("4c220a42f3924d31102bd860"), "x" : 4, "j" : 11 }
{ "_id" : ObjectId("4c220a42f3924d31102bd861"), "x" : 4, "j" : 12 }
{ "_id" : ObjectId("4c220a42f3924d31102bd862"), "x" : 4, "j" : 13 }
{ "_id" : ObjectId("4c220a42f3924d31102bd863"), "x" : 4, "j" : 14 }
{ "_id" : ObjectId("4c220a42f3924d31102bd864"), "x" : 4, "j" : 15 }
{ "_id" : ObjectId("4c220a42f3924d31102bd865"), "x" : 4, "j" : 16 }
{ "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }
{ "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }
3.2.1 find()函数会返回一个游标(cursor),通过在mongo shell中使用it命令来
返
在Solaris上跑Oracle已经10多年了。OS从2.6熬到10,DB从8.1熬到10.2。别说,这种组合还真给力。这么多年,就是没出过啥问题。
3年前的2010年,硬件更新换代。行政上仗着预算富裕,硬是否定了技术人员的升级方案,购买了当时比较高档T5220。
T5220服务器使用UltraSPARC T2 CPU。该CPU的时钟速度并不高,只有1.2GHz,但是有4个核,而且每个核上可以挂接8个线程,从而构成了32个虚拟CPU。
但是,在此服务器上跑Oracle 10g Standard Edition (10g SE)时,Oracle的每个过程最多只能占有1个(虚拟)CPU的处理能力,也就是最大能使用整个CPU的1/32的能力。
而以前的V240服务器,虽然只有2个物理CPU,但每个过程可独享1个CPU,这就是说最大能使用整个CPU的1/2的能力。
在月末处理时,V240的CPU使用率在1号前后的大约1周时间经常达到80%以上,有时候甚至达到100%。
但是,自从移到T5220后,CPU的最大使用率从来都在18%左右。用户也抱怨这款贵且慢的服务器。
对于多线程,并发处理等,T5220可能比较好,对于处理相对集中的公司业务,T5220不是个好的选择。
为了给行政方面证明以上结论,借用VM服务器的一角,对T5220和X86,就现行的Oracle系统做了一番性能比较。
1. 调查对象服务器的构成
T5220
X86
CPU
UltraSPARC T2
Virtual X86
速度
1.2G
2.5G
个数
4芯/32线程
2
Memory
16G
16G