dump表的数据块

dump表的数据块

dump一个表的数据块要知道这个块所在的位置(数据文件的编号和数据块的编号)
例如我要dump表aes1的数据块

SQL> select a.file_id,a.block_id,a.bytes,a.blocks from dba_extents a
  2  where a.owner='INSUR_CHANGDE' and a.segment_name='AES1';

   FILE_ID   BLOCK_ID      BYTES     BLOCKS
---------- ---------- ---------- ----------
         5         57      65536          8

在这里,可以找到表aes1所在的文件编号是5,数据块是从64开始的。

例如我要dump表aes1中的特定数据块

SQL> select rowid,a.* from aes1 a where a.aae002 between '201201' and '201212';

ROWID              AAE002
------------------ ------
AAAM7rAAFAAAABAAEI 201201
AAAM7rAAFAAAABAAEJ 201202
AAAM7rAAFAAAABAAEK 201203
AAAM7rAAFAAAABAAEL 201204
AAAM7rAAFAAAABAAEM 201205
AAAM7rAAFAAAABAAEN 201206
AAAM7rAAFAAAABAAEO 201207
AAAM7rAAFAAAABAAEP 201208
AAAM7rAAFAAAABAAEQ 201209
AAAM7rAAFAAAABAAER 201210
AAAM7rAAFAAAABAAES 201211
AAAM7rAAFAAAABAAET 201212

dump表aes1中aae002=201210这一条记录所在的数据块

SQL> SELECT dbms_rowid.rowid_object('AAAM7rAAFAAAABAAER') data_object_id#,
  2             dbms_rowid.rowid_relative_fno('AAAM7rAAFAAAABAAER') rfile#,
  3             dbms_rowid.rowid_block_number('AAAM7rAAFAAAABAAER') block#,
  4             dbms_rowid.rowid_row_number('AAAM7rAAFAAAABAAER') row#
  5        FROM dual;

DATA_OBJECT_ID#     RFILE#     BLOCK#       ROW#
--------------- ---------- ---------- ----------
          52971          5         64        273

执行dump命令

sql>alter system dump datafile 5 block min 57 block max 64;

打开所对应的trace文件看dump出来的内容

Start dump data blocks tsn: 6 file#: 5 minblk 57 maxblk 64
buffer tsn: 6 rdba: 0x01400039 (5/57)
scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1

file#: 5 minblk 57 maxblk 64
可以看到我们dump的是文件编号是5,开始的block号为57(minblk),结束的block号为64(maxblk)。
可以从这里看出来

rdba: 0x01400039 (5/57)
rdba: relative database address of the block相对数据块地址0x01400039

可以看到(5/57),其实意思就是file# 5, block# 57。

scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
SCN是最后变化的scn,在上面的例子中SCN是0x0000.00b8ba77。
tail是由SCN的后4位(ba77)、type(20)以及sequence(05)组成,即ba772005。
如果Tail与SCN的后4位(ba77)、type(20)以及sequence(05)这三个值不一致,
那么这个块就存在问题,需要恢复或者回滚。

frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK

type具体意思可以看以下列表:

Type  Meaning
0x02  undo block
0x06  table or index data block
0x0e  undo segment header
0x10  data segment header block
0x17  bitmapped data segment header

Block header dump:  0x0140003c
 Object id on Block? Y
 seg/obj: 0xceeb  csc: 0x00.b8ba76  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x1400039 ver: 0x01 opc: 0
     inc: 0  exflg: 0

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.02c.000010ee  0x00800c28.0310.0a  --U-  127  fsc 0x0000.00b8ba78
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

“Object id on Block?”告知我们对象是否存在于SYS.OBJ$。从oracle 6开始,这里一般都是”Y”。
seg/obj的值是16进制的segment的对象编号。上面的数值是0xceeb,16进制是ceeb。
使用oracle转化为10进制数:

SQL> select to_number('ceeb','xxxx') from dual;

TO_NUMBER('CEEB','XXXX')
------------------------
                   52971


SQL> select owner,object_name from dba_objects  where object_id=52971;

OWNER                          OBJECT_NAME
------------------------------ ------------------------------------------
INSUR_CHANGDE                  AES1

