特殊的恢复操作

简介:   转自DBA工作日记DBMS_BACKUP_RESTORE用于特殊情况下的恢复 一般如下:系统崩溃,rman使用控制文件,没有使用控制文件自动备份,现在仅有最后一次全备(备份中包括控制文件),以及其增量备份,规档备份.

 

img_325472601571f31e1bf00674c368d335.gif
img_325472601571f31e1bf00674c368d335.gif转自DBA工作日记
DBMS_BACKUP_RESTORE用于特殊情况下的恢复
一般如下:系统崩溃,rman使用控制文件,没有使用控制文件自动备份,现在仅有最后一次全备(备份中包括控制文件),以及其增量备份,规档备份.
通常这种情况下不能使用常规RMAN来恢复,因为此全备份中备份的控制文件中没有包含本次的备份信息,rman使用控制文件备份的时候是先备份控制文件
后备份其它信息背景知识
在Oracle 816 以后的版本中,Oracle提供了一个包:DBMS_BACKUP_RESTORE 包是由dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本创建的.catproc.sql 脚本运行后会调用这两个包.所以是每个数据库都有的这个包是Oracle服务器和操作系统之间IO操作的接口.由恢复管理器直接调用。而且据说这两个脚本的功能是内建到Oracle的一些库文件中的.
由此可见,我们可以在数据库 nomount 情况下调用这些package ,来达到我们的恢复目的。在dbmsbkrs.sql 和prvtbkrs.plb 这两个脚本中有详细的说明文档
关键的内容有:
FUNCTION  deviceAllocate(
       type IN varchar2 default NULL
      ,name IN varchar2 default NULL
      ,ident IN varchar2 default NULL
      ,noio IN boolean default FALSE
      ,params IN varchar2 default NULL )
RETURN varchar2;

PROCEDURE restoreControlfileTo(cfname IN varchar2);
PROCEDURE restoreDataFileTo( dfnumber IN binary_integer
,toname IN varchar2 default NULL);

SQL>startup force nomount;
SQL>
DECLARE
devtype varchar2(256);
done boolean;
BEGIN
--分配一个device channel,如果使用的操作系统文件,type就为空,如果是从磁带上恢复要用 "sbt_tape";
devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
--指明开始restore
sys.dbms_backup_restore.restoreSetDatafile;
--指出待恢复文件目标存储位置;
sys.dbms_backup_restore.restoreControlfileTo(cfname=>'D:\ORACLE\ORADATA\FENET\CONTROL01.CTL');
--指定备份集的位置
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\ORA9I6095222264.RMAN', params=>null);
--释放通道
sys.dbms_backup_restore.deviceDeallocate;
END;
可以通过该语句得到file#和name的对应关系
select 'sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>' || file# ||
       ',toname=>' ||chr(39)|| name ||chr(39) || ');',
       'sys.dbms_backup_restore.applySetDatafile(dfnumber=>' || file# ||
       ',toname=>' ||chr(39)|| name ||chr(39) || ');'
  from v$datafile;
  
