重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
第一步:创建脚本文件。
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的分宜网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
在Oracle数据库重,创建脚本文件的方式很多。如可以直接在记事本中创建脚本文件,也可以通过SQL*Plus工具直接创建。不过,笔者的意见是,在SQL*Plus中直接创建脚本文件的话,比较麻烦。这主要是因为在SQL*Plus工具中,命令编辑能力非常有效。如不能够使用键盘上的箭头键定位输入的位置,不能够使用DEL键删除输入的内容等等。而且阅读起来也比较困难。
第二步:编辑脚本文件。
在我们使用脚本文件的时候,往往需要根据实际情况,对其进行稍微的调整。对脚本文件进行编辑,也有两种方式。一是通过SQL*Plus工具,二是第三方独立的脚本编辑软件。
对于一些调整不大的脚本文件,我们可以直接利用SQL*Plus工具打开,然后进行编辑。但是,对于需要进行大量修改的脚本文件,则笔者建议数据库管理员采用第三方独立的脚本编辑软件。原因很简单,就如同上面所说的那样,SQL*Plus工具脚本命令编辑功能非常的薄弱。若采用这个工具对现成的脚本语句进行编辑的话,则可能工作量还是重新编写一个来的轻。所以,数据库管理员要根据实际的情况,选择合适的脚本编辑工具。
另外,在编辑的过程中,要注意语法的正确性。特别是要注意,不能够改变其固有的格式。如不要不小心删除了最后的“/”符号结束。
第三步:运行脚本文件。
脚本建立好之后,如何运行脚本呢?在Oracle系统中也提供了许多方式。数据库管理员可以根据自己的使用习惯来进行选择。
一是通过Start语句来调用脚本文件。其语法是Start Filemame[相关参数]。在运行这个命令的时候,需要注意几个问题。
1、脚本文件的扩展名问题。上面在建立脚本文件的时候,笔者就跳掉过,为了在SQL*Plus等工具中可以直接调用这个脚本文件,最好能够把扩展名改为Oracle数据库能够接受的扩展名。默认情况下,扩展名设置为SQL即可。
2、脚本文件的路径问题。若用户在利用Start调用脚本文件的时候,若没有清楚的指名保存路径的话,则SQL*Plus工具会现在当前的目录中进行查找;若没有的话,则会根据环境变量中确定的目录中进行查找。而一般情况下,我们把脚本文件都会独立存放。所以,在使用Start命令执行脚本文件的时候,最好能够注明脚本文件的绝对路径名。防止语句执行错误。
另外@命令也可以起到跟Start命令一样的作用。只不过,前者的使用范围更广一点。@命令可以脱离SQL*PLUS工具而使用。如可以直接在微软操作系统中的命令行方式下使用。当然,这操作系统要事先部署了Oracle数据库环境。
二是可以直接利用SQL*Plus工具打开文本文件,执行脚本语句。然后点击“文件”、“执行”命令执行这个脚本语句。这种方式的好处就是,系统会主动提示用户需要输入的参数。
总之,脚本文件是我们管理Oracle数据库的一大利器。我们好好利用脚本文件,可以提高Oracle数据库的管理效率。毕竟,每次在需要的时候,都去编写命令是一件很麻烦的事情。而脚本文件的最大好处,就是可以提高语句的重复利用,节省我们编写语句、调试测试的时间。
正常情况下,Oracle EBS里修改用户密码,可以在System administrator Define user form里更改,但有的时候,开发或者实施需要更快速的更改密码,可以使用下边的这个脚本
DECLARE
l_success boolean;
BEGIN
l_success := FND_USER_PKG.ChangePassword('OPERATIONS','welcome123');
IF l_success
THEN
DBMS_OUTPUT.PUT_LINE('Password Changed');
ELSE
DBMS_OUTPUT.PUT_LINE('Something wrong');
END IF;
END;
批量插入数据脚本
1、第一种批量插入数据脚本,可以基本满足要求。理解上较为简单,所以这个最常用。
NEXTVAL和CURRVAL的区别:
1、如果 sequence.CURRVAL 和 sequence.NEXTVAL 都出现在一个 SQL 语句中,则序列只增加一次。在这种情况下,每个 sequence.CURRVAL 和 sequence.NEXTVAL 表达式都返回相同的值,不管在语句中sequence.CURRVAL 和 sequence.NEXTVAL 的顺序。
执行脚本结果如下:
3、两个表,同时批量插入数据的脚本
3、
4、 涉及子表时,批量插入数据脚本,
5、 批量修改数据 :
时间取数方式:
一、SYSTIMESTAMP(取当前系统值)
二、SYSDATE(取当前系统值,但只精确到时,分和秒都为0)
三、固定值为:TO_TIMESTAMP ('2019-2-12 15:24:45.703000', 'yyyy-mm-dd hh24:mi:ss.ff6')
把固定的字段改为变量:
方式一:’||i||’ 例:’{“no”:“111’||i||’”}’(此方式)
方式二:concat 例:concat(concat(’{“blNo”:111"’,i),’"}’)
没必要用root权限执行,oracle用户同样可以执行crontab计划任务
1、su - oracle
crontab -e
0 4 * * 0 /home/oracle/exp.sh 21 /home/oracle/script_exp.log;
0~59 表示分
0~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
2、cat /home/oracle/exp.sh
. ~/.bash_profile
bakdir=/opt/dbbak
logdir=/home/oracle/dbbak
rq=$(date +%Y%m%d)
exp system/***** owner=jysh file=${bakdir}/jysh_${rq}.dmp log=${logdir}/jysh_${rq}.log;
find ${bakdir} -type f -mtime +30 -exec rm -rf {} \;
最好的方法是批量修改,即每次修改5000条(一次修改不要超过一万条,否则影响性能). 虽然在11g中,我们也可以选择使用merge命令,但你的这种情况最好先修改一部分然后看看影响,毕竟在生产环境作这样的操作风险很大。如果是误操作,最好还是请DBA来恢复,虽然这样做会被挨骂,但总比错上加错,最后连挨骂的机会都没有要好得多。如果对这些修改真的有信心,而只是从性能考虑,那可以用下面的方法(pk_col 是表的主键
1、构建临时表进行主键关联更新
需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个条件的记录。
做法:一般业务会将条件通过excel表格提供给开发,那么开发首先需要将这个excel表格的内容插入到临时表T2中,考虑到a,b都不是主键,那么需要将a,b转化成主键后再插入到T2表中,T2表中还可以保存更新前的数据,方便做数据回滚,T2表中有数据后,就可以执行下面脚本进行更新操作:
ps:c,d是需要更新的操作,e,f是条件。必须强调的是id必须是主键
1、构建临时表进行主键关联更新
需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个条件的记录。
做法:一般业务会将条件通过excel表格提供给开发,那么开发首先需要将这个excel表格的内容插入到临时表T2中,考虑到a,b都不是主键,那么需要将a,b转化成主键后再插入到T2表中,T2表中还可以保存更新前的数据,方便做数据回滚,T2表中有数据后,就可以执行下面脚本进行更新操作:
ps:c,d是需要更新的操作,e,f是条件。必须强调的是id必须是主键