正如我们所想那样的信息。
csc值(Cleanout System Change number)与SCN值相同时该块会被清除。
itc值(Interested Transaction List Count)表示ITL的数量,在上面的例子中
itc的值为2表示有这个数据块上有两个相关的事务.这些事务id(Xid)显示有两
个事务.这些事务的id值与回滚段相关联被用来处理我们的事务
flag(flg)中”-“或者”O”表示是否在自由列表中,”0″则在,”-“则不在。估计E也是不在的意思。
如果在自由列表的话会出现:
fsl(ITL freelist slot)表示ITL自由列表的开始位置。
fnx(Next freelist block)表示segment自由列表中下一个block的RDBA地址。

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.02c.000010ee  0x00800c28.0310.0a  --U-  127  fsc 0x0000.00b8ba78
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

Xid:事务id,在回滚段事务表中有一条记录和这个事务对应。
Xid组成:Undo Segment Number +Transaction Table Slot Number+ Wrap。
Uba:回滚段地址,该事务对应的回滚段地址。
Uba组成:回滚块地址(undo文件号和数据块号)+回滚序列号+回滚记录号。

Flag:这里可以看下面列表:

Value  Meaning
----  transaction is active, or committed pending cleanout
C---  transaction has been committed and locks cleaned out
B---  this undo record contains the undo for this ITL entry
U---  transaction committed (maybe long ago); SCN is an upper bound
T---  transaction was still active at block cleanout SCN




data_block_dump,data header at 0x8628464
===============
tsiz: 0x1f98
hsiz: 0x110
pbl: 0x08628464
bdba: 0x0140003c
     76543210
flag=--------
ntab=1
nrow=127
frre=-1
fsbo=0x110
fseo=0x1aa2
avsp=0x1992
tosp=0x1992
0xe:pti[0] nrow=127 offs=0
0x12:pri[0] offs=0x1aa2
0x14:pri[1] offs=0x1aac
0x16:pri[2] offs=0x1ab6
0x18:pri[3] offs=0x1ac0
0x1a:pri[4] offs=0x1aca
0x1c:pri[5] offs=0x1ad4
.......

上面的tsiz值显示了在数据块中还可以使用的空间大小,将1f98
转换成十进制为8088字节

ntab的值告诉我们在这个数据块中存储有多少个表,除非这个数据块
属于一个集簇,否则这个值将会是1.

nrow的值告诉我有多少行数据存储在数据块中.上面显示这个数据块
有127行数据

从地址0xe开始,我们得到每一行的一个目录.我们可以看到第一行是从
数据块的偏移地址为’0x1aa2′.用这种方式可以快速找到数据行.
rowid是唯一指示每一行数据的它的格式是(对象编号+相关文件号+块号+行号)


block_row_dump:
tab 0, row 0, @0x1aa2
tl: 10 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 6]  32 30 34 30 30 36
tab 0, row 1, @0x1aac
tl: 10 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 6]  32 30 34 30 30 37
tab 0, row 2, @0x1ab6
tl: 10 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 6]  32 30 34 30 30 38
tab 0, row 3, @0x1ac0
tl: 10 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 6]  32 30 34 30 30 39
tab 0, row 4, @0x1aca
tl: 10 fb: --H-FL-- lb: 0x1  cc: 1

真实的行数据是从”block_row_dump”开始的.
然后给出一个行数据。只在这里显示的一行数据,其余的是类似的。
我们可以看到,这行属于表’ 0 ‘(标签)我们的集簇。由于没有集簇在我们的例子中,
我们不会有一个以上的表,这个值将是零。我们还可以看到,这是行’ 0 ‘和那一行的地址
这个地址必须与我们上面提到第一行数据是从数据块的偏移地址为’0x1aa2’
而在上面显示的row 0, @0x1aa2中的0x1aa2是相匹配的

t1说明这一行数据的总的字节数包含任何开销.我们可以看到这一行是有10字节
cc说明这一行有多少列,上面显示的是1列.
fb显示了行的标记.H是行头,F是行的第一个片段,L是行的最后一个片段.
如果显示为这一行的第一个和最后一个行片段说明行没有发生链接.因此
行头和行不会迁移

