当前位置:文档之家› 在Oracle中使用PLSQL操作COM对象

在Oracle中使用PLSQL操作COM对象

在Oracle中使用PLSQL操作COM对象
在Oracle中使用PLSQL操作COM对象

必要性

扩展后的PL/SQL语言已经集成了标准SQL,在效率和安全上非常适合设计Oracle数据库程序,但对于应用的某些功能,其它的程序设计语言比PL/SQL更适合,如:使用操作系统资源,C语言在计算和引用系统对象及使用设备上优于PL/SQL,而Java语言在网络上的应用优于PL/SQL。

如果在应用上要用到不适合用PL/SQL语言的话,这时就要使用其它语言进行编制,然后由PL/SQL作为外部例程进行调用。

在Oracle8之前的版本,PL/SQL和其它语言的唯一通信是借助于DBMS_PIPE和DBMS_ALERT包来实现,在使用之前必需建立一个OCI接口或预编译器编制的监护程序,使用比较复杂。外部例程的出现,只需在PL/SQL中建立一个函数映射到外部例程对应的函数,就像普通的PL/SQL函数使用一样,简化了使用过程。

基本原理

当引用外部C语言例程时,Oracle监听器将启动extproc进程,该进程将会动态地载入共享库(在Windows下称为动态链接库,即是DLL文件),进程起了一个缓冲的作用,当PL/SQL 过程调用外部函数时,进程把命令发送到共享库,之后把结果返回给PL/SQL过程。

进程被调用后随着共享库的使用会话(session)而存在,如果调用完毕或者关闭数据库用户会话,extproc进程会自动关闭。

使用配置

在调用外部例程之前,必需进行如下设置:

·配置监听器。

·配置Net组件服务。

配置监听器,打开D:\oracle\ora92\network\admin\listener.ora 文件,修改文件参数。

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION =

(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =

CHANET)(PORT = 1521)) ) (ADDRESS_LIST = (ADDRESS =

(PROTOCOL = IPC)(KEY = extproc1)) ) ) )

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME

= PLSExtProc) (ORACLE_HOME = D:\oracle\ora92) (PROGRAM

= extproc) ) (SID_DESC = (GLOBAL_DBNAME = ORADB)

(ORACLE_HOME = D:\oracle\ora92) (SID_NAME = ORADB) ) )

其中有两部份参数对于使用外部例程是很重要的。

·(ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY =

extproc1))

设置基于IPC协议的外部例程

·(SID_DESC =(SID_NAME = PLSExtProc) (ORACLE_HOME =

D:\oracle\ora92) (PROGRAM = extproc) )

记录数据库的相关属性,SID_NAME在默认的情况下是PLSExtproc。

配置Net组件服务,打开D:\oracle\ora92\network\admin\tnsnames.ora文件,把如下内容保存在该文件里。

EXTPROC_CONNECTION_DATA = (DESCRIPTION =

(ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY =

EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc)

(PRESENTATION = RO) ) )

重要参数说明:

·(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

·(CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) 两设置必需与listener.ora里的一致。

重启监听器,并测试服务是否可用。

停止监听器:lsnrctl stop

启动监听器:lsnrctl start

测试服务是否可用:

C:\>tnsping EXTPROC_CONNECTION_DATA TNS Ping Utility for

32-bit Windows: Version 9.2.0.1.0 - Production on 07-4

月 -2 005 16:57:00 Copyright (c) 1997 Oracle Corporation.

All rights reserved.

已使用的参数文件: D:\oracle\ora92\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC1)))

(CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO)))

OK(30毫秒)

测试extproc进程是否正常:

D:\oracle\ora92\bin>extproc Oracle Corporation --- 星期

四 4月 07 2005 17:37:18.968 Heterogeneous Agent Release

9.2.0.1.0 - Production

4、使用COM对象说明

COM对象设计都会提供了三个基本操作给开发人员使用,分别为:获取属性值,设置属性值(只读属性除外),调用方法。Oracle数据库在Windows的平台下提供了操作COM对象的接口,属于C语言外部例程模式。

在使用该功能之前,需明白如下内容:

1) 创建COM对象操作函数。

SQL> CONNECT SYSTEM/chanet@oradb SQL> CREATE USER chanet

identified by chanet; SQL> GRANT CREATE LIBRARY TO chanet;

SQL> CONNECT chanet/chanet@oradb; SQL>

@D:\oracle\ora92\com\comwrap.sql;

2)配置监听器。

在listener.ora文件里,添加如下内容,并重启监听器。

STARTUP_WAIT_TIME_LISTENER = 0 CONNECT_TIMEOUT_LISTENER

= 10 TRACE_LEVEL_LISTENER = off PASSWORDS_LINTENER =

(oracle)

3) PL/SQL数据类型与对应的COM对象类型

表1-1数据类型比较

PL/SQL数据类型 COM API 数据类型 VARCHAR2 BSTR

BOOLEAN BOOL BINARY_INTEGER BYTE,INT,LONG DOUBLE

PRECISION DOUBLE,FLOAT,CURRENCY DATE DATE

4) 函数说明。

表1-2函数说明

名称功能描述 CreateObject 创建对象DestroyObject 关

闭对象 GetLastError 获取错误信息 GetProperty 获取属性

值 SetProperty 设置属性值 InitArg 为Invoke函数初

始化参数 InitOutArg 为GetArg初始化输出参数

GetArg 获取输出参数 SetArg 为Invoke函数设置参数

Invoke 调用COM对象的函数或过程

5) 操作Excel示例

本节介绍如何操作COM对象(以Excel对象为例),将数据库里的表记录通过PL/SQL语句输出成Excel文件。通过对象浏览器可以查看Excel对象提供的属性和方法。(如:在Excel菜单,工具 -> 宏 -> 打开Visual Basic编辑器,在编辑器里,视图 -> 对象浏览器)。

使用Excel对象一般针对单元格进行操作(如,设置第一个单元格字体大小的代码为:Range("A1").Font.Size = 20)。对应的COM外部例程操作的步骤为:

1、获取程序句柄;

2、获取工作簿句柄;

3、获取工作表句柄;

4、获取Range区句柄;

5、获取Font类句柄;

6、设置Size属性。

如下为操作Excel对象的例子,首先建立示例表,然后建立操作包(package),最后是使用包函数的过程(procedure)。创建一个测试用表:

-- 销售表(脚本)

CREATE TABLE IT_SALE_TAB(ITS_ID VARCHAR2(5),ITS_DATE

DATE,ITS_TOTAL NUMBER); INSERT INTO

IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

1’,TO_DATE(’2004-01-01’,’YYYY-MM-DD’),250); INSERT INTO

IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

2’,TO_DATE(’2004-02-01’,’YYYY-MM-DD’),150); INSERT INTO

IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

3’,TO_DATE(’2004-03-01’,’YYYY-MM-DD’),80); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

4’,TO_DATE(’2004-04-01’,’YYYY-MM-DD’),96); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

