使用sqlplus生产批量plsql

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:使用sqlplus生产批量plsql

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

要点
chr(10)–表示换行
set heading off–不显示表格头部
set pagesize 0–不分页
set linesize 800–行宽
spool filename–写入到文件中
sql语句

select 'declare'||chr(10)||' i   integer:=0;'||chr(10)||'cursor cur is select rowid as rid from '||t1 ||' WHERE DATASOURCE=''WN'' OR MODIFYSOURCE=''WN'';'||chr(10)||'begin for c in cur loop '||chr(10)||'i:=i+1;'||chr(10)|| 'update '||t1||chr(10)||'SET DATASOURCE=F_BYF_UPDATE_WN(datasource),MODIFYSOURCE=F_BYF_UPDATE_WN(MODIFYSOURCE),REMARK=F_BYF_UPDATE_WN(REMARK) WHERE rowid=c.rid;'||chr(10)|| ' if mod(i,200)=0 then'||chr(10)|| '  commit;'||chr(10)||'end if;'||chr(10)||' if mod(i,20000)=0 then'||chr(10)||'  dbms_lock.sleep(40);'||chr(10)||' if i>30000 then'||chr(10)|| ' dbms_lock.sleep(40);'||chr(10)||' end if;'||chr(10)||' end if;'||chr(10)|| ' if i>500000 then'||chr(10)||'  exit;'||chr(10)||' end if;'||chr(10)||' end loop;'||chr(10)||'  commit;'||chr(10)||'end;'||chr(10)||'/'||chr(10)||'--------'||t1||'-------------' from t1;

效果

declare
 i      integer:=0;
cursor cur is select rowid as rid from FUND294
 WHERE DATASOURCE='WN' OR MODIFYSOURCE='WN';
begin for c in cur loop
i:=i+1;
update FUND294
SET DATASOURCE=F_BYF_UPDATE_WN(datasource),MODIFYSOURCE=F_BYF_UPDATE_WN(MODIFYSOURCE),REMARK=F_BYF_UPDATE_WN(REMARK) WHERE rowid=c.rid;
 if mod(i,200)=0 then
  commit;
end if;
 if mod(i,20000)=0 then
  dbms_lock.sleep(40);
 if i>30000 then
 dbms_lock.sleep(40);
 end if;
 end if;
 if i>500000 then
  exit;
 end if;
 end loop;
  commit;
end;
/
--------FUND294-------------

oracle 开机自动启动

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle 开机自动启动

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、使用root用户修改/etc/oratab 文件:
$ vi /etc/oratab
orcl:/u01/oracle:N (ORACLE_SID:ORACLE_HOME:N)
改为:
orcl:/u01/oracle:Y 也就是将最后的N改为Y
二、使用Oracle用户修改$ORACLE_HOME/bin/dbstart和dbstop文件:
ORACLE_HOME_LISTNER=$1
改为:
ORACLE_HOME_LISTNER=$ORACLE_HOME
三、创建服务
$su – root
# cd /etc/rc.d/init.d/
# vi oradb
在oradb中添加文本

#!/bin/bash
# chkconfig: 345 99 10
# description: Startup Script for Oracle Databases
export ORACLE_BASE=/u01
export ORACLE_HOME=/u01/oracle
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup and oem
echo -n "Starting Oracle: "
# 启动listener and instance
su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/Oracle
# 启动oem
su - $ORA_OWNR -c "$ORACLE_HOME/bin/emctl start dbconsole"
echo "OK"
;;
stop)
# Oracle listener and instance shutdown and oem
echo -n "Shutdown Oracle: "
# 关闭oem
su - $ORA_OWNR -c "$ORACLE_HOME/bin/emctl stop dbconsole"
# 关闭数据库和listener
su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/Oracle
echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: `basename $0` start|stop|restart|reload"
exit 1
esac
exit 0

修改所属组和用户
#chown oracle.oinstall /etc/rc.d/init.d/oradb
修改访问权限
#chmod 775 /etc/rc.d/init.d/oradb
添加服务到自动启动中
#chkconfig –add oradb
查看数据库服务开机启动状态
#chkconfig –list oradb
四、# chkconfig: 345 99 10说明
指出3,4,5级别启动这个服务,99是在相应的/etc/rc.d/rcN.d(N为前面指定的级别,这里是345)目录下生成的链接文件的序号(启动优先级别)S99oradbstart,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)

oracle物化视图

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle物化视图

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、创建物化视图主要语法

 create materialized view [view_name]
     {TABLESPACE (表空间名)}--保存表空间
     {BUILD [DEFERRED|IMMEDIATE(默认值)]} --延迟刷新还是立即刷新
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{创建物化视图用的查询语句}