tab 0, row 0, @0x1aa2
tl: 10 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 6]  32 30 34 30 30 36

第一行第一列显示为 32 30 34 30 30 36是字符型
那进行转换

SQL>  select to_number('3230','xxxx')from dual;

TO_NUMBER('3230','XXXX')
------------------------
                   12848
SQL>   select to_number('3430','xxxx')from dual;

TO_NUMBER('3430','XXXX')
------------------------
                   13360
SQL>      select to_number('3036','xxxx')from dual;

TO_NUMBER('3036','XXXX')
------------------------
                   12342

SQL>
SQL>      select chr(12848)from dual;

CHR(12848)
----------
20
SQL>       select chr(13360)from dual;

CHR(13360)
----------
40
SQL>      select chr(12342)from dual;

CHR(12342)
----------
06

将CHR(12848)+CHR(13360)+CHR(12342=204006

Oracle10g 数据泵导出命令impdp 使用总结

IMPDP命令行选项与EXPDP有很多相同的,不同的有:

(1)REMAP_DATAFILE

该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.

REMAP_DATAFIEL=source_datafie:target_datafile

(2)REMAP_SCHEMA

该选项用于将源方案的所有对象装载到目标方案中.

REMAP_SCHEMA=source_schema:target_schema

(3)REMAP_TABLESPACE

将源表空间的所有对象导入到目标表空间中

REMAP_TABLESPACE=source_tablespace:target_tablespace

(4)REUSE_DATAFILES

该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N。

REUSE_DATAFIELS={Y | N}

(5)SKIP_UNUSABLE_INDEXES

指定导入是是否跳过不可使用的索引,默认为N

(6)SQLFILE

指定将导入要指定的索引DDL操作写入到SQL脚本中。

SQLFILE=[directory_object:]file_name

       Impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
       

(7)STREAMS_CONFIGURATION

指定是否导入流元数据(Stream Matadata),默认值为Y.

(8)TABLE_EXISTS_ACTION

该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP

TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }

当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项

(9)TRANSFORM

该选项用于指定是否修改建立对象的DDL语句

TRANSFORM=transform_name:value[:object_type]

Transform_name用于指定转换名,其中SEGMENT_ATTRIBUTES用于标识段属性(物理属性,存储属性,表空间,日志等信息),STORAGE用于标识段存储属性,VALUE用于指定是否包含段属性或段存储属性,object_type用于指定对象类型.

       Impdp scott/tiger directory=dump dumpfile=tab.dmp Transform=segment_attributes:n:table
       

(10)TRANSPORT_DATAFILES

该选项用于指定搬移空间时要被导入到目标数据库的数据文件。

TRANSPORT_DATAFILE=datafile_name

Datafile_name用于指定被复制到目标数据库的数据文件

Impdp system/manager DIRECTORY=dump DUMPFILE=tts.dmp TRANSPORT_DATAFILES=’/user01/data/tbs1.f’

IMPDP 命令实例

(1)导入表

Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp logfile=/exp.log;

--将DEPT和EMP表导入到SCOTT方案中

 

Impdp system/manage DIRECTORY=dump_dir DUMPFILE=tab.dmp

TABLES=scott.dept,scott.emp REMAP_SCHEMA=SCOTT:SYSTEM logfile=/exp.log;

-- 将DEPT和EMP表导入的SYSTEM方案中.

 

(2)导入方案

Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott logfile=/exp.log;

 

Impdp system/manager DIRECTORY=dump_dir DUMPFILE=schema.dmp

SCHEMAS=scott REMAP_SCHEMA=scott:system logfile=/exp.log;

(3)导入表空间

Impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01 logfile=/exp.log;

(4)导入数据库

Impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y logfile=/exp.log;

Oracle数据文件大小的限制

当使用smallfile tablespace 数据文件数据文件受以下限制

oracle maximum file size = db_block_size * 4194303 (2^22 = 4194304)

最大的数据文件大小是由 db_block_size 来决定的,8KB的数据块的数据文件最大为 8K * 4194304 = 32G,

原因在于:由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。