5’,TO_DATE(’2004-05-01’,’YYYY-MM-DD’),300); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

6’,TO_DATE(’2004-06-01’,’YYYY-MM-DD’),210); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

7’,TO_DATE(’2004-07-01’,’YYYY-MM-DD’),320); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

8’,TO_DATE(’2004-08-01’,’YYYY-MM-DD’),280); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’9’,TO_DATE(’2004-09-01’,’YYYY-MM-DD’),276); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’

10’,TO_DATE(’2004-10-01’,’YYYY-MM-DD’),368); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’11’,TO_DATE(’2004-11-01’,’YYYY-MM-DD’),163); INSERT INTO IT_SALE_TAB(ITS_ID,ITS_DATE,ITS_TOTAL) VALUES(’12’,TO_DATE(’2004-12-01’,’YYYY-MM-DD’),305); COMMIT;

操作Excel对象包(Package)。CREATE OR REPLACE PACKAGE oraExcel IS xlThin BINARY_INTEGER DEFAULT 2; DummyToken BINARY_INTEGER; applicationToken BINARY_INTEGER:=-1; -- Excel对象句柄WorkBooksToken BINARY_INTEGER:=-1; -- 工作

簿句柄WorkBookToken BINARY_INTEGER:=-1; WorkSheetToken BINARY_INTEGER:=-1; -- 工作表句柄WorkSheetToken1

BINARY_INTEGER:=-1; RangeToken BINARY_INTEGER:=-1; -- Range区句柄ChartObjectToken BINARY_INTEGER:=-1; -- 图表对象句柄ChartObject1 BINARY_INTEGER:=-1; Chart1Token BINARY_INTEGER:=-1; hLines BINARY_INTEGER:=-1; i BINARY_INTEGER; err_src VARCHAR2(255); err_desc VARCHAR2(255); err_hpf VARCHAR2(255); err_hpID

BINARY_INTEGER; -- 创建Excel对象FUNCTION CreateExcelWorkSheet(servername VARCHAR2) RETURN

BINARY_INTEGER; -- 插入数据(字符型) FUNCTION

