2021-11-14 15:52:46 +08:00

243 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Oracle 笔记"
date: 2019-10-30T11:53:08+08:00
lastmod: 2019-10-30T11:53:08+08:00
tags: ["oracle"]
categories: ["database"]
---
## 导出一个表的表结构 sql
```sql
set heading off;
set echo off;
set pages 999;
set long 90000;
spool table_name.sql
select dbms_metadata.get_ddl('TABLE','table_name','user_name') from dual;
spool off;
```
## 到处一个用户的全部表结构 sql
```sql
set pagesize 0
set long 90000
set feedback off
set echo off
spool user_tables.sql
SELECT DBMS_METADATA.GET_DDL('TABLE',t1.table_name) FROM USER_TABLES t1;
spool off;
```
## 设置 oracle 客户端的字符集
```sql
select * from v$nls_parameters;
-- 在输出中找到 NLS_LANGUAGE、NLS_TERRITORY、NLS_CHARACTERSET 这三个变量的值
-- 环境变量 NLS_LANG 就是由这三个变量组成NLS_LANG = language_territory.charset
```
## 终端连接(ssh) sqlplus 中文乱码
- 设置该终端与数据库服务器当前字符集编码一致即可
## 修改数据库字符集
```sql
shutdown immediate; (database停了)
startup mount; (database重开去可更改情況)
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set internal_use utf8;
shutdown immediate;
startup; (重开正常oracle)
```
## Oracle 12c PDB 管理
- 查看当前模式
```sql
show con_name; -- 默认 CDB$ROOT
```
- 查看 CDB$ROOT 下所有 pdbs
```sql
select name, open_mode from v$pdbs;
-- 或者
show pdbs;
```
- 创建 PDB 数据库
```sql
create pluggable database pdborcl1
admin user pdborcl1_adm identified by pdborcl1_pass
roles=(dba,connect,resource)
file_name_convert=('/opt/oracle/app/oradata/orcl/pdbseed','/opt/oracle/app/oradata/orcl/pdborcl1')
path_prefix='/opt/oracle/app/oradata/orcl/pdborcl1';
```
- PDB 数据库创建完成后进入 mount 状态,需手动启动
```sql
alter pluggable database {pdborcl1[,pdborcl2]|all [except pdborcl2]} open [read only] [force];
```
- 进入打开的 PDB 数据库
```sql
alter session set container=pdborcl1;
```
- 切换回 CDB$ROOT
```sql
alter session set container=cdb$root;
```
- 关闭 PDB 数据库
```sql
alter pluggable database {pdborcl1[,pdborcl2]|all [except pdborcl2]} close [immediate];
```
- 删除关闭的 PDB 数据库
```sql
drop pluggable database pdborcl1 [including datafiles];
```
## sqlplus 到处 csv 文件
```sql
sqool /home/oracle/sql_result.csv
select '"' || field1 || '","' || field2 || '","' ... '","' || fieldn || '"' from table1;
spool off
```
## 系统变量
### 常用设置
- 域输出分隔符
```sql
set colsep ' ';
```
- 设置查询出来的数据分多少页显示如果需要连续的数据中间不要出现空行就把newp设置为none这样输出的数据行都是连续的中间没有空行之类的
```sql
set newp none;
```
- 显示start启动的脚本中的每个sql命令缺省为on
```sql
set echo off;
```
- 设置运行命令是是否显示语句
```sql
set echo on;
```
- 设置显示"已选择XX行"
```sql
set feedback on;
```
- 回显本次sql命令处理的记录条数缺省为on即去掉最后的 "已经选择10000行"
```sql
set feedback off;
```
- 输出域标题缺省为on 设置为off就去掉了select结果的字段名只显示数据
```sql
set heading off;
```
- 输出每页行数缺省为24,为了避免分页可设定为0。
```sql
set pagesize 0;
```
- 输出一行字符个数缺省为80
```sql
set linesize 80;
```
- 输出number类型域长度缺省为10
```sql
set numwidth 12;
```
- 显示脚本中的命令的执行结果缺省为on
```sql
set termout off;
```
- 去除标准输出每行的拖尾空格缺省为off
```sql
set trimout on;
```
- 去除重定向spool输出每行的拖尾空格缺省为off
```sql
set trimspool on;
```
- 设置允许显示输出类似dbms_output
```sql
set serveroutput on;
```
- 设置显示已用时间
```sql
set timing on;
```
- 设置允许对执行的sql进行分析
```sql
set autotrace on;
```
### 系统变量记录
- ARRAY[SIZE] {20(默认值)|n} sqlplus 一次从数据库获取的行数,有效值为1至5000. 大的值可提高查询和子查询的有效性,可获取许多行,但也需要更多的内存.当超过1000时,其效果不大.
- AUTO[COMMIT] {OFF(默认值)|ON|IMM[EDIATE]} 控制ORACLE对数据库的修改的提交. 置ON时,在ORACLE执行每个SQL命令或PL/SQL块后对数据库提交修改;置OFF时则制止自动提交,需要手工地提交修改,例如用SQL的COMMIT命令. IMMEDIATE功能同ON.
- BLO[CKTERMINATOR] {.(默认值)|C} 置非字母数字字符,用于结束PL/SQL块.要执行块时,必须发出RUN命令或/命令.
- CMDS[EP] {;|C|OFF(默认值)|ON} 置非字母数字字符,用于分隔在一行中输入的多个SQL/PLUS命令.ON或OFF控制在一行中是否能输入多个命令. ON时将自动地将命令分隔符设为分号(.其中C表示所置字符.
- COM[PATIBILITY] {V5|V6|V7|NATIVE(默认值)} 指定当前所链接的ORACLE版本.如果当前ORACLE的版本为5,则置COMPATIBILITY为V5; 为版本6时置成V6; 为版本7时置成V7. 如果希望由数据库决定该设置,在置成NATIVE.
- CON[CAT] {.(默认值)|C|OFF|ON(默认值)} 设置结束一替换变量引用的字符.在中止替换变量引用字符之后可跟所有字符,作为体会组成部分,否则sqlplus将解释为替换变量名的一部分.当CONCAT开关为ON时,sqlplus可重置CONCAT的值为点(.).
- COPYC[OMMIT] {0(默认值)|n} 控制COPY命令提交对数据库修改的批数.每次拷贝n批后,将提交到目标数据库.有效值为0到5000. 可用变量ARRAYSIZE设置一批的大小.如果置COPYCOMMIT为0,则仅在COPY操作结束时执行一次提交.
- CRT crt 改变 sqlplus RUNFORM 命令使用的缺省CRT文件.如果置CRT不包含什么,则crt仅包含''''.如果在一个Form的系统调用期间,要使用NEW.CRT(缺省CRT是OLD.CRT),可按下列形式调用Form:
```
SQL>;RUNFORM -C NEW form名
或者
SQL>;SET CRT NEW
SQL>;RUNFORM form名
# 第二中方法存储CRT选择,以致在下次运行RUNFORM命令(是在同一次sqlplus交互中)时,不需要指定.
```
- DEF[INE] {&|C|OFF|ON(默认值)} 设置在替换变量时所使用的字符.ON或OFF控制sqlplus是否扫描替换变量的命令及用他们的值代替. DEFINE的ON或OFF的设置控制SCAN变量的设置.
- ECHO {OFF|ON} 控制START命令是否列出命令文件中的每一命令.为ON时,列出命令;为OFF时,制止列清单.
- EMBEDDED {OFF(默认值)|ON} 控制每一报表在一页中开始的地方. 为OFF时,迫使每一报表是在新页的顶部开始;为ON时,运行一报表在一页的任何位置开始.
- ESC[APE] {\(默认值)|C|OFF(默认值)|ON} 定义作为Escape字符的字符.为OFF时,使Escape字符不起作用.为ON时,使Escape字符起作用.
- FEED[BACK] {6(默认值)|n|OFF|ON} 显示由查询返回的记录数.ON和OFF置显示为开或关.置FEEDBACK为ON时,等价于置n为1. 如果置FEEDBACK为0,等价于将它置成OFF.
- FLU[SH] {OFF|ON(默认值)} 控制输出送至用户的显示设备.为OFF时,运行操作系统做缓冲区输出;为ON时,不允许缓冲. 仅当非交互方式运行命令文件时使用OFF,这样可减少程序I/O总是,从而改进性能.
- HEA[DING] {OFF|ON(默认值)} 控制报表中列标题的打印.为ON时,在报表中打印列标题;为OFF时禁止打印列标题.
- HEADS[EP] {|(默认值)|C|OFF|ON(默认值)} 定义标题分隔字符.可在COLUMN命令中使用标题分隔符,将列标题分成多行.ON和OFF将标题分隔置成开或关.当标题分隔为关(OFF)时,sqlplus打印标题分隔符像任何字符一样.
- LIN[ESIZE] {80(默认值)|n} 置sqlplus在一行中显示的字符总数,它还控制在TTITLE和BTITLE中对准中心的文本和右对齐文本. 可定义LINESIZE为1至最大值,其最大值依赖于操作系统.
- LONG {80(默认值)|n} 为显示和拷贝LONG类型值的最大宽度的设置. 对于ORACLE7, n的最大值为2G字节;对于版本6,最大值为32767.
- LONGC[HUNKSIZE] {80(默认值)|n} 为sqlplus检索LONG类型值的增量大小.由于内存的限制,可按增量检索,该变量仅应用于ORACLE7.
- MAXD[ATA] n 置sqlplus可处理的最大行宽字符数,其缺省值和最大值在不同操作系统中是可变的.
- NEWP[AGE] {1(默认值)|n} 置每一页的头和顶部标题之间要打印的空行数.如果为0, 在页之间送一换号符,并在许多终端上清屏.
- NULL text 设置表示空值(null)的文本,如果NULL没有文本,则显示空格(缺省时). 使用COLUMN命令中的NULL子句可控制NULL变量对该列的设置.
- NUMF[ORMAT] 格式 设置显示数值的缺省格式,该格式是数值格式.
- NUM[WIDTH] {10(默认值)|n} 对显示数值设置缺省宽度.
- PAGES[IZE] {14(默认值)|n} 置从顶部标题至页结束之间的行数.在11英寸长的纸上打印报表,其值为54,上下各留一英寸(NEWPAGE值为6).
- PAU[SE] {OFF(默认值)|ON|text} 在显示报表时,控制终端滚动.在每一暂停时,必须按RETURN键.ON将引起sqlplus在每一报表输出页开始时暂停.所指定的文本是每一次sqlplus暂停时显示的文本.如果要键入多个词,必须用单引号将文本括起来.
- RECSEP {WR[APPED](默认值)|EA[CH]|OFF} 指定显示或打印记录分行符的条件.一个记录分行符,是由RECSEPCHAR指定的字符组成的单行.空格为RECSEPCHAR的默认字符.
- RECSEPCHAR { |C} 告诉sqlplus在哪儿做记录分隔.例如将RECSEP置成WRAPPED,在每一缠绕行之后,打印记录分行符.如果将RECSEP置成EACH,sqlplus在每一行后打印一记录分行符.如果将RECSEP置成OFF, sqlplus不打印分行符.
- SCAN {OFF|ON(默认值)} 控制对存在的替换变量和值的扫描.OFF禁止替换变量和值的处理; ON则允许正常处理.
- SERVEROUT[PUT] {OFF|ON} [SIZE n] 控制在sqlplus中的存储过程是否显示输出.OFF时为禁止; ON时则显示输出. SIZE设置缓冲输出的字节数,缺省值为2000, n不能小于2000或大于一百万.
- SHOW[MODE] {OFF(默认值)|ON} 控制sqlplus在执行SET命令时是否列出其新老值old或new的设置.
- SPA[CE] {1(默认值)|n} 设置输出列之间空格的数目,其最大值为10.
- SQLC[ASE] {MIX[ED](默认值)|LO[WER]|UP[PER]} 先于执行之前,将SQL命令和PL/SQL块的大小写进行转换. sqlplus将转换命令中的全部文本,包括带引号的直接量和标示符.SQLCASE不改变SQL缓冲区本身.
- SQLCO[NTINUE] {>;(默认值)|文本} 在一附加行上继续一sqlplus命令时,sqlplus以该设置的字符序列进行提示.
- SQLN[UMBER] {OFF|ON(默认值)} 为SQL命令和PL/SQL块的第二行和后继行设置提示.为ON时,提示行号;为OFF时,提示设置为SQLPROMPT的值.
- SQLPER[FIX] {#(默认值)|C} 设置sqlplus前缀字符.在键入一SQL命令或PL/SQL块时,可在单独行上键入一sqlplus命令,由sqlplus的前缀字符做前缀. sqlplus直接执行该命令,不影响SQL命令或PL/SQL块.前缀字符必须是非字母数字字符.
- SQLP[ROMPT] {SQL>;(默认值)|文本} 设置sqlplus的命令提示符.
```
11:37:45 SQL> show sqlprompt
sqlprompt "SQL> "
11:38:21 SQL> set sqlprompt Jamm>
11:39:54 Jamm>show sqlprompt
sqlprompt "Jamm>"
11:40:03 Jamm>
```
- SQLT[ERMINATOR] {;(默认值)|C|OFF|ON(默认值)} 设置用于结束和执行SQL命令的字符. OFF意味着sqlplus不识别命令终止符,用键入空行来结束SQL命令. ON重设置终止符为默认的分号.
- SUF[FIX] {SQL(默认值)|文本} 设置缺省文件的后缀,sqlplus在命令中使用,来引用命令文件. SUFFIX不控制输出(spool)文件的扩展名.
- TAB {OFF|ON(默认值)} 决定sqlplus在终端输出中如何格式化空白空间. 为OFF时,在输出中使用空格格式化空白空间;为ON时,用TAB字符. TAB的缺省值依赖于系统,用SHOW TAB命令可查看该缺省值.
- TERM[OUT] {OFF|ON(默认值)} 控制由文件执行命令所产生的输出的显示. OFF禁止显示,以致从一个命令文件假脱机输出,在屏幕上看不到输出. ON时显示输出. TERMOUT OFF 不影响交互地进行命令的输出.
- TI[ME] {OFF(默认值)|ON} 控制当前日期的显示. ON时,在每条命令提示前显示当前时间; OFF时禁止时间的显示.
```
11:37:54 SQL> set time off
SQL> set time on
11:38:21 SQL>
```
- TIMI[NG] {OFF(默认值)|ON} 控制时间统计的显示. ON时,显示每一个运行的SQL命令或PL/SQL块的时间统计; OFF时,禁止每一个命令的时间统计.
- TRIM[OUT] {OFF|ON(默认值)} 决定sqlplus在每一显示行的末端是否允许带空格. ON时将每行尾部的空格去了,特别当从慢速的通信设备存取sqlplus时可改进性能; OFF时允许sqlplus显示尾部的空格.TRIMOUT ON 不影响假脱机输出. 设置TAB ON时,sqlplus忽略TRIMOUT ON.
- UND[ERLINE] {-(默认值)|C|OFF|ON(默认值)} {-(默认值)|C|OFF|ON(默认值)} 设置用在sqlplus报表中下划线列标题的字符. ON或OFF将下划线置成开或关.
- VER[IFY] {OFF|ON(默认值)} 控制sqlplus用值替换前、后是否列出命令的文本. ON时显示文本;OFF时禁止列清单.
- WRA[P] {OFF|ON(默认值)} 控制sqlplus是否截断数据项的显示. OFF时截断数据项;ON时允许数据项缠绕到下一行. 在COLUMN命令中使用WRAPPED和TRUNCATED子句可控制对指定列的WRAP的设置.
## 参考
- [https://blog.csdn.net/lfc453048573/article/details/12956191](https://blog.csdn.net/lfc453048573/article/details/12956191)