二、相关参数说明
创建物化视图主要选项说明
创建物化视图时可以指定多种选项,下面对几种主要的选项进行简单说明:

名称 ON PREBUILD TABLE
描述 将已经存在的表注册为实体化视图。同时还必须提供描述创建该表的查询的 SELECT 子句。可能无法始终保证查询的精度与表的精度匹配。为了克服此问题,应该在规范中包含 WITH REDUCED PRECISION 子句。
名称 Build Clause 创建方式
描述 包括BUILD IMMEDIATE和BUILD DEFERRED两种
取值 BUILD IMMEDIATE 在创建实体化视图的时候就生成数据
BUILD DEFERRED 在创建时不生成数据,以后根据需要在生成数据
默认 BUILD IMMEDIATE
名称 Refresh 刷新子句
描述 当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步
语法
[refresh [fast | complete | force]
         [on demand | commit]
         [start with date]
         [next date]
         [with {primary key | rowid}]
]
取值 FAST 采用增量刷新,只刷新自上次刷新以后进行的修改
COMPLETE 对整个物化视图进行完全的刷新
FORCE(默认) Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项
ON DEMAND(默认) 物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新
ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新
START WITH 第一次刷新时间
NEXT 刷新时间间隔
WITH PRIMARY KEY(默认) 生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性
WITH ROWID 只有一个单一的主表,不能包括下面任何一项:
●Distinct
●聚合函数
●Group by
●子查询
●连接
●SET操作
名称 Query Rewrite 查询重写
描述 包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的实体化视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的实体化视图中读取数据
取值 ENABLE QUERY REWRITE 支持查询重写
DISABLE QUERY REWRITE 不支持查询重写
默认 DISABLE QUERY REWRITE

创建实体化试图日志主要选项说明
如果需要进行快速刷新,则需要建立实体化视图日志。实体化视图日志根据不同实体化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

名称 WITH Clause
描述
取值 OBJECT ID 如果是对象实体化视图(object materialized view),则只能采用该方式
PRIMARY KEY
ROWID
SEQUENCE
默认 PRIMARY KEY

三、举例说明
1、简单示例

 create materialized view MV_except_pattern_orders
refresh Complete on demand
      start with to_date('2010-11-06 13:20:51','YYYY-MM-DD HH24:MI:SS') next sysdate+1/(24*60)
as
    select * from v_except_pattern_orders

2、带日志物化视图

--创建物化视图日志
create materialized view log on table1
tablespace ts_data --日志保存在特定的表空间
with rowid;
--创建物化视图主体
create materialized view MV_LVY_LEVYDETAILDATA
TABLESPACE ZGMV_DATA --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间
next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔
as
as select * from table1;

oracle查看object对象使用空间

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle查看object对象使用空间

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、表空间大小

Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name order by Sum(bytes)/1024/1024 desc;

2、表占用空间

select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='TABLE'  group by segment_name order by segment_name;
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name order by Sum(bytes)/1024/1024 desc;

3、索引占用空间

select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='INDEX'  group by segment_name order by segment_name;

4、数据文件使用情况

select a.tablespace_name,
       round(a.bytes / 1024 / 1024, 0)"总空间",
       round((decode(b.bytes, null, 0, b.bytes)) / 1024 / 1024, 0)"使用空间",
       round((decode(b.bytes, null, 0, b.bytes)) / a.bytes * 100, 1)"使用率",
       c.file_name,
       c.status
  from sys.sm$ts_avail a, sys.sm$ts_free b, dba_data_files c
 where a.tablespace_name = b.tablespace_name(+)
   and a.tablespace_name = c.tablespace_name
 order by a.tablespace_name;