setCellValues(RANGE VARCHAR2,data VARCHAR2,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 插入数据(日期型) FUNCTION setCellValues(RANGE VARCHAR2,data DATE,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 插入数据(整型) FUNCTION setCellValues(RANGE VARCHAR2,data BINARY_INTEGER,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 插入数据(实型) FUNCTION setCellValuesReal(RANGE VARCHAR2,data DOUBLE PRECISION,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 设置列宽FUNCTION setCellColWidth(RANGE VARCHAR2,width DOUBLE PRECISION,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 设置表格FUNCTION setCellLines(RANGE

VARCHAR2,BordersIndex BINARY_INTEGER,weight

BINARY_INTEGER DEFAULT xlThin,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 合并单元格FUNCTION

setCellMerge(RANGE VARCHAR2,bValues BOOLEAN,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 设置字体属性FUNCTION setCellFont(RANGE VARCHAR2,Property VARCHAR2, fontValues BINARY_INTEGER,TYPE VARCHAR2) RETURN

BINARY_INTEGER; -- 调用方法FUNCTION callMethod(RANGE VARCHAR2,MethodName VARCHAR2) RETURN BINARY_INTEGER; -- 插入图表FUNCTION InsertChart(xpos BINARY_INTEGER,ypos BINARY_INTEGER, width BINARY_INTEGER,height

BINARY_INTEGER, RANGE VARCHAR2,TYPE VARCHAR2) RETURN BINARY_INTEGER; -- 保存文件FUNCTION SaveToFile(filename VARCHAR2) RETURN BINARY_INTEGER; -- 关闭Excel对象FUNCTION CloseExcel RETURN BINARY_INTEGER; END oraExcel;

数据包体内容(PACKAGE BODY)CREATE OR REPLACE PACKAGE BODY oraExcel IS FUNCTION

CreateExcelWorkSheet(servername VARCHAR2) RETURN

BINARY_INTEGER IS BEGIN -- 创建Excel对象

i:=ordcom.CreateObject(’Excel.Application’, 0, servername,applicationToken); IF (i!=0) THEN -- 创建失败,

提示返回的错误信息ordcom.GetLastError(err_src, err_desc, err_hpf, err_hpID);

raise_application_error(-20000,err_src || err_desc || err_hpf || err_hpID); END IF; -- 通过程序对象句柄获取工作簿句柄i:=ordcom.GetProperty(applicationToken, ’WorkBooks’, 0, WorkBooksToken); ordcom.InitArg(); ordcom.SetArg(-4167,’I4’);

i:=ordcom.Invoke(WorkBooksToken, ’Add’, 1, WorkBookToken); ordcom.InitArg(); ordcom.SetArg(’Sheet 1’,’BSTR’); -- 获取工作表句柄

i:=ordcom.GetProperty(applicationToken, ’WorkSheets’, 0, WorkSheetToken1);

i:=ordcom.Invoke(WorkSheetToken1, ’Add’, 0, WorkSheetToken); RETURN i; END CreateExcelWorkSheet; FUNCTION setCellValues(RANGE VARCHAR2,data VARCHAR2, TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN

ordcom.InitArg(); ordcom.SetArg(RANGE,’BSTR’); -- 获取Range区句柄,之后将数据写入到指定的单元格

i:=ordcom.GetProperty(WorkSheetToken, ’Range’, 1, RangeToken); i:=ordcom.SetProperty(RangeToken, ’Value’, data, TYPE); i:=ordcom.DestroyObject(RangeToken); RETURN i; END setCellValues; FUNCTION

setCellValues(RANGE VARCHAR2,data BINARY_INTEGER,TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN

ordcom.InitArg(); ordcom.SetArg(RANGE, ’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken, ’Range’, 1, RangeToken); i:=ordcom.SetProperty(RangeToken, ’Value’, data, type); i:=ordcom.DestroyObject(RangeToken); RETURN i; END setCellValues; FUNCTION setCellValuesReal(RANGE VARCHAR2,data DOUBLE PRECISION,TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg(); ordcom.SetArg(RANGE, ’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken, ’Range’, 1,

RangeToken); i:=ordcom.SetProperty(RangeToken, ’Value’, data, type); i:=ordcom.DestroyObject(RangeToken); RETURN i; END setCellValuesReal; FUNCTION setCellValues(RANGE VARCHAR2,data DATE,TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg(); ordcom.SetArg(RANGE, ’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken, ’Range’, 1, RangeToken); i:=ordcom.SetProperty(RangeToken, ’Value’, data, TYPE); i:=ordcom.DestroyObject(RangeToken);

RETURN i; END setCellColWidth; FUNCTION

setCellMerge(RANGE VARCHAR2,bValues BOOLEAN,TYPE VARCHAR2) RETURN i; END setCellValues; FUNCTION setCellColWidth(RANGE VARCHAR2,width DOUBLE

PRECISION,TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg(); ordcom.SetArg(RANGE,’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken,’

Range’,1,RangeToken);

i:=ordcom.SetProperty(RangeToken,’

ColumnWidth’,width,TYPE);

i:=ordcom.DestroyObject(RangeToken); RETURN

BINARY_INTEGER IS BEGIN ordcom.InitArg();

ordcom.SetArg(RANGE,’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken,’

Range’,1,RangeToken);

i:=ordcom.SetProperty(RangeToken,’

MergeCells’,bValues,’BOOLEAN’);

i:=ordcom.DestroyObject(RangeToken); RETURN i; END setCellMerge; FUNCTION setCellLines(RANGE

VARCHAR2,BordersIndex BINARY_INTEGER, weight

BINARY_INTEGER DEFAULT xlThin,TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg();

ordcom.SetArg(RANGE,’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken,’

Range’,1,RangeToken); ordcom.InitArg();

ordcom.SetArg(BordersIndex,TYPE); -- 画表格的具体载入参数i:=ordcom.GetProperty(RangeToken,’Borders’,1,hLines); i:=ordcom.SetProperty(hLines,’weight’,weight,TYPE); i:=ordcom.DestroyObject(hLines);

i:=ordcom.DestroyObject(RangeToken); RETURN i; END setCellLines; FUNCTION setCellFont(RANGE

VARCHAR2,Property VARCHAR2,fontValues

BINARY_INTEGER,TYPE VARCHAR2) RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg(); ordcom.SetArg(RANGE,’BSTR’); i:=ordcom.GetProperty(WorkSheetToken,’

Range’,1,RangeToken); ordcom.InitArg();

ordcom.SetArg(Property,TYPE); ordcom.InitArg();

i:=ordcom.GetProperty(WorkSheetToken, ’ChartObjects’, 0, ChartObjectToken); ordcom.InitArg();

ordcom.SetArg(xpos,’I2’); -- 载入图表对象位置参数

ordcom.SetArg(ypos,’I2’); ordcom.SetArg(width,’I2’); ordcom.SetArg(height,’I2’);

i:=ordcom.Invoke(ChartObjectToken, ’Add’, 4, ChartObject1); -- 添加图表

i:=ordcom.GetProperty(ChartObject1, ’Chart’,

0,Chart1Token); ordcom.InitArg();

ordcom.SetArg(RANGE, ’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken,’Range’, 1, RangeToken); -- 选取区域ordcom.InitArg();

ordcom.SetArg(RangeToken, ’DISPATCH’); IF TYPE=’xlPie’THEN charttype := -4102; ELSIF TYPE=’xl3DBar’ THEN charttype := -4099; ELSIF TYPE=’xlBar’ THEN charttype := 2; ELSIF TYPE=’xl3dLine’ THEN

i:=ordcom.GetProperty(RangeToken,’Font’,0,hLines); -- 获取字体对象

i:=ordcom.SetProperty(hLines,Property,fontValues,TYPE) ; i:=ordcom.DestroyObject(hLines);

i:=ordcom.DestroyObject(RangeToken); RETURN i; END; FUNCTION callMethod(RANGE VARCHAR2,MethodName VARCHAR2) RETURN BINARY_INTEGER IS reti BINARY_INTEGER := -1; BEGIN ordcom.InitArg(); ordcom.SetArg(RANGE,’BSTR’);

i:=ordcom.GetProperty(WorkSheetToken,’

Range’,1,RangeToken); ordcom.InitArg();

i:=ordcom.Invoke(RangeToken,MethodName,0,reti); -- 调用对象的方法i:=ordcom.DestroyObject(RangeToken); RETURN reti; END; FUNCTION InsertChart(xpos BINARY_INTEGER, ypos BINARY_INTEGER, width BINARY_INTEGER, height BINARY_INTEGER, RANGE VARCHAR2, TYPE VARCHAR2) RETURN BINARY_INTEGER IS charttype BINARY_INTEGER:= -4099; BEGIN charttype:= -4101; END IF;

ordcom.SetArg(charttype,’I4’);

i:=ordcom.Invoke(Chart1Token,’ChartWizard’, 2, DummyToken); i:=ordcom.DestroyObject(RangeToken);

i:=ordcom.DestroyObject(ChartObjectToken);

i:=ordcom.DestroyObject(ChartObject1);

i:=ordcom.DestroyObject(Chart1Token); RETURN i; END InsertChart; FUNCTION SaveToFile(filename VARCHAR2) RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg(); ordcom.SetArg(filename,’BSTR’);

i:=ordcom.Invoke(WorkBookToken, ’SaveAs’, 1, DummyToken); -- 保存文件IF (i!=0) THEN

ordcom.GetLastError(err_src, err_desc, err_hpf,

err_hpID); raise_application_error(-20000,err_src || err_desc || err_hpf || err_hpID); END IF; RETURN i; END SaveToFile; FUNCTION CloseExcel RETURN BINARY_INTEGER IS BEGIN ordcom.InitArg(); ordcom.InitArg();

ordcom.SetArg(FALSE,’BOOL’);

i:=ordcom.Invoke(WorkBookToken, ’Close’, 0, DummyToken); i:=ordcom.DestroyObject(WorkBookToken); ordcom.InitArg(); i:=ordcom.Invoke(WorkBooksToken, ’

Close’, 0, DummyToken);

i:=ordcom.DestroyObject(WorkBooksToken);

i:=ordcom.Invoke(applicationToken, ’Quit’, 0,

DummyToken); -- 关闭所有句柄

i:=ordcom.DestroyObject(WorkSheetToken);

i:=ordcom.DestroyObject(WorkSheetToken1);

i:=ordcom.DestroyObject(applicationToken);

i:=ordcom.DestroyObject(ChartObjectToken);

i:=ordcom.DestroyObject(Chart1Token);

i:=ordcom.DestroyObject(hLines);

i:=ordcom.DestroyObject(ChartObject1);

i:=ordcom.DestroyObject(dummyToken); RETURN i; END

CloseExcel; END oraExcel;

成功创建oraExcel包后,最后创建使用包的存储过程,实现把数据表里的字符型、日期型和数值型分别传到Excel工作表里,对数值型数据进行统计和使用Excel中的图表。该过程具体操作步骤为:

·创建Excel对象。

·建立表头,设置列宽。

·将游标数据传到工作表。

·画表格。

·设置字体属性。

·插入图表。

·保存为Excel格式文件,关闭Excel对象。

如下为dp_toExcel存储过程:

CREATE OR REPLACE PROCEDURE dp_ToExcel IS CURSOR c1 IS

SELECT ITS_ID,ITS_DATE,ITS_TOTAL FROM IT_SALE_TAB; n

BINARY_INTEGER:=2; i BINARY_INTEGER; filename

VARCHAR2(255); cellIndex VARCHAR2(40); cellValue

VARCHAR2(40); cellColumn VARCHAR2(10); returnedTime

VARCHAR2(20); currencyvalue DOUBLE PRECISION; dateValue

DATE; xlThin BINARY_INTEGER:=2; xlEdgeLeft

BINARY_INTEGER:=7; xlEdgeTop BINARY_INTEGER:=8; xlEdgeBottom BINARY_INTEGER:=9; xlEdgeRight

BINARY_INTEGER:=10; xlInsideVertical

BINARY_INTEGER:=11; xlInsideHorizontal

BINARY_INTEGER:=12; BEGIN

i:=oraExcel.CreateExcelWorkSheet(’’);

i:=oraExcel.setCellValues(’A2’, ’序号’, ’BSTR’);

i:=oraExcel.setCellValues(’B2’, ’日期’, ’BSTR’);

i:=oraExcel.setCellValues(’C2’, ’销售’, ’BSTR’);

cellValue:=c1_rec.ITS_TOTAL;

currencyValue:=cellValue;

i:=oraExcel.setCellValuesReal(cellIndex,

currencyValue, ’CY’); n:=n+1; END LOOP;

i:=oraExcel.setCellValues(’A’||n,’合计’,’BSTR’);

i:=oraExcel.setCellValues(’C’||n,’=SUM(C3:C’

||to_char(n-1)||’)’,’BSTR’); -- 画表格

i:=oraExcel.setCellLines(’A1:C’||n,xlEdgeLeft,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’

||n,xlEdgeTop,xlThin,’I2’); i:=oraExcel.setCellLines(’A1:C’||n,xlEdgeBottom,xlThin,’I2’);

i:=oraExcel.setCellLines(’A1:C’

||n,xlEdgeRight,xlThin,’I2’);

i:=oraExcel.setCellLines(’A1:C’

||n,xlInsideVertical,xlThin,’I2’);

i:=oraExcel.setCellLines(’A1:C’

||n,xlInsideHorizontal,xlThin,’I2’); -- 设置字体属性

i:=oraExcel.setCellFont(’A1:C1’,’Size’,20,’I2’); i:=oraExcel.setCellFont(’A1:C1’,’Bold’,1,’I2’);

i:=oraExcel.callMethod(’A1:C1’,’Merge’); -- 合并单元格i:=oraExcel.setCellValues(’A1:C1’,’合计’,’BSTR’); -- 插入图表i:=oraExcel.setCellColWidth(’B:B’, 12.75,’CY’); -- 设置列宽i:=oraExcel.setCellColWidth(’C:C’, 12.75,’

CY’); n:=3; For c1_rec IN c1 LOOP

cellColumn:=TO_CHAR(n); cellIndex:= ’A’||cellColumn;

cellValue:= TO_CHAR(c1_rec.ITS_ID);

i:=oraExcel.setCellValues(cellIndex, cellValue, ’

BSTR’); cellIndex:= ’B’ || cellColumn;

dateValue:=c1_rec.ITS_DATE;

i:=oraExcel.setCellValues(cellIndex, dateValue, ’

DATE’); cellIndex:= ’C’ || cellColumn;

i:=oraExcel.InsertChart(350,200,250,250,’C3:C’

||TO_CHAR(n-1),’xlPie’); SELECT TO_CHAR(SYSDATE, ’

HH24MISS’) INTO returnedTime FROM dual; filename:=’

D:\testExcel’ || returnedTime || ’.xls’;

i:=oraExcel.SaveToFile(filename); -- 保存文件

i:=oraExcel.closeExcel(); -- 关闭对象END;

来源:网络编辑:联动北方技术论坛

远程登录oracle方法

一、Oracle入门练习:远程登陆Oracle数据库 2010-11-24 10:23 124人阅读评论(0) 收藏举报 1. 对于仅仅安装了Oracle客户端的XP电脑,要连接到远程Oracle数据库,则要输入类似以下的命令: C:/> sqlplus /nolog SQL> conn scott/tiger@192.168.0.88:1521/simen:dedicated/simen 格式说明: 用户名/密码@主机名:端口号/服务名:服务类型/实例名 通常,端口号、服务类型、实例名可以省略,简化后如下: SQL> conn scott/tiger@192.168.0.88/simen 这种写法属于轻松连接命名方法(easy connect naming method),这种连接方法不需要配置客户端的$ORACLE_HOME/network/admin/tnsnames.ora文件。所以称之为easy方式 2. 对于安装了NETCA或NET manager的客户机,则可以用本地命名方法(local naming method)来连接远程数据库。命令类似如下: SQL> conn scott/tiger@vm 这里的vm是我们自定义的网络服务名,为了让电脑能解析vm代表什么意思,我们必须配置客户端的$ORACLE_HOME/network/admin/tnsnames.ora文件。该文件的内容大致如下: VM = (DESCRIPTION = (ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.80)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = simen) ) ) 可以通过客户端安装的netca或net manager工具来配置该文件。 3. 还有一种命名方法叫目录命名方法(Directory Naming Method),也就是将连接描述符(Connect Descriptors)预先保存在一台符合LDAP的目录服务器上,并由这台目录服务器来解析客户端发出的连接请求中的数据库服务、网络服务名或网络服务别名。 这里讲的连接描述符Connect Descriptors指的是类似以下内容:DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.80)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = simen) ) 它应该至少包含PROTOCOL, HOST, PORT, SERVICE_NAME 四个要素。

PLSQL安装及配置

PL\SQL Developer的安装和使用一、软件安装 1、准备安装。 安装文件总共有三个,如下图所示: 2、安装PL\SQL Developer的软件。 双击安装文件plsqldev803.exe文件,进入安装阶段: 点击“确定”。 点击“I Agree”。 选择安装路径,点击“Next”。

选择“Create PL\SQL Developer shortcuts”,“Create shortcut on DeskTop”,点击“Next”。 选择“Template files”,“Keyword files”,点击“Finish”。 进入安装过程,会看到安装的进度条,等到安装完成,点击“Close”。

PL\SQL Developer安装完成。 3、安装中文包 双击打开chinese.exe中文包的安装文件,点击“确定”。 选择安装目录,点击右箭头,进入到下一步操作。 进行选项的设置,保持默认即可,点击绿色的钩,进入到安装过程。

软件安装以后,点击灰色的钩,安装完成。 4、注册软件 第一次使用PL\SQL Developer软件是需要注册的,打开”PLSQL注册码.txt”,将相应的内容填入到对应的注册界面,点击“注册”即可。

二、PL\SQL Developer的使用 (在使用PL\SQL Developer之前要保证oracle的远程连接数据库的配置是正确的。 如果配置正确,继续向下看; 如果oracle的连接远程数据库还没有配置,请跳过这节看后面“三、Oracle Net 配置”。) 1、进入系统。双击PL\SQL Developer图标,出现Oracle登陆界面: 填入正确的用户名和密码,选择好对应的数据库,并选择用户的角色,点击“确定”,即可登录成功,进入如下操作界面: 2、PL\SQL操作。下面就最常用的脚本执行操作进行介绍。 1)新建“SQL窗口”。方式有两种:一种是直接点击“文件”→”新建”→”SQL窗口”;

oracle的网络配置文件

oracle的网络配置文件 ?三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下。 ?重点:三个文件的作用和使用 sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。 例如我们客户端输入 sqlplus sys/oracle@orcl 假如我的sqlnet.ora是下面这个样子 SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME) 那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名 如果我是这个样子 NAMES.DIRECTORY_PATH= (TNSNAMES) 那么客户端就只会从tnsnames.ora查找orcl的记录 括号中还有其他选项,如LDAP等并不常用。 ?Tnsnames.ora------这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应, 只有当sqlnet.ora中类似 NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。 例子中有两个,ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说 #你所要连接的时候输入得TNSNAME ORCL = (DESCRIPTION = (ADDRESS_LIST = #下面是这个TNSNAME对应的主机,端口,协议 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = #使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式

plsql安装和配置连接教程(附一些常用设置)

plsql安装和配置连接教程 总体步骤:先安装oracle client端,然后安装plsql,配置tnsname.ora 一:安装oracle client端 下载地址: 1.加压文件,安装oracle客户端 打开安装包,找到setup.exe,开始安装。报错,具体原因和解决办法和安装oracle服务端方法一样。只是要多修改一个文件,在两个文件里添加同样的内容即可。 解决办法很简单,这是因为版本注册问题,默认oracle 11没有添加win10的注册信息,所以要讲win10的注册信息添加到oracle的配置文件里。打开oracle安装包,找到stage文件夹,找到cvu_prereq.xml文件,用记事本打开可以看到如下内容,在标签最后添加如下红色部分。

上面报错信息修改完成以后,重新setup.ext,下面界面选择“管理员”模式 安装以后在network\ADMIN文件夹中配置tnsnames.ora文件,如图:

如果client文件夹中没有network文件夹,说明安装client时安装类型没选对,这时也可以从instantclient包中,把network文件夹拷入client的目录下。 此时,基础环境已经配置完毕。 二:安装plsqldevlop 安装完毕后,不要输入账号密码先进入工具 点tools—preferences—输入client端的目录地址和oci.dll文件的地址 三:配置系统环境 右击我的电脑—属性—高级系统设置—环境变量 编辑Path,添加client端地址

plsql远程访问数据库 解决ora12541:TNS无监听程序

本机为win7 32位系统,为了学习oracle,装了个vbox虚拟机,再装了个win7虚拟机,内装oracle 11g(win7如果要装10g,要选择vista版本,win版本会安装报错).oracle11g安装完后有报了个错误,当时没注意,现在也忘了什么错了,但是不影响使用.后来想在本机安装plsql来远程连接虚win7上的oracle.查了一些资料,步骤如下: 1.下载plsql,安装. 2.下载Instant Client,点击下载,下载第一个basic就行了,下载完解压缩,以放到主win7 d盘根目录为 例:d:\instantclient_11_2 3.在d:\instantclient_11_2新建tnsnames.ora,用记事本编辑. 4.到虚win7上的oracle安装目录找到…\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora,打开,比如数据库实例是orcl,找到如下代码,拷贝到本机d:\instantclient_11_2\tnsnames.ora里 ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟机IP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) 5.添加一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径d:\instantclient_11_2\tnsnames.ora,plsql通过这个找到orcl连接字符串 6.添加一个环境变量NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK 7.打开PLSQL,不用登陆,工具-首选项-ORACLE-连接: 勾选检查连接 Oracle主目录: d:\instantclient_11_2 OCI库: d:\instantclient_11_2\oci.dll 经过以上几步之后,重启PLSQL,问题来了,报错:ora-12541:TNS:无监听程序. ping是可以ping得通的,虚win7上的监听也开着.经过不懈的努力,多次试验终于解决了: 1.虚拟机网络选择桥接,并在虚拟机内网络连接IPV4设置静态IP IP地址:192.168.1.111 (111可修改成自己的 1-255) 子网掩码:255.255.255.0 默认风头:192.168.1.1 首选DNS服务器:192.168.1.1 修改完记得主win7上 ping 192.168.1.111 ping得通再继续往后.

PLSQL Developer连虚拟机Linux下的Oracle

一、工作环境 1,本地机器操作系统为windows 7; 2,虚拟机为VM ware; 3,虚拟机操作系统为Linux,系统上已安装Oracle,并有一个实例(orcl) 二、所需工具 1,PL/SQL Developer; 2,VNC-Viewer; 3,XManager Enterprise; 三、具体步骤 1,测试本地机器与虚拟机之间的网络通畅 2,关闭Linux的防火墙 1)在linux的输入:vncserver,启动VNC服务 2)双击VNC Viewer软件,输入Linux的IP地址与端口号,点击“Connect”,输入密码连接Linux;

3)在VNC Viewwe程序中右击,选择“Open Terminal”,打开一个terminal,输入命令:setup,如果不是以root用户登录的Linux,在这里需要输入root用户的password,进入如下界面,选择“Firewall Configuration“,移动光标至“Run Tool”,回车。 4)选择“Disabled”,移动光标至“OK”,回车;

5)至此,Linux的防火墙已关闭; 3,启动数据库的监听(Listener)服务 1)先测试是否有Listener,并查看其状态,在VNC Viewer的terminal中输入:lsntctl status,查看Listener 上图显示Linux上已有Listenter 2)若无Listener,则需新建Listener,在VNC Viewer的terminal中输入:netca,新建一个Listener。如下图所示,然后下一步下一步。

