设为首页 加入收藏

TOP

Oracle 12c中多宿主容器数据库(CDBs)和可插拔数据库(PDBs)新特性之运行脚本(一)
2017-02-08 08:16:28 】 浏览:488
Tags:Oracle 12c 宿主 容器 数据库 CDBs PDBs 特性 运行 脚本

对开发者和DBA们来说,对shell脚本批量任务的影响成了多宿主选项带来的最大改变之一。因为多宿主环境通过服务来连接到可插拔数据库,因此,依靠CRON和OS认证成了换成多宿主环境后的一个最大问题。本文提供了一些办法来解决之前shell脚本工作在多宿主环境的问题。


1.? ? ? ? 设置容器


对于那些工作在容器级的DBA脚本来说,用"/ AS SYSDBA"就可以像之前一样工作。当你在可插拔数据库内运行脚本时,就会出现问题。解决这个问题的最简单办法就是继续用"/ asSYSDBA"连接,但在脚本中用ALTER SESSION SET CONTAINER命令设置容器。


sqlplus / as sysdba <

ALTER SESSION SET CONTAINER = pdb1;


-- 和之前一样运行任务


SHOW CON_NAME;


EXIT;


EOF


为了让脚本更通用,把PDB名当做参数。将下面的脚本存为"set_container_test.sh".


sqlplus / as sysdba <

ALTER SESSION SET CONTAINER = $1;


--像之前一样运行任务


SHOW CON_NAME;


EXIT;


EOF


把PDB名作为第一个参数运行脚本显示,设置的容器是对的。


$ chmod u+x set_container_test.sh


$ ./set_container_test.sh pdb1


SQL*Plus: Release 12.1.0.1.0 Production onFri Apr 18 16:48:51 2014


Connected to:


Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Production


With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options


SQL> SQL>


Session altered.


SQL> SQL> SQL>


CON_NAME


------------------------------


PDB1


SQL> SQL> Disconnected from OracleDatabase 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production


With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options


$


2.? ? ? ? TWO_TASK方法


用TWO_TASK环境变量是连接到特定用户的一个浅显的方法,可惜的是,用"/ ASSYSDBA"连接方法行不通。


$ export TWO_TASK=pdb1


$ sqlplus / as sysdba


SQL*Plus: Release 12.1.0.1.0 Production onFri Apr 18 16:54:34 2014


Copyright (c) 1982, 2013, Oracle.? All rights reserved.


ERROR:


ORA-01017: invalid username/password; logondenied


Enter user-name:


用确定的用户名和口令结合TWO_TASK方法,能像之前一样正常工作。


$ export TWO_TASK=pdb1


$ sqlplus test/test


SQL*Plus: Release 12.1.0.1.0 Production onFri Apr 18 16:57:46 2014


Copyright (c) 1982, 2013, Oracle.? All rights reserved.


Last Successful login time: Wed Apr 02 201410:05:22 +01:00


Connected to:


Oracle Database 12c Enterprise EditionRelease 12.1.0.1.0 - 64bit Production


With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options


SQL> SHOW CON_NAME;


CON_NAME


------------------------------


PDB1


SQL>


也许你并不希望在脚本中包含确定的用户名和密码,但如果增加一个指向连接的服务或使用TWO_TASK环境变量,就可以连接到确定的PDB。


3.? ? ? ? 安全的外部口令存储


Oracle 10g引进了不用显式提供认证,而是使用安全外部口令存储来连接数据库的能力。这种基于服务的方式事实上也会很好的使用PDB环境。


把下面的项放入"$ORACLE_HOME/network/admin/sqlnet.ora" 文件,并确定要求的钱包目录。


WALLET_LOCATION =


? (SOURCE =


? ? (METHOD = FILE)


? ? (METHOD_DATA =


? ? ? (DIRECTORY = /u01/app/oracle/wallet)


? ? )


? )


SQLNET.WALLET_OVERRIDE = TRUE


SSL_CLIENT_AUTHENTICATION = FALSE


SSL_VERSION = 0


创建一个钱包来存储认证信息。Oracle11gR2之后,通过orapki很好的实现了该功能,如果将钱包拷到其他机器,将会阻止自动登录。


$ mkdir -p /u01/app/oracle/wallet


$ orapki wallet create -wallet"/u01/app/oracle/wallet" -pwd "mypassword"-auto_login_local


Oracle Secret Store Tool : Version 12.1.0.1


Copyright (c) 2004, 2012, Oracle and/or itsaffiliates. All rights reserved.


Enter password:? ? ? ? ?


Enter password again:? ? ? ? ?


$


$ mkstore -wrl"/u01/app/oracle/wallet" -createCredential pdb1_test test test


Oracle Secret Store Tool : Version 12.1.0.1


Copyright (c) 2004, 2012, Oracle and/or itsaffiliates. All rights reserved.


Enter wallet password:? ? ? ? ?


Create credentialoracle.security.client.connect_string1


$


在"$ORACLE_HOME/network/admin/tnsnames.ora"文件中创建一个和钱包中匹配的别名。


PDB1_TEST =


?(DESCRIPTION =


? (ADDRESS = (PROTOCOL = TCP)(HOST = ol6-121.localdomain)(PORT = 1521))


? (CONNECT_DATA =


? ? (SERVER = DEDICATED)


? ? (SERVICE_NAME = pdb1)


? ? )


? )


至此,我们就可以用钱包中的认证项去连接确定的数据库。


$ sqlplus /@pdb1_test


SQL*Plus: Release 12.1.0.1.0 Production onSat Apr 19 10:

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle 12c中数据删除(delete).. 下一篇关于MySQL线程的基本设置

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目