-----------------------------------------------------------------------
select b.file_id 文件ID,
       b.tablespace_name 表空间,
       b.file_name 物理文件名,
       b.bytes / 1024 / 1024 大小M,
       c.max_extents / 1024 / 1024 可扩展数M,
       b.bytes / 1024 / 1024 + c.max_extents / 1024 / 1024 总大小M,
       trunc((b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024)  已使用M,
       trunc(sum(nvl(a.bytes, 0)) / 1024 / 1024)  剩余M,
       trunc(sum(nvl(a.bytes, 0)) / (b.bytes) * 100, 2)  剩余比
  from dba_free_space a, dba_data_files b, dba_tablespaces c
 where a.file_id = b.file_id
   and b.tablespace_name = c.tablespace_name
 group by b.tablespace_name,
          b.file_name,
          b.file_id,
          b.bytes,
          c.max_extents,
          b.bytes / 1024 / 1024 + c.max_extents / 1024 / 1024
 order by b.file_id;

5、表空间使用统计

select a.tablespace_name,
       a.bytes / 1024 / 1024 "Sum MB",
       (a.bytes - b.bytes) / 1024 / 1024 "used MB",
       b.bytes / 1024 / 1024 "free MB",
       round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used"
  from (select tablespace_name, sum(bytes) bytes
          from dba_data_files
         group by tablespace_name) a,
       (select tablespace_name, sum(bytes) bytes, max(bytes) largest
          from dba_free_space
         group by tablespace_name) b
 where a.tablespace_name = b.tablespace_name
 order by ((a.bytes - b.bytes) / a.bytes) desc;

DB Console管理

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:DB Console管理

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

今天准备启动linux下的oracle OEM,突然想起来,在win下,有个console相关的进程,想想linux下应该也有类此的东西,然后网上一查,果真有个叫做dbconsole的东西,不过要先执行lsnrctl start
1、执行emctl命令
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
我想应该是在spfile中没有设置这个参数,然后似乎用export ORACLE_UNQNAME=orcl经行环境变量设置
2、再执行emctl命令,尽然提示
EM Configuration issue. /u01/oracle/xff_orcl not found
然后网上查了下执行emca -config dbcontrol db
然后跟换提示进行相关参数配置
[oracle@xff ~]$ emca -config dbcontrol db
EMCA 开始于 2010-10-3 15:11:12
EM Configuration Assistant, 11.2.0.0.2 正式版
版权所有 (c) 2003, 2005, Oracle。保留所有权利。
输入以下信息:
数据库 SID: orcl
监听程序端口号: 1521
监听程序 ORACLE_HOME [ /u01/oracle ]: /u01/oracle
SYS 用户的口令:
DBSNMP 用户的口令:
SYSMAN 用户的口令:
通知的电子邮件地址 (可选):
通知的发件 (SMTP) 服务器 (可选):
最后提示配置成功
3、通过浏览器
https://xff:1158/em/可以进行正常访问
4、相关命令:
emctl status dbconsole 查看dbconsole状态
emca -repos create创建一个EM资料库
emca -repos recreate重建一个EM资料库
emca -repos drop删除一个EM资料库
emca -config dbcontrol db配置数据库的 Database Control
emca -deconfig dbcontrol db删除数据库的 Database Control配置
emca -reconfig ports 重新配置db control和agent的端口
emctl start dbconsole启动EM console服务,使用前需要先设置ORACLE_SID环境变量
emctl stop dbconsole停止EM console服务,使用前需要先设置ORACLE_SID环境变量
注:通过查看$ORACLE_HOME/install/portlist.ini 文件可以知道当前dbcontrol正在使用的端口,默认dbcontrol http端口1158,agent端口3938。如果要重新配置端口,可以使用如下命令:
emca -reconfig ports -dbcontrol_http_port 1159
emca -reconfig ports -agent_port 3939

安装rlwrap(让sqlplus使用如同在win dos下)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:安装rlwrap(让sqlplus使用如同在win dos下)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

在linux中,使用sqlplus不能使用上线键,有些情况下连backspace键都不能使用,给通过sqlplus对oracle的管理带来了很多不便,使用rlwrap可以解决这个问题,给你一个和win下dos一样的操作感觉
官网:http://utopia.knoware.nl/~hlub/uck/rlwrap/
1、在Ubuntu中安装rlwrap
1)sudo apt-get install rlwrap
2)在/etc/profile文件中添加
alias sqlplus=’rlwrap sqlplus’
alias rman=’rlwrap rman’
2、在centos中安装rlwrap
1)wget http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap-0.37.tar.gz
2)tar -xzvf rlwrap-0.37.tar.gz
3)./configure
4)make
5)make install
6)在/home/oracle/.bash_profile中添加
alias sqlplus=’rlwrap sqlplus’
alias rman=’rlwrap rman’