安全连接-配置使用安全套接层连接oracle

配置安全套接层连接oracle 目录 1. 配置简介 (2) 2. 使用Wallet Manager创建Wallet和生成认证请求 (2) 2.1. 创建Wallet (2) 2.2. 创建认证请求 (3) 2.3. 导出证书请求 (3) 2.4. 保存Wallet位置 (3) 2.5. 让Wallet自动登录 (4) 3. 使用openssl工具制作数字证书 (4) 3.1. 创建制作证书目录 (4) 3.2. 制作发行证书 (4) 3.3. 制作用户证书 (5) 4. 导入信认根证书和用户证书 (5) 4.1. 导入信认根证书 (5) 4.2. 导入用户证书 (5) 5. 配置使用SSL的TCP/IP连接服务端 (5) 5.1. 确认服务器已经生成Wallet (6) 5.2. 指定监听服务Wallet存放位置 (6) 5.3. 创建监听使用ssl的TCP/IP协议 (7) 5.4. 配制数据库监听位置 (8) 6. 配置使用SSL的TCP/IP连接客户端 (10) 6.1. 确认客户端已经生成Wallet (11) 6.2. 配置的Oracle网络服务名称 (11) 6.3. 客户端配置Wallet位置 (13) 7. 连接数据库 (14) 8. 疑难解答 (14) 9. Wallet管理方案 (18) 10. 参考文献 (18)

