显示标签为“恶补Oracle”的博文。显示所有博文
显示标签为“恶补Oracle”的博文。显示所有博文

2007年7月12日

sqlplus 里 backspace 键的映射

登到远端 redhat + Oracle 10g,
进入 SQLPLUS 里面按 backspace 键不能删除字符,总是不停的出现 ^H ,

修改 Gnome-Terminal 里的“兼容性设置”,
将“按 backspace 产生” 从 “ctrl+H” 改成 “ASCII DEL”,再按 backspace 可以删除前面的字符了,
可是到了AIX上面又不行了,在 ksh/vt100下面全是 ^?

后来在网上找到一个修正的办法:

Add the following line to your .login file:
    stty erase ^H
This will make backspace work correctly in your sqlplus session.

将 stty erase ^H 加入到启动脚本(如 redhat 的 .bash_profile,或 .profile等 )即可解决

stty 是用来显示和修改虚拟终端特殊键键值定义的,这是一个历史遗留问题。
最早的终端键盘只有标准的ASCII键,所以UNIX对键码的应用非常谨慎,仔细想想 VI 为什么要用 hjkl 作为光标移动键,而不用上下左右?就是这个原因了!

用 stty -a 可以看到当前的扩展键值定义和其它传输属性:
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke



2007年6月28日

用 VIM 管理 Oracle 的 SQL 历史

本文介绍一种方法,尝试用 VIM + SQLPLUS 的方法模拟出 informix 中 dbaccess 的 SQL 读入、运行功能。


可以试试在 vim 的 .vimrc 里面定义这样的热键:

nmap <silent> <F2> :1,.y<CR>:bel new<CR>p:%!sqlplus -s user/passwd<CR>

开一个 vim 写 SQL,写完以后按 F2 就可以从开头执行到当前行

---------解释------------
:1,.y 复制从第一行到当前行
:bel new 在当前窗口下方开个窗口(容纳运行结果)
p 把SQL粘到下面的窗口
:%!sqlplus -s user/passwd 把SQL传给 sqlplus 执行
---结果:上窗口显示编辑的SQL,下窗口显示运行结果---

(你也可以修改一下,改成按 Fx 执行全文,但是我觉得“执行到当前行”更灵活一些)

至于 SQL 历史保存的问题,我写了一个脚本,名字叫 d (很眼熟吧,infomix下用的这个名子,已经成了开 dbaccess 的专用缩写),内容如下:
biff@biffasus:~/bin$ cat d
#!/bin/bash

mkdir -p $HOME/.oracle
cd $HOME/.oracle

vi $HOME/.oracle

cd -

其实什么都没干,很神奇吧(不过你的VIM版本要支持目录编辑)
vim 带参数是目录时它会显示目录下的文件供你编辑,如下:

" ============================================================================
" Netrw Directory Listing (netrw v109)
" /domain/home/biff/.oracle
" Sorted by name
" Sort sequence: [\/]$,\.h$,\.c$,\.cpp$,\.[a-np-z]$,*,\.info$,\.swp$,\.o$\.obj
" Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:exec
" ============================================================================
../
./
@@test.sql
create_t_cif_info.sql
cur_speed_test.sql
zh16encoding.sql

看到没有,目录下的SQL显示给你供选择,可以直接对SQL文件删除、改名
用光标上移、下移选择文件,回车开始编辑SQL,光标移到最后一行按 F2 开始运行

2007年6月26日

SQLPLUS微型手册

SQLPLUS微型手册

1、启动参数
sqlplus -s 使用 silent 模式(不输出版本相关信息)
Usage: SQLPLUS [ ] [[/] [@]]
[@ [ ] [ ] ...]
where ::= { -s | -? }
-s for silent mode and -? to obtain version number

userid/password@db -- Connection details
/nolog -- Do not login to Oracle. You will need to do it yourself.
-s or -silent -- start sqlplus in silent mode. Not recommended for beginners!
@myscript -- Start executing script called "myscript.sql"



2、查看帮助
> help set
显示关于 set 命令的帮助
> help TOPIC
显示所有可以提供的帮助信息


3、调用SQL语句
> r
执行上一条SQL,与输入 / 效果相同

> r 2
执行缓存里编号为2的SQL

> @ nn
执行当前目录下的 nn.sql 文件


4、保存SQL语句
> save nn
将当前语句存入 nn.sql
> save nn app
将当前语句追加到 nn.sql
>help save
SAV[E] [FILE] file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]]


