3. Oracle 知识点
最后更新于:2022-04-02 07:44:39
#### Oracle 字符集 知识点
数据库字符集:(按照开发要求)
国家字符集:(默认)
客户端(NLS_LANG)
```shell
NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页
或者对于unicode应用设置为UTF8
```
#### startup,startup mount,startup nomount之间的区别
```html
startup nomount选项:(读初始化参数文件,启动实例)
startup nomount选项启动实例,但不安装数据库。当数据库以这个模式启动时,参数文件被读取;后台进程和内存结构被启动;但它们不被附加或与数据库的磁盘结构进行通信。当实例处于这个状态时,数据库是不可使用的。
通常启动到这里可以做create database , create or recreate control file 或者是mount standby database等动作,修改parameter也是可以的。
startup mount 选项:(打开控制文件)
startup nount选项执行STARTUP NOMOUNT选项的所有工作,但另外附加数据库结构并与这些结构进行交互。这时Oracle从它用来查找和附加到主要数据库结构的控制文件中获得信息。当处于这个模式时,可以执行一些管理型任务,比如恢复。
读取control file
通常启动到这里的目的有
recover dtabase ; backup database ; rename db files ,change archivelog mode等
startup open 选项:(打开数据文件,日志文件)
如果STARTUP命令行上没有指定任何模式,STARTUP OPEN选项就是默认的启动模式。STARTUP OPEN选项执行STARTUP NOMOUNT和STARTUP MOUNT选项的所有步骤。这个选项把数据库变成对所有用户都时可用的。
open datafile ,online redo log
startup force选项:
如果在用正常方式启动数据库时遇到了困难,可以使用STARTUP FORCE选项。STARTUP FORCE选项首先异常关闭数据库,然后重新启动它。
STARTUP RESTRICT选项:
STARTUP RESTRICT选项启动数据库并把它置入OPEN模式,但只给拥有RESTRICTED SESSION权限的用户赋予访问权。
```
#### Oracle导出表补全
> deferred_segment_creation在11.2.0.4版本的新增参数,默认是true。
这会导致在exp时,没有segment的对象不会导出。
解决:
1. 设置deferred_segment_creation的值为false
此方法只对以后的表有效,之前的表还是没分配空间。
```sql
alter system set deferred_segment_creation=false scope=both;
```
2. 创建表的时候声明立即创建Segment
```sql
create table table_name segment creation immediate;
```
3. 对于已经创建但是还没有Segment的表来说,
```sql
--找到需要初始化的表,并生成语句
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
--执行生成语句
```
来使其创建出分配空间,
当然也可以插入一条数据,使其创建分配空间;
#### 32位Oracle9i 调整最大内存超过1.7GB后,数据库挂了
1. 导入数据,调试成功。
2. 出于性能考虑,盲目增加了Oracle内存,超过1.7GB,导致数据库故障,百般调试失败,重新建库(7点半-12点)
3. 建表,建立用户,导入数据库报错,imp 00017 错误603,百度没有解决办法,有点慌了,(期间各种扩展表空间,无效)担心故障处理不了。
4. 强制自己冷静,看日志,http://blog.itpub.net/11976525/viewspace-702029/,
5. 临时表空间设置的是自动扩展,不回收,虽然扩展但是无效。
6. 执行如下命令后,导入目前正常。
```sql
查看临时文件
select FILE#,TS#,NAME,STATUS,ENABLED from v$tempfile;
查看临时文件是不是自动扩展
select FILE_NAME,FILE_ID,TABLESPACE_NAME,AUTOEXTENSIBLE ,STATUS from dba_temp_files;
alter database tempfile '..../temp.dbf' autoextend off
```
**血淋淋的教训:
1.盲目操作,没有按照主库进行配置,错了活该。
2.遇到问题不看日志,活该。**
';