在nomount状态下执行以下语句
恢复0级备份的语句
DECLARE
devtype varchar2(256);
done boolean;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>1,toname=>'D:\ORACLE\ORADATA\FENET\SYSTEM01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>2,toname=>'D:\ORACLE\ORADATA\FENET\UNDOTBS01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>3,toname=>'D:\ORACLE\ORADATA\FENET\CWMLITE01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>4,toname=>'D:\ORACLE\ORADATA\FENET\DRSYS01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>5,toname=>'D:\ORACLE\ORADATA\FENET\EXAMPLE01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>6,toname=>'D:\ORACLE\ORADATA\FENET\INDX01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>7,toname=>'D:\ORACLE\ORADATA\FENET\ODM01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>8,toname=>'D:\ORACLE\ORADATA\FENET\TOOLS01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>9,toname=>'D:\ORACLE\ORADATA\FENET\USERS01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>10,toname=>'D:\ORACLE\ORADATA\FENET\XDB01.DBF');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>11,toname=>'D:\ORACLE\ORADATA\FENET\BJIC.ORA');
sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>12,toname=>'D:\ORACLE\ORADATA\FENET\PM_USERS.DBF');
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\ORA9I6095222264.RMAN', params=>null);
sys.dbms_backup_restore.deviceDeallocate;
END;
恢复增量备份的语句
DECLARE
devtype varchar2(256);
done boolean;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
sys.dbms_backup_restore.applySetDatafile;
sys.dbms_backup_restore.applySetDatafile(dfnumber=>1,toname=>'D:\ORACLE\ORADATA\FENET\SYSTEM01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>2,toname=>'D:\ORACLE\ORADATA\FENET\UNDOTBS01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>3,toname=>'D:\ORACLE\ORADATA\FENET\CWMLITE01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>4,toname=>'D:\ORACLE\ORADATA\FENET\DRSYS01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>5,toname=>'D:\ORACLE\ORADATA\FENET\EXAMPLE01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>6,toname=>'D:\ORACLE\ORADATA\FENET\INDX01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>7,toname=>'D:\ORACLE\ORADATA\FENET\ODM01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>8,toname=>'D:\ORACLE\ORADATA\FENET\TOOLS01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>9,toname=>'D:\ORACLE\ORADATA\FENET\USERS01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>10,toname=>'D:\ORACLE\ORADATA\FENET\XDB01.DBF');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>11,toname=>'D:\ORACLE\ORADATA\FENET\BJIC.ORA');
sys.dbms_backup_restore.applySetDatafile(dfnumber=>12,toname=>'D:\ORACLE\ORADATA\FENET\PM_USERS.DBF');
sys.dbms_backup_restore.applyBackupPiece(done=>done,handle=>'D:\ORA9I6095222264.L1', params=>null);
sys.dbms_backup_restore.deviceDeallocate
END;
恢复归档日志archive log文件
SQL>DECLARE
devtype varchar2(256);
done boolean;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');
sys.dbms_backup_restore.restoreSetArchivedLog;
sys.dbms_backup_restore.restoreArchivedLogRange;
sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'D:\ORA9I6095222264.arc',params=>null);
sys.dbms_backup_restore.deviceDeallocate;
END

mount数据库
SQL> alter database mount;
恢复数据库到某一时间点
SQL> >recover database until time '2006-12-14 10:00:00';
启动数据库
SQL> alter database open resetlogs;
 
How to extract controlfiles, datafiles, and archived logs from
                    SMR backupsets without using RMAN  


Introduction:

  When using RMAN to restore objects (datafiles, controlfiles, or archivelogs)
  from backupsets, the object restore can be driven from the recovery catalog
  or the target database controlfile. This note explains how to extract  
  objects from backupsets when the recovery catalog and controlfiles have been
  lost. In this scenario, you effectively perform. the RMAN functions through
  PL/SQL procedure calls


Contents:

  1. Prerequisites
  2. Extracting the controlfile from a backupset
  3. Extracting datafiles from a backupset
  4. Applying incrementals
  5. Extracting archivelogs from a backupset
  6. A typical scenario  
  7. Errors
  8. Things to be done


1. Prerequisites

  The customer must have a knowledge of the contents of backupsets i.e. what
  they contain, when the backups were created, and the type of backups. Ideally
  they should have logs of the RMAN backup sessions that produced the  
  backupsets.

  Note that the following anonymous PL/SQL blocks are run on the instance of
  the database being recovered (the 'target'). The instance must be at least
  started (once the controlfile has been restored the database can also be
  mounted). Anonymous blocks can be executed in this manner as long as they
  call only 'fixed' packages. The DBMS_BACKUP_RESTORE packages are fixed.

  IMPORTANT: All the anonymous blocks must be executed by SYS or a user
             who has execute privilege on SYS.DBMS_BACKUP_RESTORE


2. Extracting the controlfile from a backupset

  The first stage is to extract the controlfile from a backupset. This is  
  achieved by making use of the following SYS.DBMS_BACKUP_RESTORE packaged
  functions & procedures:

    FUNCTION deviceAllocate                - allocates a device for sequential I/O
    PROCEDURE restoreSetDataFile        - begins a restore conversation
    PROCEDURE restoreControlfileTo        - specifies the controlfile destination
    PROCEDURE restoreBackupPiece         - performs the restore
    PROCEDURE deviceDeallocate                - deallocates the I/O device

  The following anonymous block can be created and executed to restore a  
  controlfile from a backupset. Before executing it, you MUST edit the block
  as follows:

    a. The filetable PL/SQL table entries must reflect the backuppieces
       comprising the backupset
    b. The v_maxPieces variable must reflect the number of backuppieces
       comprising the backupset
    c. The call to restoreControlfileTo must specify the correct controlfile
       path & filename

  IMPORTANT: The latest backup of the controlfile should be restored. Because
             recovery (using backup controlfile) will be performed manually,  
             the recovering session will need to start applying redo from
             the current log sequence AT THE TIME OF THE CONTROLFILE BACKUP.
             Thus, to take advantage of incremental backups, restore a  
             controlfile taken along with the incremental backups, thus
             reducing the amount of redo required during recovery.