1.配置简介 这里采用安全套接层连接oracle指的是使用ssl的tcp/ip协议连接oracle数据库,由于ssl的tcps/ip协议是采用公钥和私钥进行数据加密,为了解决通信双方的可信问题,使用了数字证书,而orcle是采用“Wallet Manager”来管理证书和公钥和私钥。 配置ssl的tcp/ip协议连接oracle数据库,大体步骤分为以下6步: ●使用Wallet Manager创建Wallet和生成认证请求; ●使用openssl工具制作数字证书; ●导入信认根证书和用户证书; ●配置使用SSL的TCP/IP连接服务端; ●配置使用SSL的TCP/IP连接客户端; ●连接数据库。 注意!以下例子使用的数据库版本为ORACLE 10g 10.2.0.4,如果是其他版本,会有所差异。 2.使用Wallet Manager创建Wallet和生成认证请求 Wallet Manager 有以下几点功能: ●产生公私密钥对,并生成证书请求; ●存储用户证书相匹配的私钥; ●配置可信任证书 详细配置步骤如下: 2.1. 创建Wallet 首先启动Wallet Manager工具: ?(Windows) 选择开始, 程序, Oracle-HOME_NAME, 集成管理工具, Wallet Manager ?(UNIX) 在命令行, 输入owm。 打开Wallet Manager工具后,选择Wallet,新建。在弹出对话框输入密码,此密码是oracle的Wallet密码,密必是字母和数字结合,而且大于8位字符,Wallet选择标准,点确定。

