数据库
oracle数据库如何打开归档?
一、oracle数据库如何打开归档?
xp system/manager file=d:\daochu.dmp full=y
1、连接windows系统:打开cmd窗口Linux/Unix系统:打开终端rman target / nocatalog;sqlplus /nologconn / as sysdba;
2、开启归档sqlplus>shutdown immediate;(启动归档前先要停止数据库) sqlplus>startup mount;(数据库以mount方式启动) sqlplus>alter database archivelog;(启动数据库归档) sqlplus>alter system set log_archive_dest_1="/arch"(改变归档日志路径,windows系统使用盘符)sqlplus>alter database open;(打开数据库) sqlplus>archive log list;(查看归档是否已经打开)关闭归档alter database noarchivelog;
二、orcal归档数据库存了哪些内容?
orcal归档数据库存下载的数据日志包括静态和动态的数据,要访问这些数据,就必须要进行手动访问。
生产线历史数据归档是数据库运维的一项日常基本工作。在建表设计时,通常都将数据流水表(如:日志、用户登录历史,软件下载记录,用户属性更改历史表等)设计为范围分区表、间隔分区表(11G),当超过业务要求的保留范围时,此数据基本是静态数据且应用程序再不对其进行访问,但有可能会由于某些特殊要求需要手动查询。在这个情况下,都将其数据从生产库归档至历史库,并对其进行压缩保存,如果超出特殊要求查询的范围,那就直接将其导出压缩备份到磁带。
在Oracle数据库中,用做表数据归档操作的方法很多,如:exp/imp、expdp/impdp、传输表空间等方法,这些都是日常数据库维护可能使用到的,这些工具的使用方法这里不展开了,下面进入今天的主题,使用存储过程归档生产线历史表数据,先对其简单做下总结:
1、简单,不容易出错;
2、对其源库(这里就是生产库)来说,就是一条select查询语句,性能影响小;
3、数据从源库到目标库不需要落地,和dblink+impdp迁移数据的方法类似,节约导出数据所需空间(上百GB的表)及归档时间;
4、可监控其归档进度及归档记录数;
5、如果是跨机房传输,请监控好网络带宽流量。
6、......
操作流程:
1、在生产库维护用户的Schema下创建一张视图,视图中包含需要归档的表的分区:
create view log_table_p201209
as
select * from user01.log_table partition(P201209);
注:为什么要建视图? 因为通过dblink查询不能用 select * from table partition (partition_name).....这样的语句。
2、在历史库放归档数据的用户下(历史库操作都下面都在此用户下操作)创建数据归档状态表及序列-- Create table
create table data_archive_status
(
id NUMBER,
threadno NUMBER,
table_name VARCHAR2(60),
syncnum NUMBER,
state NUMBER,
starttime DATE,
synctime DATE,
remark VARCHAR2(2000)
);
-- Add comments to the columns
comment on column data_archive_progress.state
is '0:开始,1:打开、解析游标,2:提取数据,3:某个表同步完成,4:所有表全部完成,其他负数:错误编码';
-- Create sequence
create sequence seq_id
minvalue 1
maxvalue 9999999999999
start with 1
increment by 1
cache 20;
3、在历史库创建一个可以通过只读权限连接生产库的dblink,示例:
-- Create database link
create database link XXDB.LOCALDOMAIN
connect to readonly
identified by ""
using '(DESCRIPTION=
(LOAD_BALANCE=no)
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=172.16.XX.XX)
(PORT=1521)
)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=172.16.XX.XX)
(PORT=1521)
)
)
(CONNECT_DATA=
(FAILOVER_MODE=
(TYPE=select)
(METHOD=basic)
(RETRIES=180)
(DELAY=5)
)
(SERVER=dedicated)
(SERVICE_NAME=XX_service)
)
)';
4、历史库创建一张与生产库相同表结构的表,表名建议改为带上归档数据标识
create tabel log_table_p201209(......);
5、 创建用于数据归档的存储过程:
create procedure p_log_table_p201209 as
--索引表
type u_type is table of log_table_p201209%rowtype index by pls_integer;
v_list u_type;
--定义数组,存放待同步的视图名称。
type varchar_arrary is table of varchar2(60) index by pls_integer;
v_remoteview_list varchar_arrary;
--定义一个引用索引
type cur_ref is ref cursor;
cur_data cur_ref;
--本地变量,记录SQL%ROWCOUNT
v_counter number := 0;
v_rowid rowid;
v_sqlcode varchar2(300) := null;
v_querystr varchar(1000) := null;
v_parse_elapsed_s date := null;
v_parse_elapsed_e date := null;
v_fetch_elapsed_s date := null;
v_fetch_elapsed_e date := null;
begin
--初始化数组(第1步中创建的视图)
v_remoteview_list(1) := 'zhanghui.log_table_p201209';
--循环同步每个分区表
for k in 1 .. v_remoteview_list.count loop
--添加一个同步任务记录
insert into data_archive_status
values
(seq_id.nextval,
k,
v_remoteview_list(k),
0,
0,
sysdate,
sysdate,
null)
returning rowid into v_rowid;
commit;
v_querystr := 'select /*+ rowid(t) */ * from ' || v_remoteview_list(k) ||
'@XXDB.LOCALDOMAIN t';
update data_archive_status t
set t.synctime = sysdate, t.state = 1
where rowid = v_rowid;
commit;
--记录打开、解析游标的时间长度。
v_parse_elapsed_s := sysdate;
open cur_data for v_querystr;
v_parse_elapsed_e := sysdate;
update data_archive_status
set synctime = sysdate,
state = 2,
remark = remark || '[' || v_remoteview_list(k) ||
':parse_elapsed=' ||
(v_parse_elapsed_e - v_parse_elapsed_s) || 'sec,'
where rowid = v_rowid;
commit;
v_counter := 0;
v_fetch_elapsed_s := sysdate;
--对打开的游标,进行循环同步。
loop
--使用Bulk Binding,一次处理10000条记录
fetch cur_data bulk collect
into v_list limit 10000;
forall i in 1 .. v_list.last
insert into log_table_p201209 values v_list
(i);
--记录当前同步的记录数
v_counter := v_counter + sql%rowcount;
update data_archive_status t
set t.syncnum = v_counter, t.synctime = sysdate
where rowid = v_rowid;
commit;
exit when cur_data%notfound;
end loop;
v_fetch_elapsed_e := sysdate;
--更新进度表,将当前分区完成时间记录到备注中。
update data_archive_status
set state = 3,
synctime = sysdate,
remark = remark || 'fetch_elapsed=' ||
round((v_fetch_elapsed_e - v_fetch_elapsed_s) * 24 * 60,
4) || 'min,syncnum=' || v_counter ||
',endtime= ' || to_char(sysdate, 'yyyymmddhh24miss') || ']'
where rowid = v_rowid;
commit;
close cur_data;
--更新进度表
update data_archive_status t set t.state = 4 where rowid = v_rowid;
commit;
end loop;
exception
when others then
v_sqlcode := sqlcode;
update data_archive_status
set synctime = sysdate, state = v_sqlcode
where rowid = v_rowid;
commit;
raise;
end;
6、创建压缩对象存储过程,由于move操作需要接近双倍的存储空间,所以压缩前请提前评估空间需求
create procedure p_compress_object(vObject_name varchar2, --对象
vPartition_name varchar2 default null, --分区名
vParallel int default 0, --并行度
vPctfree int default 0, --存储参数pctfree 不再考虑DML操作的设置为0
vTablespace varchar2 default null, --表空间
vOwner varchar2 default user, --对象拥有者
vType number --类型:0、table 1、index 2、 partition table 3、index partition
) Authid Current_User is
vSql varchar2(4000);
vSqlerrm varchar2(256);
v_sqlstring varchar2(4000);
begin
v_sqlstring := 'alter session set db_file_multiblock_read_count=128';
execute immediate v_sqlstring;
if vType = 0 then
begin
vSql := 'alter table ' || vOwner || '.' || vObject_name || ' move ' || case when vTablespace is null then null else 'tablespace ' || vTablespace end || ' pctfree ' || vPctfree || ' compress nologging ' || case when vParallel in (0, 1) then null else 'parallel ' || vParallel end;
execute immediate vSql;
end;
elsif vType = 1 then
begin
vSql := 'alter index ' || vOwner || '.' || vObject_name ||
' rebuild ' || case when vTablespace is null then null else 'tablespace ' || vTablespace end || ' pctfree ' || vPctfree || ' compress nologging ' || case when vParallel in (0, 1) then null else 'parallel ' || vParallel end;
execute immediate vSql;
end;
elsif vType = 2 then
begin
vSql := 'alter table ' || vOwner || '.' || vObject_name ||
' move partition ' || vPartition_name || case when vTablespace is null then null else ' tablespace ' || vTablespace end || ' pctfree ' || vPctfree || ' compress nologging ' || case when vParallel in (0, 1) then null else 'parallel ' || vParallel end;
execute immediate vSql;
end;
elsif vType = 3 then
begin
vSql := 'alter index ' || vOwner || '.' || vObject_name ||
' rebuild partition ' || vPartition_name || case when vTablespace is null then null else ' tablespace ' || vTablespace end || ' pctfree ' || vPctfree || ' compress nologging ' || case when vParallel in (0, 1) then null else 'parallel ' || vParallel end;
execute immediate vSql;
end;
end if;
exception
when others then
vSqlerrm := sqlerrm;
dbms_output.put_line(vSqlerrm||'|'||vSql);
end;
7、上述工作准备完成,确认历史库表空间情况,调用数据归档存储过程 p_log_table_p201209 ,处理完成后对数据进行压缩,调用存储过程 p_compress_object(....);
8、确认数据无误,drop掉生产库维护用户对应的视图及业务表的分区,释放对象占用空间(注意:检查分区表的索引是否为local,否则就.....).
三、如何查看oracle数据库的归档日志?
1、常用命令 SQL> show parameter log_archive_dest; SQL> archive log list; SQL> select * from V$FLASH_RECOVERY_AREA_USAGE; ARCHIVELOG 96.62 0 141 SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; 2.9904 SQL> show parameter recover; db_recovery_file_dest string /u01/oracle/flash_recovery_area db_recovery_file_dest_size big integer 2G
2、删除日志 cd $ORACLE_BASE/flash_recovery_area/orcl/archivelog 转移或清除对应的归档日志, 删除一些不用的日期目录的文件,注意保留最后几个文件在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。
3、rman target sys/password RMAN> crosscheck archivelog all; RMAN> delete expired archivelog all; 或者 RMAN> delete archivelog until time “sysdate-1″;
4、再查 SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
5、修改大小 SQL> alter system set db_recovery_file_dest_size=4G scope=both;
四、rac归档日志满了,数据库访问不了?
如果数据库在mount或者open状态,用rman去删,如果数据库已经不可访问,就需要手动去删。单机一般在本地,rac在ASM中。
五、数据库中的归档是什么意思?
楼上的真能说啊.通常最近产生的数据会比较常用,而若干年前的数据则很少再被使用.归档的意思就是将某些不常使用的数据放置到诸如磁带等大容量而不便于访问的设备上去.数据库上我听说过日志归档,那就是说这些日志比较旧了,可以转移到归档设备(通常是磁带等)上去了,因为它们很少被再使用了.
六、丢失归档日志文件后数据库应当如何恢复呢?
日志文件丢失的话,如果是非当前日志可以通过clear logfile解决,如果是当前日志 那么需要使用特殊手段才能打开数据库, online redolog 丢失 下 和开启归档没有直接关系。如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
七、怎么查询车辆归档没归档?
可以通过车管所档案查询系统查询车牌是否归挡。以下是车牌归档的相关介绍。
1、车牌归档时间:按正常流程,一般车辆办理过户后三个工作日就会归档,但若原车主需重选原号牌,仅等归档时间还不够,因为车管后台还需要将原号牌信息上传至系统才行。一般来讲,车辆过户后大概等7日到15日再申请使用原号牌会比较好。
2、车牌归档的查询方法:目前互联网发达,车牌归档可通过车管所档案查询系统或者是一些关于汽车的小程序即可查询到车主车辆是否归档。
八、如何解决Oracle数据库归档日志占满磁盘空间?
移动到另外一个位置的话需要修改数据库的控制文件,这种操作都比较危险,不建议在没有经验的情况下进行尝试,磁盘快满了的话可以定期清理各种日志文件比如$ORACLE_BASE/admin/$ORACLE_SID/路径下的各种dump日志,还有$ORACLE_HOME/network/log里面的监听日志,另外再进行表空间的创建或数据文件的添加时,另外指定一个路径即可。
九、MySQL数据库归档:如何有效管理和保留数据
引言
数据库归档是指将数据移动到更为经济的存储介质上,以便长期保留和合规要求。对于MySQL数据库来说,合理的数据库归档策略可以帮助企业节省存储成本,提高数据库性能,并满足数据合规性要求。
数据库归档的必要性
随着时间的推移,数据库中会积累大量历史数据,这些数据可能并不经常被查询,但却需要长期保留,以满足法规或业务需求。直接在生产数据库中保留这些数据会导致存储成本的不断增长,并且可能影响数据库的查询性能。因此,数据库归档成为了必不可少的环节。
数据库归档的策略
针对MySQL数据库,合理的归档策略应包括数据的定期备份和归档过程。数据可以根据特定的时间标记或业务规则,由生产数据库移动到归档数据库中。在归档过程中,必须确保数据的完整性,可靠性和安全性。
归档数据的管理
一旦数据被归档,就需要一套有效的管理机制来管理这些归档数据。这包括对数据进行索引和分类,以便日后需要时能够快速查找和恢复;同时也需要对数据进行定期的检查和维护。
合规性要求
对于一些行业,例如金融服务和医疗保健领域,归档的数据可能需要满足一系列的合规性要求。因此,在制定MySQL数据库归档策略时,必须考虑到这些要求,确保归档的数据符合相应的法规和标准。
最佳实践
为了有效地管理和保留数据, 企业可以采用各种最佳实践,如数据压缩、归档数据的分层存储、定期的数据清理等措施来优化数据库归档策略。
结论
数据库归档对于MySQL数据库来说是一个重要的管理环节。通过制定合理的归档策略,并且结合有效的数据管理和合规性要求,企业可以更好地管理和保留数据,从而在数据增长和合规性方面更具竞争优势。
感谢您阅读本文,希望本文能够帮助您更好地理解MySQL数据库归档的重要性及实施策略。
十、请假条财务归档还是人事归档?
假期条是人事部门进行归档。人事部门有员工薪酬服务岗位,其工作职责就是进行员工薪酬核算,社保公积金缴纳,员工各种保险增减变化,并审核员工考勤,病事假等。
故,员工请假单在被部门负责人批准后要提交到人事部薪酬负责同事,他会根据公司考勤制度对该请假进行划分,如需扣除工资的假条。会在当月工资中有所体现。
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...