PHP code:

DECLARE 

  
v_dev     varchar2(50);    -- device type allocated for restore 

  v_done     boolean
;    -- has the controlfile been fully extracted yet 

  type t_fileTable is table of varchar2
(255

    
index by binary_integer

  
v_fileTable     t_fileTable;    -- Stores the backuppiece names 

  v_maxPieces     number
:=1;    -- Number of backuppieces in backupset 

BEGIN 

   

-- Initialise the filetable number of backup pieces in the backupset 

-- This section of code MUST be edited to reflect the customers available 

-- backupset before the procedure is compiled and runIn this examplethe 

-- backupset consists of 4 pieces

 

  
v_fileTable(1):='fulldb_s15_p1'

  
v_fileTable(2):='fulldb_s15_p2'

  
v_fileTable(3):='fulldb_s15_p3'

  
v_fileTable(4):='fulldb_s15_p4'

  
v_maxPieces:=4

  

-- 
Allocate a deviceIn this exampleI have specified 'sbt_tape' as I am 

-- reading backuppieces from the media manager. If the backuppiece is on disk

-- 
specify type=>null 

 

  v_dev
:=sys.dbms_backup_restore.deviceAllocate(type=>'sbt_tape'

                               
ident=>'t1'); 

  

-- 
Begin the restore conversation 

 

  sys
.dbms_backup_restore.restoreSetDatafile

  

-- 
Specify where the controlfile is to be recreated 

 

  sys
.dbms_backup_restore.restoreControlfileTo(cfname=>'/support2/OFA_V804/u1/oradata/dbs/ctrl1V804.ctl'); 

 

-- 
Restore the controlfile 

 

  
FOR i IN 1..v_maxPieces LOOP 

    sys
.dbms_backup_restore.restoreBackupPiece(done=>v_done

                           
handle=>v_fileTable(i), 

                           
params=>null); 

    IF 
v_done THEN 

      GOTO all_done


    
END IF; 

  
END LOOP

 

all_done>> 

-- 
Deallocate the device 

 

  sys
.dbms_backup_restore.deviceDeallocate

 

END



.
3. Extracting datafiles from a backupset

  The second stage is to extract the datafiles from a backupset. This is
  achieved by making use of the following SYS.DBMS_BACKUP_RESTORE packaged
  functions & procedures:

    FUNCTION deviceAllocate             - allocates a device for sequential I/O
    PROCEDURE restoreSetDataFile        - begins a restore conversation
    PROCEDURE restoreDataFileTo              - datafile number & destination
    PROCEDURE restoreBackupPiece        - performs the restore
    PROCEDURE deviceDeallocate          - deallocates the I/O device

  The following anonymous block can be created and executed to restore a
  datafile from a backupset. Before executing it, you MUST edit the block
  as follows:  

    a. The filetable PL/SQL table entries must reflect the backuppieces
       comprising the backupset
    b. The v_maxPieces variable must reflect the number of backuppieces
       comprising the backupset
    c. The call to restoreDataFileTo must specify the correct datafile number,
       and datafile path & filename
PHP code:

DECLARE 

  
v_dev        varchar2(50);        -- device type allocated for restore 

  v_done    boolean
:=false; -- has the datafile been fully extracted yet 

  type t_fileTable is table of varchar2
(255

    
index by binary_integer

  
v_fileTable     t_fileTable;        -- Stores the backuppiece names 

  v_maxPieces     number
:=1;        -- Number of backuppieces in backupset 

BEGIN 

 

-- Initialise the filetable number of backup pieces in the backupset 

-- This section of code MUST be edited to reflect the customers available 

-- backupset before the procedure is compiled and runIn this examplethe 

-- backupset consists of 4 pieces

 

  
v_fileTable(1):='fulldb_s15_p1'

  
v_fileTable(2):='fulldb_s15_p2'

  
v_fileTable(3):='fulldb_s15_p3'

  
v_fileTable(4):='fulldb_s15_p4'

  
v_maxPieces:=4

  

-- 
Allocate a deviceIn this exampleI have specified 'sbt_tape' as I am 

-- reading backuppieces from the media manager. If the backuppiece is on disk

-- 
specify type=>null 

 

  v_dev
:=sys.dbms_backup_restore.deviceAllocate(type=>'sbt_tape'

                            
ident=>'t1'); 

  

-- 
Begin the restore conversation 

 

  sys
.dbms_backup_restore.restoreSetDatafile

  

-- 
Specify where the datafile is to be recreated 

 

  sys
.dbms_backup_restore.restoreDataFileTo(dfnumber=>1

        
toname=>'/support2/OFA_V804/u1/oradata/dbs/sysV804.dbf'); 

  

-- 
Restore the datafile 

 

  
FOR i IN 1..v_maxPieces LOOP 

    sys
.dbms_backup_restore.restoreBackupPiece(done=>v_done

                           
handle=>v_fileTable(i), 

                           
params=>null); 

    IF 
v_done THEN 

      GOTO all_done


    
END IF; 

  
END LOOP

 

all_done>> 

-- 
Deallocate the device 

  sys
.dbms_backup_restore.deviceDeallocate

 

END



.
4. Applying incrementals

  If incrementals are to be applied, you must execute this anonymous block
  for each incremental datafile backup. The following SYS.DBMS_BACKUP_RESTORE
  packaged functions & procedures are called:

    FUNCTION deviceAllocate             - allocates a device for sequential I/O
    PROCEDURE applySetDataFile          - begins a restore conversation
    PROCEDURE applyDataFileTo           - datafile number & destination
    PROCEDURE applyBackupPiece          - performs the restore
    PROCEDURE deviceDeallocate          - deallocates the I/O device

  The following anonymous block can be created and executed to restore a
  datafile from a backupset. Before executing it, you MUST edit the block
  as follows:

    a. The filetable PL/SQL table entries must reflect the backuppieces
       comprising the backupset
    b. The v_maxPieces variable must reflect the number of backuppieces
       comprising the backupset
    c. The call to applyDataFileTo must specify the correct datafile number,
       and datafile path & filename
PHP code:

DECLARE 

  
v_dev           varchar2(50);           -- device type allocated for restore 

  v_done          boolean
:=false;  -- has the datafile been fully extracted yet 

  type t_fileTable is table of varchar2
(255

    
index by binary_integer

  
v_fileTable     t_fileTable;            -- Stores the backuppiece name 

  v_maxPieces     number
:=1;              -- Number of backuppieces in backupset 

BEGIN 

 

-- Initialise the filetable number of backup pieces in the backupset 

-- This section of code MUST be edited to reflect the customers available 

-- backupset before the procedure is compiled and runIn this examplethe 

-- backupset consists of 1 piecea level 2 backupset

 

  
v_fileTable(1):='fulldb_level2_s18_p1'

  
v_maxPieces:=1

 

-- 
Allocate a deviceIn this exampleI have specified 'sbt_tape' as I am 

-- reading backuppieces from the media manager. If the backuppiece is on disk

-- 
specify type=>null 

 

  v_dev
:=sys.dbms_backup_restore.deviceAllocate(type=>'sbt_tape'

                                                
ident=>'t1'); 

 

-- 
Begin the restore conversation 

 

  sys
.dbms_backup_restore.applySetDataFile

 

-- 
Specify where the datafile is to be recreated 

 

  sys
.dbms_backup_restore.applyDataFileTo(dfnumber=>1

                
toname=>'/support2/OFA_V804/u1/oradata/dbs/sysV804.dbf'); 

 

-- 
Restore the datafile 

  
FOR i IN 1..v_maxPieces LOOP 

    sys
.dbms_backup_restore.applyBackupPiece(done=>v_done

                                             
handle=>v_fileTable(i), 

                                             
params=>null); 

    IF 
v_done THEN 

      GOTO all_done


    
END IF; 

  
END LOOP

all_done>> 

-- 
Deallocate the device 

  sys
.dbms_backup_restore.deviceDeallocate

 

END



.
5. Extracting archivelogs from a backupset

  The last restore stage is to extract the archivelogs from a backupset. This is
  achieved by making use of the following SYS.DBMS_BACKUP_RESTORE packaged
  functions & procedures:

    FUNCTION deviceAllocate             - allocates a device for sequential I/O
    PROCEDURE restoreSetArchivedLog     - begins a restore conversation
    PROCEDURE restoreArchivedLog        - archivelog sequence & thread numbers
    PROCEDURE restoreBackupPiece        - performs the restore
    PROCEDURE deviceDeallocate          - deallocates the I/O device

  The following anonymous block can be created and executed to restore  
  an archivelog from a backupset. Before executing it, you MUST edit the block
  as follows:

    a. The filetable PL/SQL table entries must reflect the backuppieces
       comprising the backupset
    b. The v_maxPieces variable must reflect the number of backuppieces
       comprising the backupset
    c. The call to restoreSetArchivedLog must specify the destination
       where the archivelog is to be restored. Ideally the destination string
       should be the same as init.ora:log_archive_dest
    d. The call to restoreArchivedLog must specify the log sequence number
       and thread number of the archivelog
PHP code:

DECLARE 

  
v_dev      varchar2(50);    -- device type allocated for restore 

  v_done     boolean
:=false; -- has the log been fully extracted yet 

  type t_fileTable is table of varchar2
(255

    
index by binary_integer

  
v_fileTable     t_fileTable;    -- Stores the backuppiece names 

  v_maxPieces     number
:=1;    -- Number of backuppieces in backupset 

BEGIN 

 

-- Initialise the filetable number of backup pieces in the backupset 

-- This section of code MUST be edited to reflect the customers available 

-- backupset before the procedure is compiled and runIn this examplethe 

-- archivelog backupset consists of 2 pieces

 

   
v_fileTable(1):='al_s20_p1'

   
v_fileTable(2):='al_s20_p2'

   
v_maxPieces:=2

  

-- 
Allocate a deviceIn this exampleI have specified 'sbt_tape' as I am 

-- reading backuppieces from the media manager. If the backuppiece is on disk

-- 
specify type=>null 

 

  v_dev
:=sys.dbms_backup_restore.deviceAllocate(type=>'sbt_tape'

                            
ident=>'t1'); 

  

-- 
Begin the restore conversation 

 

  sys
.dbms_backup_restore.restoreSetArchivedLog(destination=>'/support2/OFA_V804/app/oracle/admin/arch/arch_'); 

  

-- 
Specify where the archivelog is to be recreated 

 

  sys
.dbms_backup_restore.restoreArchivedLog(thread=>1

                         
sequence=>100); 

 

-- 
Restore the archivelog 

 

  
FOR i IN 1..v_maxPieces LOOP 

    sys
.dbms_backup_restore.restoreBackupPiece(done=>v_done

                           
handle=>v_fileTable(i), 

                           
params=>null); 

    IF 
v_done THEN 

      GOTO all_done


    
END IF; 

  
END LOOP

 

all_done>> 

-- 
Deallocate the device 

  sys
.dbms_backup_restore.deviceDeallocate

 

END



.
For restoring multiple archives from a backupset, add a loop
  around  sys.dbms_backup_restore.restoreArchivedLog()

  for seq in .. loop
    sys.dbms_backup_restore.restoreArchivedLog(thread=>1,
                                             sequence=>seq);
  end loop

6. A typical scenario

  A customer has backupsets consisting of:
    o. an incremental level 0 database backup
    o. an incremental level 2 database backup
    o. archivelogs from the time of the level 2 backup to the current time
  The target database and recovery catalog have been irretrievably lost.

  In this situation, the following steps should be followed (using the  
  above anonymous blocks):
    1. Start the target instance (nomount)
    2. Restore the latest controlfile, ideally from the same backupset as
       the last incremental to be restored (make further copies if necessary
       as per the init.ora)
    3. Mount the database
    4. Restore the datafiles from the level 0 backupset
    5. Restore (apply) the datafiles from the level 2 backupset
    6. Restore the archivelogs from the archivelog backupset
    7. Using tradtional v7 recovery techniques, recover the database  
       (until cancel using backup controlfile)
    8. Open the database (resetlogs)
    9. Rebuild the recovery catalog & re-register the target database
   10. Make backups of the target database and recovery catalog database


8. Errors

  8.1 ORA-19615 & ORA-19613 when attempting to extract files

     Errorstack:
       ORA-19583: conversation terminated due to error
       ORA-19615: some files not found in backup set
       ORA-19613: datafile not found in backup set
       ORA-06512: at "SYS.X$DBMS_BACKUP_RESTORE", line 1043
       ORA-06512: at line 40

     The problem is that one or more backup pieces specified in the
     v_fileTable table contain NO blocks for the datafile that you are  
     trying to extract.  

     For example, I may have run an RMAN backup and allocated 2 channels to
     backup the (4 datafile) database. This will create 2 backupsets.
PHP code:

.                       

                                                 +- 
Backup piece 1a 

                 
+- (Backupset 1Datafiles 1,-+ 

                 |                               +- 
Backup piece 2a 

       Database 
-+ 

                 |                               +- 
Backup piece 1b 

                 
+- (Backupset 2Datafiles 3,-+ 

                                                 +- 
Backup piece 2b 

   
.
Although the backup pieces may contain blocks from all datafiles
     associated with their backupset, they will not contain blocks from a  
     different backupset i.e. pieces 1a and 1b will NOT contain blocks from  
     datafiles 3 or 4.

     If I want to restore datafile 1, and include either backup pieces 1b or
     2b in v_fileTable, I will get the errorstack above.

     This is why it is important to know what files are in what backupset.
     The original RMAN backup log will help here.


8. Things to be done

  8.1. Error handling
       If the procedures fail with an unhandled exception (quite likely, as
       no exception handlers have been set up), the allocated device does not
       get deallocated. This is unfriendly (the user must exit & restart the
       session) and will be addressed
相关文章
|
3月前
|
人工智能 弹性计算 自然语言处理
零门槛上手OpenClaw!阿里云极简部署,三步解锁专属超级AI助理!
OpenClaw是可私有部署的AI数字员工框架,支持通义千问、GPT等多模型,能写代码、查资料、管邮件、自动化办公。阿里云提供一键部署方案:买服务器→开通百炼API→图形化配置,三步搞定,安全高效!
421 12
|
3月前
|
存储 人工智能 安全
阿里云网盘 Skill 上线:让 OpenClaw 的成果,手机一点就能发给客户
阿里云网盘企业版上线OpenClaw专属Skill,打造AI时代超级文件助理:统一管理手机/电脑/云端数据,支持批量生成、多端协同、秒级分享;200GB仅6.6元/月,空间隔离保障安全,让AI工作流更轻、更省、更高效。
|
7月前
|
消息中间件 存储 运维
RocketMQ 深度解剖:模块划分与集群原理的硬核解析
本文深入解析Apache RocketMQ的核心模块与集群原理,涵盖NameServer路由机制、Broker存储结构、Producer负载均衡及Consumer消费模式,结合实战案例与性能优化策略,全面掌握其在分布式系统中的高可用架构设计与应用实践。
549 5
|
7月前
|
人工智能 搜索推荐 新能源
Geo优化专家于磊:“两大核心+四轮驱动”Geo优化方法论,助力企业实现AI时代获客提效
于磊老师首创“两大核心+四轮驱动”Geo优化法,以人性化内容与交叉验证构建权威,通过E-E-A-T、结构化数据、精准关键词与权威引用,助力企业提升AI搜索可见性与获客效率。
703 8
|
7月前
|
人工智能 弹性计算 机器人
阿里云无影GPU云电脑:NVIDIA RTX 5880显卡收费价格表
阿里云无影GPU云电脑搭载NVIDIA RTX 5880显卡,提供多种配置:8核16G内存4G显存型509元/月起,16核32G内存8G显存型1037元/月起,旗舰型32核64G内存最高48G显存,满足3D建模、AI推理等高性能需求,性价比出众。
|
自然语言处理
|
存储 负载均衡 算法
Hash介绍与应用详解
哈希算法在计算机科学中有着广泛而重要的应用,从数据存储、数据完整性校验到密码安全和分布式系统中的负载均衡,哈希函数都发挥着关键作用。通过本文的介绍和示例代码,希望您能更好地理解哈希的基本概念和实际应用,并在您的项目中有效地应用这些知识。
3428 3
|
API Anolis 开发者
Intel® oneAPI 在龙蜥社区里面的支持情况分享|龙蜥大讲堂116期
本次分享的主题是 Intel® oneAPI 在龙蜥社区里面的支持情况分享。主要分为四个部分: 1. What is Intel® oneAPI 2. Intel® oneAPI infrastructure 3. Anolis Intel® oneAPI enabling status 4. Qwen2 demo
651 0
|
前端开发
Vue3对话框样式修改不了
今天还是说说Vue3引用elementplus组件的问题,今天想说的是设置对话框样式的问题,即如何去修改对话框的样式,特别是在已经全局定义了对话框的样式的情况下怎么去修改组件内的对话框样式
683 0
Vue3对话框样式修改不了
|
关系型数据库 MySQL 测试技术
压测工具sysbench的使用
压测工具sysbench的使用
2052 0