用PLSQL远程连接Oracle数据库

PL/SQL Developer 远程连接Oracle数据库 1、配置服务器tnsnames.ora文件,如果本机上没有安装oracle,可以从安 装了oracle的机上拷贝一个(tnsnames.ora文件)放在指定目录下,因为我已安装oracle,所以直接配置该文件。 # tnsnames.ora Network Configuration File: D:\Oracle11g\product\11.2.0\dbhome_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.25.224)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) orcl为远程Oracle数据库的实例名,IP地址和端口也要配置正确。 2、配置完成后,Oracle客户端应该可以连接到远程Oracle 数据库上。

Oracle TNSNAMES.ORA配置

在安装目录下,如:E:OracleOra81networkADMIN下用写字板或记事本打开TNSNAME.ORA文件,文件内容大概如下: https://www.doczj.com/doc/ed12449054.html, = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = zcb_8115)(PORT = 1521)) ) (CONNECT_DA TA = (SERVICE_NAME = test) ) ) 蓝色部分为安装时录入的信息。 如果该文件没有配置成功,该文件可通过以下步骤进行配置: 1)、在程序菜单中打开NET8 CONFIGURA TION ASSISTANT 2)、选择Net8 Configuration Assistant,打开,进入"Net8 Configuration Assistant:欢迎"窗口2)、选择"本地网络服务名设置",点击"下一步",弹出以下窗体; 3)、在"Net8 Configuration Assistant:网络服务名配置"窗口中选择"添加",点击"下一步",弹出以下窗体; 4)在"Net8 Configuration Assistant:网络服务名配置,数据库版本"窗口中选择"ORACLE 8I数据库或服务",点击"下一步",弹出以下窗体; 5)在"Net8 Configuration Assistant:网络服务名配置,服务名"窗口输入服务名,此服务名跟安装时录入的服务名(SID)相同,录入后,点击"下一步",弹出以下窗体; 6)、在"Net8 Configuration Assistant:网络服务名配置,请选择协议"窗口选择"TCP"此时只能选择"TCP",点击"下一步", 弹出以下窗体; 7)在"Net8 Configuration Assistant:网络服务名配置,TCP/IP协议"窗口输入主机名(如果连接本地数据库,则录入本地计算机名,如果连接远程数据库,则录入远程计算机名),选择默认的"请使用标准端口号1521"(建议最好不要修改),点击"下一步",弹出以下窗体; 8)、在"Net8 Configuration Assistant:网络服务名配置,测试"窗口选择"是,进行测试",点击"下一步",弹出以下窗体; 9)、当"Net8 Configuration Assistant:网络服务名配置,正在连接"窗口对话框中出现提示"正在连接….测试成功"信息,表示测试通过。此时点击"下一步",进入"Net8 Configuration Assistant: 网络服务名配置,网络服务名"窗口; 10)、在"Net8 Configuration Assistant:网络服务名配置,网络服务名"窗口输入网络服务名,服务名为ORACLE连接串,可任意录入,如:test,点击"下一步",弹出以下窗体; 11)、在"Net8 Configuration Assistant:网络服务名配置,是否需要另一个网络服务名"窗口中选择"否",点击"下一步",进入"网络服务名配置完成" 窗口; 12)、在"网络服务名配置完成"窗口中点击"下一步",弹出以下窗体; 13)、在"欢迎"窗口点击"完成",退出配置过程 TNSNAMES.ORA配置完成后,再配置BDE(BDE如何配置略),可通过BDE、PLSQL、SQL EXPLORER和TNSPING命令来测试ORACLE是否连接正确。下面用TNSPING来测试是否连接。

Oracle数据库远程连接设置的四种方法