oracle之data guard(2)——物理standby和primary切换

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之data guard(2)——物理standby和primary切换

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、primary库上操作
1、查看primary库转换状态
select switchover_status from v$database
如果是TO STANDBY可以直接进入步骤3
如果是SESSIONS ACTIVE进入步骤2
2、强制把primary设置为standby模式
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
如果更加强制性,则使用
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN NOWAIT;
3、正常方式进入standby模式
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
4、重启数据库,置于mount状态
5、再次查看witchover_status状态
如果为TO PRIMARY ,表示primary切换成standby成功,如果不是请查看配置文件
二、在原standb库上配置
1、查看witchover_status状态
select switchover_status from v$database
如果是TO PRIMARY正常
如果是SESSIONS ACTIVE在2的命令后面加上 WITH SESSION SHUTDOWN ( nowait)
2、standby库切换为primary库
alter database commit to switchover to primary;
3、关闭再打开数据库
shutdown immediate;
startup;
三、测试
在现在的primary库上切换日志,在standby上查看
主库:alter system switch logfile;select name from v$archived_log;
备份库: select name from v$archived_log;
如果两者结果一致,表示切换成功
四、从MAXIMUM PERFORMANCE到MAXIMUM PROTECTION的切换
1、添加standby redo
数量:(maximum number of logfiles for each thread + 1) * maximum number of threads
alter database add standby logfile thread 1 ‘C:\oracle\product\10.2.0\oradata\orcl\redo04.log’ size 50m;
note:和redo log等大,数量每个thread比redo log多一个,最好standby和primary都添加,因为要转换
2、关闭数据库,置于mount状态
log_archive_dest_2修改为
alter system set log_archive_dest_2=’service=orcl lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl’;
主要是: lgwr sync affirm
3、设置为maximize protection
alter database set standby database to maximize protection;
4、open数据库并测试
测试 主要是通过v$archived_log视图实现
使用select protection_mode from v$database;查看数据库保护状态
五、MAXIMUM PROTECTION模式下primary、standby 库的相互切换
1、在primary库上配置
1)关闭除本操作连接外的所有数据库连接
2)alter database commit to switchover to physical standby;
3)select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;

如上图表示成功
2、在standby上操作
1)alter database commit to switchover to physical standby;
2)ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
3)shutdown immedate;startup mount;
4)alter system set log_archive_dest_2=’service=xff lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=xff’;(修改为同步传输)
5)alter database open;

如上图表示成功

oracle数据库复制

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle数据库复制

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

oracle数据库复制就是对当前的库进行拷贝(使用拷贝库用于测试、还原操作等)
1、本实验规划
使用的是同一个数据库服务器上做的拷贝试验
原数据库oracle_sid=orcl,准备新建数据库oracle_sid=xff,新建的数据库的文件放置符合ofm标准,也就是说,数据文件、控制文件、联机归档日志文件放置oradata/xff下面,一些日志记录文件放置在admin/xff下
2、用户管理方式复制数据库:
1)新建相关文件夹mkdir(省略)
2)准备xff的pfile文件
在orcl数据库中执行create pfile=’c:\orclpfile.txt’ from spfile;
修改orclpfile.txt文件,使用替换法,把所有的orcl替换成xff(替换的时候大致看下哦)
3)准备xff的控制文件
在orcl数据库中执行alter database backup controlfile to trace as ‘c:\b.txt’;
选择Set #2. RESETLOGS case部分,除掉其中的注释,把reuse修改为set处理后的大概结果如下:

CREATE CONTROLFILE set DATABASE "XFF" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO01.LOG'  SIZE 50M,
  GROUP 2 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO02.LOG'  SIZE 50M,
  GROUP 3 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO03.LOG'  SIZE 50M
DATAFILE
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSTEM01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\UNDOTBS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSAUX01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\USERS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\XFF01.DBF'
CHARACTER SET AL32UTF8
;

4)alter database begin backup;
开始把orcl中的数据库文件,复制到xff的文件夹中
alter database end backup;
5)在dos下执行oradim -new -sid xff -intpwd oracle(建立oracle_sid=xff,并创建用户名为sys,密码为oracle的秘密文件)(删除oradim -DELETE -SID xff )
6)在dos下执行set oracle_sid=xff,因为没有配置tns的相信,手工设置oracle_sid
7)sqlplus sys/oracle as sysdba;连接到xff数据库
8)使用startup pfile=’c:\orclpfile.txt’ nomount 把xff数据库至于nomount状态
9)使用刚刚(3)中准备的创建控制文件的脚步,创建控制文件
10)使用在xff的sqlplus 环境下使用set logsource ‘path’指定归档日志位置(path为归档日志路径),
然后使用recover database using backup controlfile until cancel;
按照提示看看对应的文件是否存在,如果不存在查找下硬盘上是否有该文件,如果都不存在,尝试着使用联机日志文件恢复
11)使用alter database open resetlogs 打开数据库
12)建立临时文件
ALTER TABLESPACE TEMP ADD TEMPFILE ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\xff\TEMP01.DBF’
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
13)配置listener和tns,数据库复制工作完成
3、rman复制数据库
1)备份数据库rman
backup database include current controlfile plus archivelog format=’c:\%U.bak’;
2)创建spfile文件
create spfile=’%oracle_home%\database\spfilexff.ora’ from pfile=’c:\b.txt’;
3)登录xff把数据库设置到nomount模式
4)

