1.PGA和SGA区别是什么?
SGA是系统全局区,PGA是进程全局区,也有叫用户全局区。
oracle在跑,SGA就是oracle的内存结构,主要存放:
a) 共享池(shared pool) :用来存储最近执行的SQL 语句和最近使用的数据字典的数据。
b) 数据缓冲区 (database buffer cache) :用来存储最近从数据文件中读写过的数据。
c) 重作日志缓冲区(redo log buffer ):用来记录服务或后台进程对数据库的操作。
另外在SGA 中还有两个可选的内存结构:
d)Java pool: 用来存储Java 代码。
e)Large pool: 用来存储不与SQL 直接相关的大型内存结构。备份、恢复使用。
oracle启动时分配,oracle关闭时回收。
PGA是有用户连oracle时,oracle给开辟的一个内存区, 只供该用户使用,该用户断开后,oracle就会将这块内存回收。
2.latch和lock分别适用于什么场合?
lock分表级锁,行级锁,也可以分共享锁、独占锁,就是对比进行操作时进行锁定。
latch是内存锁。比如,一个数据块,被加载到内存中,当多个会话对该内存中的块进行争用时,使用的锁。
3.char、varchar和varchar2的区别是什么?
char的存储为定长的。
varchar和varchar2的存储都为不定长的,字符要用几个字节存储要看数据库的字符集。
varchar2是oracle提供的独特的数据类型,oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar,这是因为varchar是标准sql提供的数据类型,有可能随着sql标准的变化而改变 。
oracle中会将空字符串当做null来处理,而sql标准的varchar则会存在空字符串。
新版本中varchar就是varchar2的别名,没有什么区别,但是由于上述原因,推荐使用varchar2。