数据库管理 2022-12-03
第四十七期 迁移吧~
这周终于做了些正事,做了一个数据库的迁移,从X86的11g到x9m的19.16。
另一个事情则是中招奥密克戎了,今天到最高38.6度,伴随喉咙痛、咳嗽、嗜睡。下周就居家办公吧。
1 expdp/impdp
由于源环境字符集是ZHS16GBK,新环境是AL32UTF8,所以暂时没法通过xtts来进行迁移,因此采用数据泵两步走的方式,即是先导出导入表结构,然后将涉及中文(2->3)的字段长度进行变更,然后再导入表数据。
impdp \'sys@ejpb as sysdba\' DIRECTORY=EXT DUMPFILE=EXP_bjg.dump LOGFILE=imp_bjp.log TABLE_EXISTS_ACTION=replace CONTENT=METADATA_ONLY SCHEMAS=USER1,USER2,USER3 remap_tablespace=USERS:TBS_DATA CLUSTER=n PARALLEL=12
--修改表结构
impdp \'sys@ejpb as sysdba\' DIRECTORY=EXT DUMPFILE=EXP%U.dump LOGFILE=imp.log CONTENT=DATA_ONLY SCHEMAS=USER1,USER2,USER3 CLUSTER=n PARALLEL=12
2 varchar2(32k)
然而遇到一个问题,Oracle默认的varchar2最长为4000,环境里面存在修改字段长度后超过4000的表。从12c开始Oracle引入了最大32K的varchar2长度,具体变更操作如下:
ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;
ALTER SYSTEM SET cluster_database=false scope=spfile;
srvctl stop database -db dbaas
startup upgrade
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS --force_pdb_mode 'UPGRADE' -d $ORACLE_HOME/rdbms/admin -l '/tmp/utl32k_cdb_pdbs_output' -b utl32k_cdb_pdbs_output utl32k.sql
catcon: ALL catcon-related output will be written to [/scratch/mydir/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output_catcon_23172.lst]
catcon: See [/scratch/mydir/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output*.log] files for output generated by scripts
catcon: See [/scratch/mydir/utl32k_cdb_pdbs_output/utl32k_cdb_pdbs_output_*.lst] files for spool files, if any
Enter Password: --输入SYS密码
catcon.pl: completed successfully
shut immediate
startup
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS --force_pdb_mode 'READ WRITE' -d $ORACLE_HOME/rdbms/admin -l '/tmp/utlrp_cdb_pdbs_output' -b utlrp_cdb_pdbs_output utlrp.sql
catcon: ALL catcon-related output will be written to [/scratch/mydir/utlrp_cdb_pdbs_output/utlrp_cdb_pdbs_output_catcon_24271.lst]
catcon: See [/scratch/mydir/utlrp_cdb_pdbs_output/utlrp_cdb_pdbs_output*.log] files for output generated by scripts
catcon: See [/scratch/mydir/utlrp_cdb_pdbs_output/utlrp_cdb_pdbs_output_*.lst] files for spool files, if any
Enter Password: --输入SYS密码
catcon.pl: completed successfully
ALTER SYSTEM SET cluster_database=true scope=spfile;
shut immediate
srvctl start database -db dbaas
3 排除一些表
在测试过程中发现,有些大表导出导入非常慢,而且这些表虽然最终需要,但是一次性导入的时候可以不要这些表,因此在多用户or全库导出、导入的时候可以通过以下语句进行筛选:
EXCLUDE=TABLE:\"IN \(select TABLE_NAME from DBA_TABLES where \(owner,table_name\) in \(\(\'USER1\',\'TABLE1\'\), \(\'USER2\',\'TABLE2\'\)\) \)\"
总结
因为不舒服,原谅我又双叒划水了。
老规矩,知道写了些啥。