run{
set newname for datafile 1 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSTEM01.DBF';
set newname for datafile 2 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\undotbs01.DBF';
set newname for datafile 3 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\sysaux01.DBF';
set newname for datafile 4 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\users01.DBF';
set newname for datafile 5 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\xff01.DBF';
set newname for tempfile 1 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\\TE.DBF';
duplicate target database to xff logfile
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo01.log' size 10m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo02.log' size 10m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo03.log' size 10m;
}
--note:1、需要加上temp表空间的转换,不然会报错
--2、在运行run之前,要确保在xff中的除本rman之外的所有用户均以退出

其他与用户复制oracle操作一致。和用户操作比起来,这个不用手工创建控制文件,只要创建spfile或者pfile(注意默认路径和名称)就可以了,其他的均有rman帮我们搞定

oracle之shared模式配置

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之shared模式配置

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、配置服务器端参数
1.1、必填
dispatchers='(protocol=tcp)(dispatchers=2)’
shared_servers=2
1.2、可选项(均为9i中的默认值)
max_dispatchers=5
max_shared_servers=20
circuits=170
shared_server_sessions=165
2、配置客户端参数
XIFENFEI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER =SHARED)
(SERVICE_NAME = xifenfei)
)
)
note:
1)DEDICATED为非共享模式,若无指定,默认先用shared
2)shared不能startup、shutdown、backup数据库等操作
3、查看当前会话的服务器模式
select sid,server from v$session where sid in (select sid from v$mystat);
select circuit,dispatcher,status from v$circuit;–只有shared连接记录保存在这个视图中

oracle之数据库全球化(编码)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之数据库全球化(编码)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、查看数据库字符集

select * from nls_database_parameters where parameter like '%CHARACTERSET';

2、计算字符长度标准(是按照byte还是按照character)

show parameter NLS_LENGTH_SEMANTICS;
select * from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS';
--note:这个只对char和varchar起作用,nchar、nvarchar、nclob长度是按照character计算

3、插入数据,查看其存入数据的16进制内容和编码

create table t(id int,name varchar2(20),name1 nvarchar2(20));
insert into t values(1,'程飞','程飞');
select dump(name,1016),dump(name1,1016) from t;
--结果
Typ=1 Len=6 CharacterSet=AL32UTF8: e7,a8,8b,e9,a3,9e
Typ=1 Len=4 CharacterSet=AL16UTF16: 7a,b,98,de

4、查询客户端nls相关参数信息

select * from nls_session_parameters;

5、配置nls相关参数
主要是配置NLS_LANGUAGE和NLS_TERRITORY或者配置NLS_LANG实现
5.1、设置NLS_LANG(环境变量级别)

或者使用:

set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

5.2、session级别设置:

alter session set nls_date_format='yyyy-mm-dd';
exec sys.dbms_session.set_nls('nls_date_format','dd.mm.yyyy');

5.3、sql语句级别:

select to_char(sysdate,'yyyy_mm_dd hh24:mi:ss',
'nls_date_language=''SIMPLIFIED CHINESE''') from dual;

note:优先级:sql语句级别>session级别>环境变量级别
六、排序
设置nls_sort决定

--拼音排序
alter session set nls_sort=schinese_pinyin_m;select * from orders order by name;
select * from orders order by nlssort(name,'nls_sort=schinese_pinyin_m');
--笔画排序
alter session set nls_sort=schinese_stroke_m;select * from orders order by name;
select * from orders order by nlssort(name,'nls_sort=schinese_stroke_m');
--汉字部首排序
alter session set nls_sort=SCHINESE_RADICAL_M;select * from orders order by name;
select * from orders order by nlssort(name,'nls_sort=SCHINESE_RADICAL_M');
--note:在sql语句级别的排序上可以使用nls_sort后面value可以使用双"'"表示整体

7、相关视图
nls_database_parameters–数据库初始化文件中的nls信息
nls_session_parameters–当前session中的nls信息
v$nls_valid_values–查看CHARACTERSET、SORT、TERRITORY、LANGUAGE中可以设置的相关参数
v$nls_parameters–对nls_database_parameters和nls_session_parameter中的nls信息的补充