参数 | 说明 |
---|---|
操作系统环境 | 建议采用RHEL5.8 (32位或64位系统),内核kernel-release版本大于2.6.32-100 |
物理内存 | 建议大于1G(最低2G)(内存最低要求是1026M,由于1G内存大小的机器,实际上不到1G,所以最低要求是2G物理内存) |
硬盘空闲空间 | 至少8GB |
交换区空间 | 建议大于4GB(2倍物理内存空间) |
tmpfs | df -h 命令查找,最好大约800M |
tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,temfs主要存储暂存的文件。
linux内核中的VM子系统负责在后台管理虚拟内存资源Virtual Memory,即RAM和swap资源,透明地将RAM页移动到交换分区或从交换分区到RAM页,tmpfs文件系统需要VM子系统的页面来存储文件。tmpfs自己并不知道这些页面是在交换分区还是在RAM中;做这种决定是VM子系统的工作。tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存。
tmpfs基于内存,因而速度是相当的,另外tmpfs使用的VM资源是动态的,当删除tmpfs中文件,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,当然在其中创建文件时也会动态的分配VM资源。另外,tmpfs不具备持久性,重启后数据不保留,原因很明显,它是基于内存的。
编译内核时,启用“Virtual memory file system support”就可以使用tmpfs,linux kernel从2.4以后都开始支持tmpfs。目前主流的linux系统默认已启用tmpfs,如Redhat。
看到dev大家都使知道它是一个设备文件。使用tmpfs文件系统,在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。如我的虚拟机装的是CentOS6.0,分配内存为2G,所以/dev/shm为1G左右。
[root@yujxtest ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 18G 21G 46% /
tmpfs 939M 447M 493M 48% /dev/shm
/dev/vdb1 9.9G 2.7G 6.7G 29% /mnt
tmpfs是基于内存的文件系统,创建时不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改为900M.
[root@yujxtest ~]# vi /etc/fstab
tmpfs /dev/shm tmpfs defaults 0 0
修改为
tmpfs /dev/shm tmpfs defaults,size=900M 0 0
之后再命令行执行下面语句
[root@yujxtest etc]# mount -o remount /dev/shm
就可以查看到tmpfs已经被修改了
[root@yujxtest etc]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 18G 21G 46% /
tmpfs 900M 447M 454M 50% /dev/shm
/dev/vdb1 9.9G 2.7G 6.7G 29% /mnt
[root@yujxtest etc]# mount -t tmpfs shmfs -o size=7g /dev/shm
tmpfs是基于内存的,速度是不用说的,硬盘和它没法比。
Oracle 中的Automatic Memory Management特性就使用了/dev/shm。
swap是Linux的虚拟内存,即在硬盘上开辟空间当内存不够时充当内存使用, 因此可以理解为当/dev/shm空间不够时可以占用swap的空间
Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢
复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。有的程序会打开一些文件,对文件进行读写,当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中 的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out ofmemory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。 另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap 交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并 不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。
swapoff /opt//swapfile
rm -rf /opt//swapfile
然后按照上面1.2.4上面的步骤重新进行交换分区的分配。
[root@yujxtest ~]# yum groupinstall -y "X Window System"
[root@yujxtest ~]# yum groupinstall -y "Desktop"
[root@yujxtest ~]# yum install -y tigervnc-server
[root@yujxtest ~]# chkconfig --level 345 vncserver on
[root@yujxtest ~]# vncserver
You will require a password to access your desktop.
Password:
Verify:
修改 /root/.vnc/xstartup文件
[root@yujxtest ~]#vi /root/.vnc/xstartup
把最后的 twm & 删掉 添加以下内容。
gnome-session &
修改/etc/sysconfig/vncservers 文件
[root@yujxtest ~]# vi /etc/sysconfig/vncservers
添加以下内容
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 1200x800"
[root@yujxtest ~]# service vncserver restart
由于安装oracle也是会有图形界面的,所以在创建完oracle用户后再他下面也要配置vnc
[root@yujxtest ~]# su - oracle
[oracle@yujxtest ~]# vncserver
You will require a password to access your desktop.
Password:
Verify:
[root@yujxtest ~]# vi /etc/sysconfig/vncservers
添加以下内容
VNCSERVERS="1:root 2:oracle"
VNCSERVERARGS[1]="-geometry 1200x800"
通过hosts文件实现域名解析
[root@yujxtest ~]# vi /etc/hosts
前面的注释掉
然后在里面添加
127.0.0.1 localhost
主机ip yujxtest
注意:主机ip是在hosts本来有的,引用就可以了
修改完后,重启电脑
[root@yujxtest ~]# reboot
[root@yujxtest ~]# vi /etc/sysctl.conf
修改内容如下(oracle注释后面的内容)
kernel.msgmax = 65536
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
#net.ipv6.conf.all.disable_ipv6 = 1
#net.ipv6.conf.default.disable_ipv6 = 1
#net.ipv6.conf.lo.disable_ipv6 = 1
########oracle######
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
重新加载内核
[root@yujxtest ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
[root@yujxtest ~]#yum -y install binutils compat-libstdc++-33 compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc glibc-common glibc-devel glibc-devel glibc-headers ksh libaio libaio libaio-devel libaio-devel libgomp libgcc libgcc libstdc++ libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC unixODBC-devel unixODBC-devel pdksh
查询安装的软件包
[root@yujxtest ~]# rpm -q binutils compat-libstdc++-33 compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc glibc-common glibc-devel glibc-devel glibc-headers ksh libaio libaio libaio-devel libaio-devel libgomp libgcc libgcc libstdc++ libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC unixODBC-devel unixODBC-devel pdksh
groupadd oinstall (创建安装组)
groupadd dba (创建管理组)
useradd -g oinstall -G dba oracle (创建运行用户oracle,并指定其私有组为oinstall,附加组为dba)
passwd oracle (设置oracle用户密码,如:123abc)
[root@yujxtest ~]# groupadd oinstall
[root@yujxtest ~]# groupadd dba
[root@yujxtest ~]# useradd -g oinstall -G dba oracle
[root@yujxtest ~]# passwd oracle
Changing password for user oracle.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
mkdir /opt/oracle
chown -R oracle:oinstall /opt/oracle (递归修改oracle安装目录的所有者和隶属组分别为:oracle用户,oinstall组)
chmod -R 775 /opt/oracle (递归修改oracle安装目录的权限为755,即:oracle用户为rwx权限、oinstall组权限、其它用户权限均为rx)
[root@yujxtest ~]# mkdir /opt/oracle
[root@yujxtest ~]# chown -R oracle:oinstall /opt/oracle
[root@yujxtest ~]# chmod -R 775 /opt/oracle
[root@yujxtest ~]# vi ~oracle/.bash_profile
在 ~oracle/.bash_profile增加oracle用户的环境配置
###### for oracle ######
umask 022
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export ORACLE_SID=orcl
#export LANG=zh_CN.UTF-8
export LANG=en_US.UTF-8
export NLS_LANG="AMERICAN_AMERICA".ZHS16GBK
export PATH=$ORACLE_HOME/bin:$PATH
[root@yujxtest ~]# vi /etc/pam.d/login
在里面新增2条语句
session required /lib/security/pam_limits.so
session required pam_limits.so
[root@yujxtest ~]# vi /etc/security/limits.conf
新增如下:
####oracle####
oracle soft nproc 2047 #进程数软限制
oracle hard nproc 16384 #进程数硬限制
oracle soft nofile 1024 #文件数软限制
oracle hard nofile 65536 #文件数硬限制
oracle soft stack 10240 #堆栈的软限制
[oracle@yujxtest ~]$ unzip linux.x64_11gR2_database_1of2.zip
[oracle@yujxtest ~]$ unzip linux.x64_11gR2_database_2of2.zip
[oracle@yujxtest ~]$ ls
database Documents linux.x64_11gR2_database_1of2.zip Music Pictures Templates
Desktop Downloads linux.x64_11gR2_database_2of2.zip oradiag_oracle Public Videos
[oracle@yujxtest~]$ cd database/
[oracle@dbserver database]$ ./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 65023 MB Passed
Checking swap space: must be greater than 150 MB. Actual 3999 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2017-04-03_07-58-48PM. Please wait ...[oracle@yujxtest database]$
进入到图形界面安装
上面的 I wish to 那行不要选择,对号去掉后跳转到next
选择yes跳转到下面
当上图这个步骤提示INS-32055 直接选择yes进行下一步
上面的failed的安装包是由于需要32位机器的安装包,我们用rpm来安装这些包,安装这些包的时候要注意包的安装顺序,如下
[root@yujxtest rpm]# ls -lrt
total 2404
-rw-r--r--. 1 root root 237109 Jan 18 2007 compat-libstdc++-33-3.2.3-61.i386.rpm
-rw-r--r--. 1 root root 754208 Jan 18 2007 unixODBC-devel-2.2.11-7.1.i386.rpm
-rw-r--r--. 1 root root 60619 Mar 18 2011 libgcc-3.4.6-3.i386.rpm
-rw-r--r--. 1 root root 173189 Mar 23 2013 pdksh-5.2.14-1.i386.rpm
-rw-r--r--. 1 root root 32585 Jul 6 2015 libaio-devel-0.3.106-2.i386.rpm
-rw-r--r--. 1 root root 19798 Jul 6 2015 libaio-0.3.106-5.i386.rpm
-rw-r--r--. 1 root root 290023 Jul 6 2015 libstdc++-3.4.6-11.i386.rpm
-rw-r--r--. 1 root root 851485 Jul 6 2015 unixODBC-2.2.11-7.1.i386.rpm
-rw-r--r--. 1 root root 19530 Jul 7 2015 libaio-0.3.106-3.2.i386.rpm
-rw-r--r--. 1 root root 11345 Jul 7 2015 libaio-devel-0.3.106-3.2.i386.rpm
[root@yujxtest rpm]# rpm -ivh --force libgcc-3.4.6-3.i386.rpm
Preparing... ########################################### [100%]
1:libgcc ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force libstdc++-3.4.6-11.i386.rpm
warning: libstdc++-3.4.6-11.i386.rpm: Header V3 DSA/SHA1 Signature, key ID 82fd17b2: NOKEY
Preparing... ########################################### [100%]
1:libstdc++ ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force compat-libstdc++-33-3.2.3-61.i386.rpm
warning: compat-libstdc++-33-3.2.3-61.i386.rpm: Header V3 DSA/SHA1 Signature, key ID 37017186: NOKEY
Preparing... ########################################### [100%]
1:compat-libstdc++-33 ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force libaio-0.3.106-5.i386.rpm
warning: libaio-0.3.106-5.i386.rpm: Header V3 DSA/SHA1 Signature, key ID e8562897: NOKEY
Preparing... ########################################### [100%]
1:libaio ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force libaio-0.3.106-3.2.i386.rpm
warning: libaio-0.3.106-3.2.i386.rpm: Header V3 DSA/SHA1 Signature, key ID e8562897: NOKEY
Preparing... ########################################### [100%]
1:libaio ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force libaio-devel-0.3.106-3.2.i386.rpm
warning: libaio-devel-0.3.106-3.2.i386.rpm: Header V3 DSA/SHA1 Signature, key ID 37017186: NOKEY
Preparing... ########################################### [100%]
1:libaio-devel ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force unixODBC-2.2.11-7.1.i386.rpm
warning: unixODBC-2.2.11-7.1.i386.rpm: Header V3 DSA/SHA1 Signature, key ID 82fd17b2: NOKEY
Preparing... ########################################### [100%]
1:unixODBC ########################################### [100%]
[root@yujxtest rpm]# rpm -ivh --force unixODBC-devel-2.2.11-7.1.i386.rpm
warning: unixODBC-devel-2.2.11-7.1.i386.rpm: Header V3 DSA/SHA1 Signature, key ID 37017186: NOKEY
Preparing... ########################################### [100%]
1:unixODBC-devel ########################################### [100%]
注意当提示安装pdksh安装错误的时候,你安装pdksh会报和ksh冲突,这时候需要卸载ksh,然后再安装pdksh
[root@yujxtest rpm]# rpm -e ksh-20120801-33.el6.x86_64
[root@yujxtest rpm]# rpm -ivh --force pdksh-5.2.14-1.i386.rpm
这时候会提示安装2个shell脚本的执行,另开个窗口切换到root下面执行。执行中直接按enter就可以了
[root@yujxtest ~]# sh /opt/oracle/oraInventory/orainstRoot.sh
[root@yujxtest ~]# sh /opt/oracle/product/11.2/db_1/root.sh
执行完,点击ok
创建监听器
[root@yujxtest ]# netca
查看监听器状态
[oracle@yujxtest ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-APR-2017 03:00:26
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=yujxtest)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 04-APR-2017 03:00:19
Uptime 0 days 0 hr. 0 min. 7 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/11.2/db_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/dbserver/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=yujxtest)(PORT=1521)))
The listener supports no services
The command completed successful
没有报错就说明监听器成功启动
创建数据库
利用数据库助手(dbca)创建数据库
[root@yujxtest ]# dbca
[oracle@yujxtest ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Tue Apr 4 18:43:44 2017
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba;
Connected.
SQL> create user yujx identified by yujx;
User created.
SQL> grant dba to yujx;
Grant succeeded.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
lsnrctl start(启动监听)
lsnrctl stop (关闭监听)
[oracle@yujxtest ~]$ sqlplus sys/Oracle11g AS SYSDBA;
SQL> startup
ORACLE instance started. ##oralce实例已启动
Total System Global Area 776646656 bytes
Fixed Size 2217384 bytes
Variable Size 608176728 bytes ###内存情况
Database Buffers 159383552 bytes
Redo Buffers 6868992 bytes
Database mounted. ##数据库已加载
Database opened. ##数据库已打开
[oracle@yujxtest ~]$ sqlplus sys/Oracle11g AS SYSDBA;
SQL> shutwon immeiate;
Database closed. ##数据库已关闭
Database dismounted. ##数据库已卸载
ORACLE instance shutdown. ##oralce实例关闭
instantclient-tools-linux-x86-64-11.2.0.2.0.zip
*
解压并在目录instantclient_11_2下面创建tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 120.77.206.254)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
新增用户oracle和组oinstall
修改instantclient_11_2目录拥有者oracle,所属组为oinstall修改tnsnames.ora权限,使得其他用户有读取这个文件的权限。
下面定义的代码就可以直接用数据库名调用
chown -R oracle:oinstall instantclient_11_2
chmod 644 tnsnames.ora
export NLS_LANG="Simplified Chinese_china".AL32UTF8
export LANG=en_US.UTF-8
export ORACLE_BASE=/oracle
export ORACLE_SID=orcl
export ORACLE_HOME=$ORACLE_BASE/instantclient_11_2
export TNS_ADMIN=$ORACLE_HOME
export PATH=$PATH:$HOME/bin:$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH
注意:要根据lib的实际目录定义
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH
ocilib-4.0.1-gnu.tar.gz
tar -zxvf ocilib-4.0.1-gnu.tar.gz
cd ocilib-4.0.1
./configure
make
make install
代码oci_test.c
#include
#include
#include "ocilib.h"
void ngx_oracle_err_handler(OCI_Error *err)
{
printf("ORACLE ERR-%05i - msg : %s\n", OCI_ErrorGetOCICode(err), OCI_ErrorGetString(err));
}
int main(int argc, char** argv)
{
if (OCI_Initialize (ngx_oracle_err_handler, NULL, OCI_ENV_DEFAULT) == 0){//如果初始化OCILIB库失败,就报错
printf("init OCILIB faild");
return -1;
}
printf("init OCILIB success\n")
if (OCI_ConnectionCreate("localhost:1521/orcl", "posp_yujx", "posp_yujx", OCI_SESSION_DEFAULT) == NULL) {//连接数据库
//if (OCI_ConnectionCreate("orcl", "posp_yujx", "posp_yujx", OCI_SESSION_DEFAULT) == NULL) {//当用户对tnsnames.ora有读取的权限时候,可以直接用数据库名orcl
printf("connect faild");
return -1;
}
printf("connect success\n");
return 0;
}
编译生成oci_test
gcc oci_test.c -locilib -o oci_test
代码pc_test.pc
#include
#include
#include "sqlca.h"
exec sql include sqlca;
int main(int argc, char** argv)
{
exec sql begin declare section;
char curdate[20] = {0};
exec sql end declare section;
exec sql connect:userpwd;
EXEC SQL CONNECT: "posp_yujx" IDENTIFIED BY : "posp_yujx" USING :"orcl";
if(sqlca.sqlcode == 0) {
fprintf(stderr, "connect to database success!\n");
}
else {
fprintf(stderr, "connect to database failed! error:%s\n", sqlca.sqlerrm.sqlerrmc);
return -1;
}
exec sql select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') into:curdate from dual;
fprintf(stderr, "%s\n", curdate);
return 0;
}
编译执行如下
proc parse=none iname=pc_test.pc
gcc -g -o pc_test pc_test.c -I/$ORACLE_HOME/precomp/public -L/$ORACLE_HOME/lib -lclntsh
./pc_test