5、查看表和表结构
>select * from tab;
>select table_name from user_tables;
>desc mytable;


6、改密码
> grant connect to identified by ;


7、配置监听器访问远程主机
修改 $ORACLE_HOME/network/admin/tnsnames.ora ,加入远程主机信息,格式:
local_SID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
(CONNECT_DATA = (SID = remote_SID))
)
local_SID 给远程主机取的本地名字
HOST 写IP地址
remote_SID 远程连接的库实例名

然后 'sqlplus user/pass@local_SID'


7、使用 & 操作
> select &amp;name from dual;
Enter value for name: *
old 1: select &name from dual
new 1: select * from dual

D
-
X



8、用sqlplus启动和停止实例
$> sqlplus /nolog
> conn system/passwd as sysdba
然后就可以
> startup 启动实例
> shutdown 关闭实例


9、初始化 sqlplus 的环境变量
. oraenv
export ORACLE_SID=[orcl] ? orcl


(摘译自:http://thomas.eibner.dk/oracle/sqlplus/ , 还可以参考 http://orafaq.com/faqplus.htm )

整合 SQLPLUS & VIM

习惯是一种很有意思的事情:有人把 Linux 改成 windows 的操作方式,觉得这样更易用;有人在 Windows 下面加入 linux 的功能,这样顺手点。
在 informix 的 dbaccess 下习惯了整合 vi 进行编辑,现在进到 sqlplus 第一句话就是“怎么不能用 VI 编辑?”。没办法,习惯了 VIM,不扩展一下真的没法用!

在网上查了一下,大致方法有:


1、在 sqlplus 里设置环境变量 set editor=vim

可以每次在 sqlplus 里输入,或写在 $ORACLE_HOME/sqlplus/admin/login.sql里面每次启 sqlplus 时自动调用。也可以写在 .bashrc 里面,加一句 export EDITOR=vim

然后在 sqlplus> 提示符下输入 edit nn.sql 就调用 vi 编辑 nn.sql 文件了
编辑完毕以后 :wq 保存退出,用 @nn 可以调用 nn.sql ( edit 可以用缩写 ed 代替)

其原理说白了就是调用 vi 编辑当前目录下的 nn.sql 文件(因为文件名没有带路径),保存以后用 @nn 命令调用当前目录 nn.sql

这种方法很原始,最不爽的就是会在当前目录下产生很多 SQL 文件,有用没用的都混在一起了。

参考自:http://www.oracle.com/technology/global/cn/pub/articles/kalosi_vim.html (这篇文章实在头重脚轻,长篇大论讲VIM,讲得也不怎么样,只在结尾提了一下 SQLPLUS 设置)



2、直接在 VIM 里面调用 sqlplus
在shell环境下启动 vim 编写 nn.sql ,如
$> vi nn.sql
select * from tab;
然后在 VIM 里面执行命令 : :%!sqlplus -s system/passwd ,如果有错误信息或执行产生的显示数据都会进入到当前文本。

原理:
sqlplus -s user/pass 用 -s 参数屏蔽 sqlplus 的版本信息,后面跟帐号和密码
!command 是 vim 执行外部命令的方式,如 !ls 就是在 vim 里面调用 ls 命令列出工作目录下的文件
% 号是命令执行的范围,%表示全部。当然也可以用 : :3,15 !sqlplsu -s user/pass 来调用 sqlplus 执行第 3~15 行的SQL语句

这种方法很值得一试:首先,工作环境完全变成 vim,对于熟悉 VIM 的用户来说可以在 VIM 里输入、执行SQL,然后操作结果进入到了 VIM 里面可以接着用 VIM 查看、编辑、过滤,一箭双雕

参考:http://www.oracleadvice.com/Tips/UXvi-sqlplus.htm (很不错的oracle技术网站,文章都是短小精干)

2007年6月25日

开篇语:恶补Oracle

很久以前把 Oracle 当 Access 用了两年
现在真的要在 Oracle 上搞开发了,才悔不当初

刚在笔记本的 Linux 上装了个 Oracle 10g
乱码、缺文件、建库报错、监听启动失败。。。。
折腾得够受

然后才发现
竟然完全不知道怎么关闭,只好 KILL 了,够暴力的
KILL掉以后麻烦又来了,该怎么启动呢,急人哟

恨 Linux 怎么就没有个图形界面的图标让我点击呢

只能从零开始了!!