Database 是由一个或多个被称为表空间(tablespace)的逻辑存储单位构成。表空间内的逻辑存储单位为段(segment),段又可以继续划分为数据扩展(extent)。而数据扩展是由一组连续的数据块(datablock)构成。
大文件表空间

在Oracle中用户可以创建大文件表空间(bigfile tablespace)。这样Oracle数据库使用的表空间(tablespace)可以由一个单一的大文件构成,而不是若干个小数据文件。这使Oracle可以发挥64位系统的能力,创建、管理超大的文件。在64位系统中,Oracle数据库的存储能力被扩展到了8 EB(1EB =1024PB,1PB = 1024TB,1TB=1024GB)。

当 数据库文件由Oracle管理(Oracle-managed files),且使用大文件表空间(bigfile tablespace)时,数据文件对用户完全透明。换句话说,用户只须针对表空间(tablespace)执行管理操作,而无须关心处于底层的数据文件 (datafile)。使用大文件表空间,使表空间成为磁盘空间管理,备份,和恢复等操作的主要对象。使用大文件表空间,并与由Oracle管理数据库文件(Oracle-managed files)技术以及自动存储管理(Automatic Storage Management)技术相结合,就不再需要管理员手工创建新的数据文件(datafile)并维护众多数据库文件,因此简化了数据库文件管理工作。

数据库默认创建的是小文件表空间(smallfile tablespace),即Oracle中传统的表空间(tablespace)类型。数据库中 SYSTEM 和 SYSAUX 表空间在创建时总是使用传统类型只有本地管理的(locally managed),且段空间自动管理(automatic segmentspace management)的表空间(tablespace)才能使用大文件表空间(bigfile

tablespace)。 但是有两个例外:本地管理的撤销表空间(undo tablespace)和临时表空间(temporary tablespace),即使其段(segment)为手工管理(manually managed),也可以使用大文件表空间。一个Oracle数据库可以同时包含大文件/小文件表空间(bigfile/smallfile tablespace)。SQL语句执行时无需考虑表空间(tablespace)的类型,除非语句中显式地引用了数据文件(datafile)名。

管理员可以创建一组临时表空间(temporary tablespace),用户在需要时可以利用组内各个表空间(tablespace)提供的临时空间。管理员还可以指定表空间组(tablespace group)为数据库默认的临时表空间。当用户需要大量临时空间进行排序操作时,就可以利用大文件表空间及表空间组。

使用大文件表空间的优势

● 使用大文件表空间(bigfile tablespace)可以显著地增强Oracle数据库的存储能力。一个小文件表空间(smallfile tablespace)最多可以包含1024个数据文件(datafile),而 一个大文件表空间中只包含一个文件,这个数据文件的最大容量是小数据文件的1024倍。这样看来,大文件表空间和小文件表空间的最大容量是相同的。但是由于每个数据库最多使用64K个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的1024倍,使用大文件表空间时的总数据库容量比使用小文件表空间时高出三个数量级。换言之,当一个Oracle数据库使用大文件表空间,且使用最大的数据块容量时(32K),其总容量可以达到 8EB。

● 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。

● 由于数据文件对用户透明,由此简化了数据库管理工作。

使用大文件表空间时需要考虑的因素

● 大文件表空间(bigfile tablespace)应该和自动存储管理(Automatic Storage Management)或其他逻辑卷管理工具(logical volume manager)配合使用,这些工具应该能够支持动态扩展逻辑卷,也能支持striping(数据跨磁盘分布)或RAID。

● 应该避免在不支持striping的系统上使用大文件表空间,因为这将不利于并行执行(parallel execution)及 RMAN 的并行备份(backup parallelization)。

● 当表空间正在使用的磁盘组(disk group)可能没有足够的空间,且扩展表空间的唯一办法是向另一个磁盘组加入数据文件时,应避免使用大文件表空间。

● 不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间(tablespace)的容量。参考相关的操作系统文档了解其支持的最大文件容量。

● 如果使用大文件表空间替代传统的表空间,数据库开启(open),checkpoints,以及 DBWR 进程的性能会得到提高。但是增大数据文件(datafile)容量可能会增加备份与恢复的时间。

