【使用场景】系统上线前准备工作。一般迁移数据的时候经常使用导入dump文件的方法。由于是一个一个用户导入进去的,所以在导入过程中会报权限问题的错误(可以忽略),还必须在生产库授权系统才能正常工作。使用下面的脚本可以得到授权语句。
在UAT环境执行select语句,在生产环境执行grant语句,根据实际用户做相应的修改。
注意:查询的用户需要有查看dba_开头数据字典的权限,否则报出表或者视图不存在。
SELECT 'GRANT ' || T1.GRANTED_ROLE || ' TO ' || T1.GRANTEE || ';' AS TEXT
FROM DBA_ROLE_PRIVS T1
WHERE T1.GRANTEE IN ('ABOQ',
'AMLM',
'BOP',
'CREDIT',
'DATACORE',
'MDR2',
'METABASE',
'METABASE_CREDIT',
'REPORT',
'UPRR',
'WORK')
UNION ALL
SELECT 'GRANT ' || T2.PRIVILEGE || ' TO ' || T2.GRANTEE || ';' AS TEXT
FROM DBA_SYS_PRIVS T2
WHERE T2.GRANTEE IN ('ABOQ',
'AMLM',
'BOP',
'CREDIT',
'DATACORE',
'MDR2',
'METABASE',
'METABASE_CREDIT',
'REPORT',
'UPRR',
'WORK')
UNION ALL
SELECT 'GRANT ' || T3.PRIVILEGE || ' ON ' || T3.OWNER || '.' ||
T3.TABLE_NAME || ' TO ' || T3.GRANTEE || ';' AS TEXT
FROM DBA_TAB_PRIVS T3
WHERE T3.GRANTEE IN ('ABOQ',
'AMLM',
'BOP',
'CREDIT',
'DATACORE',
'MDR2',
'METABASE',
'METABASE_CREDIT',
'REPORT',
'UPRR',
'WORK');
这样写比较死板,使用‘&’替换变量也很不好用,可以建立一个存储过程。
create or replace procedure user_priv(username in varchar2) as
cursor v_cur is
SELECT 'GRANT ' || T1.GRANTED_ROLE || ' TO ' || T1.GRANTEE || ';' AS TEXT
FROM DBA_ROLE_PRIVS T1
where T1.grantee = upper(username)
union all
SELECT 'GRANT ' || T2.PRIVILEGE || ' TO ' || T2.GRANTEE || ';' AS TEXT
FROM DBA_SYS_PRIVS T2
WHERE T2.GRANTEE = upper(username)
union all
SELECT 'GRANT ' || T3.PRIVILEGE || ' ON ' || T3.OWNER || '.' ||
T3.TABLE_NAME || ' TO ' || T3.GRANTEE || ';' AS TEXT
FROM DBA_TAB_PRIVS T3
where T3.grantee = upper(username);
/*select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee=upper(username) );如果有必要可-以收集角色中的权限*/
begin
for v_t in v_cur loop
begin
dbms_output.put_line(v_t.TEXT);
end;
end loop;
end;
最后直接运行procedure即可 execute user_priv (username => 'hr');
如果遇到输出文本问题请参考:http://blog.csdn.net/u010033674/article/details/8744629
http://www.cnblogs.com/AlbertCQY/archive/2013/03/31/2992497.html
本文链接
1,登录后默认自动选中My Objects
默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables目录,正常情况都需要Wait几秒钟,而选择My Objects后响应速率则是以毫秒计算的。
Tools菜单 --> Object Brower Filters,会打开Brower Folders的定单窗口,把“My Objects”设为默认即可。
Tools菜单--> Object Brower Folders,中把你经常点的几个目录(比如:Tables Views Seq Functions Procedures)移得靠上一点,并加上颜色区分,这样你的平均寻表时间会大大缩短,试试看。
/*设置方法:Tools菜单--Brower Folders,会打开Brower Folders的定单窗口,把“My Objects”移到最顶端即可。
同理,可以把你经常点的几个目录(比如:tables Views Seq Functions Procedures)移得靠上一点,并加上颜色区分,这样你的平均寻表时间会大大缩短,试试看。*/
2,记住密码
这是个有争议的功能,因为记住密码会给带来数据安全的问题。
但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。
位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password
3,双击即显示表数据
PLSQL Developer里鼠标双击表或者视图时的默认响应实在让我感到失望,因为我最关心的是表结构和数据,但是双击后这两件事情都没有发生,也许默认响应是高手们需要的,但对我来说查看数据和表结构是最主要的,其他的我不关心。
不过好的是这是可以设置的,你可以给鼠标双击和拖放绑定需要的事件,比如:双击编辑数据,拖放显示表结构,Yeah!
位置:Preferences--User Interface,在右侧,为不同的Object type绑定双击和拖放操作。
4,SQL语句字符全部大写
自认为这是个好习惯,信息系统的核心是数据库,系统出问题时最先要查的就是SQL语句,怎样在浩瀚的日志中快速找到那条SQL语句是件比较痛苦的事情。
SQL语句全部大写并不能彻底解决这一问题,但在一堆代码中间找一行全部大写的字符相对容易些,你的眼睛会感谢你。
设置位置在Editor里。同时我觉得等宽字符可以减少程序的出错率,所以我所有的工具清一色用Courier New,如果某个IDE不支持这个字体,我基本上会选择放弃。哈,偶系个满挑惕的家伙。
5,特殊Copy
在SQL Window里写好的SQL语句通常需要放到Java或者别的语言内,就需要转成字符串并上加上相应的连字符,这一个事不需要再重复做了,在写好的SQL上点右键,使用特殊Copy即OK!
6,自定义快捷键
PLSQL Developer里预留了很多键让用户自定义,这是件很Hight的事情。不像霸道的Word,基本上所有的键都已预定义了功能,修改起来很是头疼。
通常情况下,打开PLSQL Developer后,最经常干的事就是打开SQL Window和Command Window,就给这两个操作定义了快捷键,ALT+S和ALT+ C,这样拿鼠标点三下的事情只需要按一下键。
7,其他
快速清空表,TRUNCATE TABLE,右键里可以找到。
没搞清楚的两个功能:Analyze、VALID
7、SQL Window中根据光标位置自动选择语句
设置方法:Preferences --> Window Types --> SQL Window,将AutoSelect statement选中即可。注意,每条语句后面要加分号。
补充:
8、启动PLSQL Developer,window list菜单自动调出
需要两步设置,首先要保存桌面设置,然后勾上Window list选项,具体操作如下:
a、在菜单项的Tools下的Preference选项中的User Interface中选择Option,在右边对于的Autosave desktop中把前面的复选框勾选上。
b、在菜单项的Tools下的Window list选项勾上。
9、格式化SQL(format)
当大家拿到一段较长的SQL语句时,想快速查看其中的逻辑,可以放在这个工具里,进行格式化,语句的逻辑也就一目了然了
10、数据库自动检测连接情况
因为数据库每过一段时间不操作,就会自动断开,然后需要自己手动连接,因为网络原因,总会卡在那里。工具提供了检测连接的功能,可以自动连接。
具体设置在Tools-Preferences-Check connection,Check connection前面勾选即可。
11、常用的快捷键
其实这些在第6项中都提到,下面是我的习惯设置:
ctrl+tab 切换windows窗口(或者alt+left/right)
alt + n 创建新sql window
alt + c 关闭当前窗口
alt + f 格式化sql
再次补充:
1、右键菜单
在PL/SQL Developer(下面简称PLD)中的每一个文本编辑窗口,如SQL Window,Command Window和Porgram Window,右键点击某个对象名称,会弹出一个包含操作对象命令的菜单,我们这里称之为右键菜单。
对象类型可以是表,视图,同义词,存储过程和函数等。根据对象类型的不同,弹出的菜单也有区别。表和视图有View, Edit, Rename, Drop, Query data 和Edit data等功能。View和Edit分别是查看和修改表的结构信息,如字段,主键,索引和约束等。Query data相当于新打开一个窗口,并执行select * from 表。Edit data相当于新打开一个窗口,并执行select * from 表 for update。存储过程和函数有Test功能,选中后可以进入调试状态。有时由于PLD识别错误,右键点击对象并不能出来正确的菜单,可以在对象所在的DDL或DML语句的前面,加上分号,这样PLD就能正确的判断出对象的类型
2、Select for Update
有时我们需要把一些数据导入数据库中,如果用UE拼Insert语句,会比较麻烦,而且操作性不强。PLD的SQL Window可以查询,新增,修改和删除表的内容。查询自不必说,而新增,删除和修改,只需在select语句后加入for update,对表进行行级锁定,然后点击窗口的锁型图标,即可进入编辑状态。下面介绍一下如何从Excel中提取文本插入到数据库中我们的Excel文件中有三列:在数据库中建立临时表:create table t1 (cino varchar2(100), contno varchar2(100), loanno varchar2(100))然后在SQL Window中输入select t1 for update,并点击锁型鼠标,进入编辑状态:用鼠标点击第一行的输入窗口,这时PLD会死锁几秒钟,然后可以见到光标在第一行的输入框中闪动,用鼠标把CINO, CONTNO, LOANNO选中:进入Excel中,把需要插入数据库的内容选中,然后切换到PLD,按Ctrl + V:点击√,然后再点击Commit按钮,则数据提交到表t1中,执行select * from t1可以看到内容:
3、PL/SQL Beautifier(PL/SQL 美化器)
PLD 6以上版本有对DML代码格式化的功能。在SQL Window或Program Window中选中部分代码(如果不选则对整个窗口的代码操作),在菜单中选Edit -> PL/SQL Beautifier,得到格式化的代码。对于非法的DML语句或DDL语句,PLD将会在下方状态栏提示PL/SQL Beautifier could not parse text。在缺省的状态下,PLD会把DML语句的每一个字段都排在单独的一行,这样不方便查看。在菜单中选Edit à PL/SQL Beautifier Options,进入Preferences窗口,选择Edit,进入配置文件编辑界面:在标签栏选DML,在窗口中部的Select, Insert和Update组框中把Fit选中,然后点击Save,把配置文件保存到PLD的安装目录下,点击Close关闭。在Rules file中输入配置文件所在位置,点击OK,完成配置文件切换。这时再对代码进行格式化,就可以使每一个字段尽可能的在一行上了。
4、TNS Names
菜单Help à Support Info à TNS Names,可以查看Oracle的tnsnames.ora。
5、Copy to Excel
在SQL Window中执行Select语句,在结果出来以后,右键点击下面的数据区,选择Copy to Excel,可以把数据区的记录原样拷贝到Excel中。但有两点需要注意:一,field中不能以=开始,否则Excel会误认为是函数;二,数字不要超过17位,否则后面的位数将会置为0,但可以通过在数字前加‘来使Excel认为该field是文本,同时对于数据库中Numbe类型的字段,最好用to_char输出,不然可能会显示不正常
6、PL/SQL Developer记住登陆密码
在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码;
设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History , “Store history”是默认勾选的,勾上“Store with password” 即可,重新登录在输入一次密码则记住了。(我的好像不行哦)
7、执行单条SQL语句
在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句;
设置方法:PL/SQL Developer 7.1.2 -->tools->Preferences-->Window types ,勾上“AutoSelect Statement” 即可。
7、格式化SQL语句
在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句太长或太乱,希望能用比较通用的写法格式话一下,这样看起来会好看
数据库密码过期后,业务进程一旦重启会提示连接失败。