Oracle数据库远程连接设置的四种方法 Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍。 第一种情况: 若oracle服务器装在本机上,那就不多说了,连接只是用户名和密码的问题了。不过要注意环境变 量%ORACLE_HOME%/network/admin/是否设置。 第二种情况: 本机未安装oracle服务器,也未安装oracle客户端。但是安装了pl sql development、toad sql development、sql navigator等管理数据库的工具。在虚拟机或者另一台电脑上安装了oracle服务器,也就是虚拟机或者另一台电脑此时作为服务器。 这种情况下,本人以pl sql development远程连接ORACLE服务端数据库为例: 1、在安装oracle服务器的机器上搜索下列文件: ?oci.dll ?ocijdbc10.dll ?ociw32.dll ?orannzsbb10.dll ?oraocci10.dll ?oraociei10.dll ?sqlnet.ora ?tnsnames.ora ?classes12.jar ?ojdbc14.jar 把这些找到的文件复制放到一个文件夹,如 oraclient,将此文件夹复制到客户端机器上。如放置路径为 D:oraclient。 2、配置tnsnames.ora,修改其中的数据库连接串。 1.oracledata = 2. 3.(DESCRIPTION = 4. 5.(ADDRESS_LIST = 6. 7.(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521)) 8. 9.(CONNECT_DATA =

oracle网络连接配置

网络连接配置实验 实验目的:掌握Oracle数据库的网络配置方法,熟悉掌握网络配置的各参数内容。 实验内容:Oracle网络连接配置过程的实验。 实验环境:Windows Server 2003 Enterprise Edition 实验步骤: 1、熟悉与网络配置相关的三个参数文件sqlnet.ora、tnsname.ora和listener.ora Sqlnet.ora(位于客户端和服务器端,用于主机命名法和目录命名法) 路径:c:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora Sqlnet.ora文件内容: # sqlnet.ora Network Configuration #File: C:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora # Generated by Oracle configuration tools. # This file is actually generated by netca. But if customers choose to # install "Software Only", this file wont exist and without the native # authentication, they will not be able to connect to the database on NT. SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) tnsname.ora(位于客户端和与其它服务器通信的服务器端,主要用于本地命名法) 路径同上 Tnsname.ora内容: # tnsnames.ora Network Configuration #File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. TEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ydxz-5f49a22351)(PORT = 1521)) (CONNECT_DATA = (SERVER = shared) (SERVICE_NAME = test) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ydxz-5f49a22351)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )

oracle远程访问的安全问题

Oracle远程访问的安全问题 问题来源: 1.客户端错误操作。上层对数据库的损坏性操作。 2.来自网络中的恶意程序的运行。 解决方案 1.通过远程oracle数据库本身的安全策略可以解决问题(1). Oracle提供的主要安全性措施如下: 身份认证功能(Authentication):识别访问个体的身份 数据访问的机密性(Confidentialty):保证敏感数据访问的机密性。 数据完整性(Integrity):保证数据不被篡改。 授权能力(Authorization):保证被授权用户对数据的查询和修改能力。 访问控制(Access Control):确定对指定数据的访问能力。 审计能力(Auditing):提供监测用户行为的能力。 私有性(Privacy):提供对敏感数据访问的私密性。 高可用性(Availability):保证数据和系统提供不间断服务的能力。 代理管理能力(Delegated Administration):提供对用户帐号的集中管理功能。 用户权限控制(Privilege) Oracle通过角色(Role),权限(Privilege)等的一系列授予(Grant)和回收(R evoke)操作可以有效的进行用户的权限控制。 通过权限控制我们可以实现: 某个特定用户只能读取而不能修改另一个用户的表数据。 某个特定用户只能运行Oracle数据库系统的几个存储过程或者函数。 某个特定用户自己能够拥有修改某些数据的权力,但是却无法给其它不拥有这个权限的用户授予修改该数据的权力。 某个特定用户可以读取数据但是无法创建新的表空间。 虚拟专用数据库(VPD) 虚拟专用数据库(VPD) 也称为细粒度访问控制,它提供强大的行级安全功能。它是在Oracle8i 中推出的,已经受到广泛的欢迎。 VPD 的工作方法是,通过透明地更改对数据的请求,基于一系列定义的标准向用户提供表的局部视图。在运行时,所有查询都附加了谓词,以便筛选出准许用户看到的行。 也就是通过VPD的设置,我们可以做到行级安全性控制,特定的用户即使对一张表有读取权限,那么也只能看到符合自身权限的记录。 注意,在Oracle10g版本中,VPD得到增强,已经可以实现字段级的安全性控制了。实例及搭建步骤参看:利用VPD细粒度访问策略实现行级安全性Step By Step

配置Oracle数据库连接串

配置Oracle数据库连接串 1、点击:开始—>程序—>Oracle - OraHome81—>Network Administration—>Net8 Configuration Assistant 启动 Net8 Configuration Assistant如下图: (图ORCL_01) 2、选择本地网络服务名配置,点击下一步。 (图ORCL_02) 3、选择添加,点击下一步

(图ORCL_03) 4、选择Oracle8i数据库或服务,点击下一步 (图ORCL_04) 5、在上图中输入全局数据库名,(勿必与安装ORACLE服务器时输入的全局数据库名一致。如:ORCL)点击下一步。 (图ORCL_05)

6、选择TCP协议,点击下一步。 (图ORCL_06) 7、填入实际数据库服务器的主机名(请使用IP地址),如主机名为:192.168.0.1, 选择请使用标准端口号1521, 点击下一步。 (图ORCL_07) 8、选择:是,进行测试,点击下一步。

(图ORCL_08) 9、在上图中如果提示测试不成功,请点击后退按钮,检查在图ORCL_04中输入的全书数据库名是否正确,检查图ORCL_05中选择的是否是TCP协议,检查图ORCL_06中输入的主机名(IP地址)是否正确。 如果上图中提示测试成功,则点击下一步。(请确保测试成功) (图ORCL_09) 10、在上图中输入网络服务名为:Ecom1.3 (请确保输入为Ecom1.3) 点击下一步。

(图ORCL_10)11、在上图中选择否,点击下一步。 (图ORCL_11)12、点击下一步。

linux远程连接oracle数据库

远程连接Oracle数据库 1. 测试项目 a. 通过Java程序远程连接Oracle 10g数据库 b. 通过客户端远程连接Oracle 10g 数据库 2. 测试环境 服务器端:RHEL 5.4 (安装在VMWare 6.5上) 数据库:Oracle 10g (安装在RHEL 5.4上,具体安装方法请Baidu或Google) 客户端:Windows 7 (已配置好Java环境) 客户端软件:PL/SQL Developer 7.1.5 3. IP的设置 a. 确保客户端和服务器端能ping通, 本服务器端的IP:192.168.0.101 ,如下图: 本客户端的IP:192.168.0.105,如下图:

设置完IP后,ping服务器通过,如下图: 4. 配置服务器端 a. 配置oracle的监听,文件listener.ora 和tnsnames.ora。所在目录为$ORCLE_HOME/network/admin/ 本服务器的listener.ora配置,添加如下红框内容,根据自己的目录和SID做相应更改。

本服务器的tnsnames.ora配置: 到此,服务器端已经配置完成了。在远程连接的时候最好先把防火墙禁用了,在服务器端可以用以下命令查看

5. 客户端 服务器端配置好以后,在客户端查看是否监听,如下图: 6. Java程序远程连接oracle 连接oracle的java代码如下: 运行的结果如下:

7. 客户端远程连接oracle 要通过客户端连接到oracle,也需要在本地配置监听,找到自己的客户端配置文件tnsnames.ora,添加如下内容: 连接测试如下: 到此,已全部测试完成,成功。祝君好运!

PLSQL Developer连接本地Oracle11g 64位数据库无链接为

1.登录PL/SQL Developer 这里省略Oracle数据库和PL/SQL Developer的安装步骤,注意在安装PL/SQL Developer软件时,不要安装在Program Files (x86)目录下,不然无法启动PL/SQL Developer。 奇怪这里为什么选择不到数据库的TNS呢?我是先安装数据库,再安装 PL/SQL Developer。按理说安装PL/SQL Developer时,就已经识别到了Oracle Home 和OCI Libaray了。管它呢?先以非登录方式登录PL/SQL Developer,设置Oracle Home和OCI Libaray。 在Oracle Home这选项下,没有自动识别到Oracle Home目录,于是手动指定Oracle Home路径。

点击“确定”,退出PL/SQL Developer,再次登录。 还是选择不到数据库TNS,尝试无数据库登录,看看报什么错误。

终于找到问题的关键点了,安装的PL/SQL Deleloper只能识别32的oci.dll。看来是要安个64位的PL/SQL Deleloper,于是在网上搜索PL/SQL Deleloper 64位版本。然而发现PL/SQL Deleloper不区分64位和32位。那看来只能从oci.dll入手了。根据上面的报错信息来看,似乎只要安装一个32位版本的Oracle Client。 2.安装oracle Clinet 首先到Oracle官网上去下载一个Oracle 11g Client,不过需要先申请一个Oracle 帐号,才能下载。 目前下载地址: https://www.doczj.com/doc/ed12449054.html,/technetwork/database/features/instant-client/index-0 97480.html 这个一个绿色版的Oracle Client,因此只要需要解压了,就可以是。将下载的Oracle Client文件instantclient-basic-win32-11.2.0.1.0.zip解压到C盘(注意啦!不能下64位的)。然后在解压后的C:\instantclient_11_2目录下新建NETWORK\ADMIN目录,在ADMIN目录下新建tnsnames.ora文件,添加数据库TNS。

Oracle sqlplus远程连接数据库

Oracle sqlplus远程连接数据库 sqlplus username/password@yunSID_192.168.1.5 公司使用linux开发机进行程序开发时,由于开发用Oracle数据库是由日方提供,所以经常使用sqlplus连接到远程数据库上进行开发,例如: sqlplus username/password@servicename 于是想,用我的两台电脑双机互联试一试,也玩个“远程连接”。实验如下: 首先在我的台式机上安装了Oracle9i的数据库管理系统,并建立了一个数据库实例:xy 然后为该实例新增了一个用户,用户名和密码都是kxy01。启动实例xy后,在台式机上,直接在cmd环境键入:sqlplus kxy01/kxy01@xy就可以连接上数据库,呵呵,想来本地连接都是不费吹灰之力就行的。 之后,在我的笔记本上安装了Oracle9i的Client工具。然后试着直接用上述命令访问,显然是不行的,系统返回无法解析服务名的错误信息。 要实现连接到远程数据库,先了解一下相关知识吧,查了一下书。原来,Oracle 数据库的远程连接是通过Oracle Net实现的。在服务器和客户端都必须运行有配置正确的Oracle Net才可以。不管使用的配置和配置工具如何,都应该告诉Oracle Net怎样找到远程数据库。 要怎么配置Oracle Net呢。点开Oracle的开始菜单,寻找相关的工具,发现一个名为: Net Configuration Assitant的工具,应该就是它了。启动之: Net Configuration Assitant共提供了4个配置功能: 监听程序配置, 命名方法配置, 本地网络服务名配置 目录使用配置。 要从远程位置连接Oracle数据库,必须配置Oracle网络监听程序。Net Configuration Assitant可以用于此项配置工作,启动后选择监听程序配置,一路下一步即可。之后点开命名方法配置,系统已经默认提供了三种,其他两种也不太认识,干脆不改了,直接点后退,回到主菜单。 主菜单中,第三项是本地网络服务名配置。要通过网络访问Oracle数据库或其他服务,要使用网络服务名,该项配置允许使用由本地命名解析的网络服务名。而第四项为目录使用配置,点开一看,居然要选择目录服务器,我这一共就两台电脑,要什么目录服务,看来第四项不适合本实验了,显然,关键配置就在第三项:本地网络服务名配置。 将其点开,选择“添加”网络服务名操作,然后会询问你希望访问何种版本的Oracle 数据库服务。按照常理,我装的是Oracle9i自然应该选择第一个(Oracle8i或更高版本数据库服务),可经过实践证明,只有选择第二个(Oracle8i发行版8.0数据库或服务)才能正常实现远程连接,不明其中原因,也就只有选第二个拉。 然后输入我的数据库实例SID:xy 然后选择网络协议,双机互联应该选择TCP吧,再然后填写数据库所在的主机名:kxyhome。端口号采用默认的1521。 点击下一步,进行数据库连接的测试,测试成功后进行网络服务名的填写,这个

ORACLE10G安装过程成功解决网络配置检测

Oracle10g安装过程成功解决网络配置检测: 注:ORACLE的安装路径中不能出现中文字符及空格(这也是Oracle为什么不能安装到C:\Program Files的原因),否则即使使用如下配置Microsoft LoopBack Adapter网络配置检测也不能通过。 在安装ORACLE10G前系统会检测安装的一些前提条件是否满足,往往会提示说:将Microsoft LoopBack Adapter配置为系统的主网络适配器。如果你没有这样配置,且你不希望安装过程由于这个而出错,那么过程如下: (1)停掉当前的网络连接(安装时只开通下面创建的Microsoft loopback Adapter,所有的其他网络连接都停掉); (2)控制面板-->添加硬件-->下一步-->是,我已经连接了此硬件-->添加新硬件-->安装我手动从列表选择的硬件-->网络适配器-->microsoft-->Microsoft loopback Adapter-->下一步-->安装完成 添加完成,你会发现新建了个“本地连接”,用的就是这个假的“Microsoft Loopback Adapter”(因为我根本就没有连接这个硬件,只是骗下Oracle而已)。把这个本地连接的IP设下(如192.168.0.1); (3)好了,现在回去重新让Oracle检测一遍吧,肯定是通过了。 应用程序访问方式:访问当前本地连接地址(Microsoft loopback Adapter是否该关闭?记得非常成功的一次是最好关闭),例如Microsoft Loopback Adapter的IP为192.168.0.1,而我当前网络的对外通路(即本地)连接为192.168.0.2,则访问此Oracle的地址为192.168.0.2 〖经验〗 (1)如果在安装时没有停掉本地连接,只是拔掉网线,网络断开,则仍可正确安装和使用,只是在开启Oracle10g服务之前必须开启Microsoft Loopback Adapter,否则Oracle10g服务无法启动. 在网络上其他机器Oracle9i Console连接此Oracle10g服务时使用sys之SYSDBA身份可以正常登录,而system提示授权不足无法登录 (2)如果在安装时没有停掉本地连接,也没有拔掉网线,而使本机在网络连通状态下,又如上配置Microsoft Loopback Adapter并开启,如此安装仍可成功,并且PLSQL、SQLPLUS 等Oracle10g环境下都可正常访问,但是局域网中的其他Oracle9i Console也无法连接此Oracle10g服务,而且本机和网络中的java程序都无法访问,apache-tomcat-6.0.14控制台将打印以下错误: 2007-10-823:31:47org.apache.catalina.startup.HostConfig checkResources 信息:Reloading context[/P54_AutoRefresh] java.sql.SQLException:Io异常:The Network Adapter could not establish the connection at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333) at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:404) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314) at java.sql.DriverManager.getConnection(DriverManager.java:548) at java.sql.DriverManager.getConnection(DriverManager.java:179) at classmate.DB.(DB.java:16)

相关主题
文本预览
相关文档 最新文档