当用户在创建表空间(tablespace)时没有指定数据扩展
(extent)的管理方式,默认使用本地管理(locally managed)。

大文件表空间从某种角度来说提高了 Oracle 在 VLDB 上的管理能力。只有自动段空间管理的 LMT (Locally Managed Tablespaces ) 支持 BIGFILE 表空间。 大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小。(以下用 BFT 指代 BIGFILE Tablespace。
BFT 可以和以下存储技术结合使用:
自动存储管理(ASM)
LVM
OMF
理论上的 BFT 可以达到下面所列的值:
数据块大小(单位:K) BFT 最大值(单位:T)
2k 8T
4k 16T
8k 32T
16k 64T
32k 128T
在实际环境中,这还受到操作系统的文件系统的限制。

BFT基本操作

10g 数据库在创建的时候,会指定默认的表空间类型。如果不特殊指定的话,默认为 SMALLFILE 类型的表空间。

SQL> SELECT *
2  FROM database_properties
3                  WHERE property_name = 'DEFAULT_TBS_TYPE';

PROPERTY_NAME    PROPERTY_VALUE DESCRIPTION
-------------------- --------------- ----------------------------------------
DEFAULT_TBS_TYPE   SMALLFILE    Default tablespace type

这种情况下,如果我们创建表空间的时候不指定类型,那么默认创建的都是 SMALLFILE 类型的表空间。可以通过 ALTER DATABASE 命令来修改数据库默认的表空间类型:

SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE;

Database altered.

SQL> SELECT *
2   FROM database_properties
3   WHERE property_name = 'DEFAULT_TBS_TYPE';

PROPERTY_NAME    PROPERTY_VALUE DESCRIPTION
-------------------- --------------- ----------------------------------------
DEFAULT_TBS_TYPE   BIGFILE Default tablespace type

SQL>
SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;

创建 BIGFILE 类型的表空间,只需指定额外的一个参数 BIGFILE 即可,其他和原有创建表空间语法类似:

CREATE     BIGFILE     TABLESPACE     bftbs
DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf' SIZE 5M;

DBA_TABLESPACES (USER_TABLESPACES)与 V$TABLESPACE 这两个视图可以查看 BIGFILE 表空间的相关信息。先看看 DBA_TABLESPACES 在 10g 中有了什么变化:

SQL> SELECT tablespace_name, bigfile
2  FROM dba_tablespaces;

TABLESPACE_NAME        BIG
------------------------------ ---
SYSTEM             NO
UNDOTBS            NO
SYSAUX             NO
TEMP              NO
USERS             NO
EXAMPLE            NO
TEST              NO
BFTBS             YES

8 rows selected.

BFT 属性

BFT有一些特有的属性。

1.每个表空间只能包含一个数据文件。如果试图添加新的文件,则会报告 ORA-32771 错误:

SQL> ALTER TABLESPACE bftbs
2 ADD DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M;
ALTER TABLESPACE bftbs
*
ERROR at line 1:
ORA-32771: cannot add file to bigfile tablespace

2.只有自动段空间管理的 LMT (locally managed tablespaces ) 支持 BFT

SQL> CREATE BIGFILE TABLESPACE bftbs02
2   DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3 EXTENT MANAGEMENT DICTIONARY;
CREATE BIGFILE TABLESPACE bftbs02
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace

SQL> CREATE BIGFILE TABLESPACE bftbs02
2     DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M
3   SEGMENT SPACE MANAGEMENT MANUAL;
CREATE BIGFILE TABLESPACE bftbs02
*
ERROR at line 1:
ORA-32772: BIGFILE is invalid option for this type of tablespace

3.相对文件号(RELATIVE_FNO)为1024 ( 4096 on OS/390)

因为BFT只有一个数据文件,所以其相对文件号也是固定的:1024

SQL> SELECT tablespace_name, file_id, relative_fno
2  FROM dba_data_files;

TABLESPACE_NAME          FILE_ID RELATIVE_FNO
------------------------------ ---------- ------------
USERS                  4      4
SYSAUX                 3      3
UNDOTBS                 2      2
SYSTEM                 1      1
EXAMPLE                 5      5
TEST                  6      6
BFTBS                  7     1024

7 rows selected.

oracle数据库字符集的转换

—1—修改数据库里的字符集

—中文字符集转英文字符集
–英文

update sys.props$ set value$='US7ASCII' where name='NLS_CHARACTERSET';

commit;

update sys.props$ set value$='US7ASCII' where name='NLS_NCHAR_CHARACTERSET';
commit;

—2—修改强制同步数据库里的字符集

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

—给CHARSET变量赋值

COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

–INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化

ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;

–ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

— 再次启动数据库一遍

SHUTDOWN IMMEDIATE;
STARTUP;

set nls_lang=AMERICAN_AMERICA.US7ASCII;

—英文字符集转中文字符集

update sys.props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';

commit;

update sys.props$ set value$='ZHS16GBK' where name='NLS_NCHAR_CHARACTERSET';

commit;

—2—修改强制同步数据库里的字符集

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

—给CHARSET变量赋值

COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

–INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化

ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;

–ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

— 再次启动数据库一遍

SHUTDOWN IMMEDIATE;
STARTUP;



set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;

impdp在同一个数据库中将一个用户下的对象复制到另一个用户下

比如要将ybht_hs用户下的对象复制到另一个用户ybht_ty下

那么在ybht_hs用户下创建一个public database link

create public database link tolink connect to ybht_hs identified by "hs" using
'(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =10.138.129.4)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =RLZY)
    )
  )';

impdp ybht_hs/hs@changde network_link=t
olink schemas=ybht_hs remap_schema=ybht_hs:ybht_ty

[remap_tablespace= HYGEIA:HYGEIA ]
其中@changde是tns中的服务名,这个一定要加上,网上有好多没有写上
该方法也只能在10.1及以上的版本使用

Oracle 热备份和冷备份的区别

备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是:

1、 是非常快速的备份方法(只需拷文件)
2、 容易归档(简单拷贝即可)
3、 容易恢复到某个时间点上(只需将文件再拷贝回去)
4、 能与归档方法相结合,做数据库“最佳状态”的恢复。
5、 低度维护,高度安全。
但冷备份也有如下不足:
1、 单独使用时,只能提供到“某一时间点上”的恢复。
2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4、 不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:
1、 所有数据文件
2、 所有控制文件
3、所有联机REDO LOG文件
4、 Init.ora文件(可选)
值得注意的使冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:
1. 数据文件一个表空间一个表空间的备份。
(1) 设置表空间为备份状态
(2) 备份表空间的数据文件
(3) 回复表空间为正常状态
2. 备份归档log文件
(1) 临时停止归档进程
(2) log下那些在archive rede log目标目录中的文件
(3) 重新启动archive进程
(4) 备份归档的redo log文件
3. 用alter database bachup controlfile命令来备份控制文件热备份的优点是:
1. 可在表空间或数据库文件级备份,备份的时间短。
2. 备份时数据库仍可使用。
3. 可达到秒级恢复(恢复到某一时间点上)。
4. 可对几乎所有数据库实体做恢复
5. 恢复是快速的,在大多数情况下爱数据库仍工作时恢复。
热备份的不足是:
1. 不能出错,否则后果严重
2. 若热备份不成功,所得结果不可用于时间点的恢复
3. 因难于维护,所以要特别仔细小心,不允许“以失败告终”

ORA-00600: internal error code, arguments: [kkslgbv0], [], [], [], [], [], [], [ ]

1 修改参数

SQL> show parameter cursor_sharing
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
cursor_sharing string FORCE

如果cursor_sharing=FORCE,那么就修改成为similar;
[kkslgbv0]与cursor_sharing相关,最好用其默认值”exact “.

SQL> alter system set cursor_sharing=similar;

System altered.

Elapsed: 00:00:00.00
SQL> show parameter cursor_sharing

NAME TYPE VALUE
------------------------------------------------------ ------------------------------
cursor_sharing string SIMILAR

2 清空一下共享池

SQL> alter system flush shared_pool;

System altered.

3.分析方案对象

execute dbms_utility.analyze_schema('INSUR_CHANGDE','compute');