Monthly Archives: Февраль 2012

DGMGRL: Reinstating ex-Primary to Standby by FlashBack Database feature…

From time to time every of us meets with hardware crashes. That’s why creating disaster recovery configurations by DataGuard is very useful for every DB regardless of its size. But the size of DB defines the tool with which DBA must recreate primary DB and DR configuration.

If DB is quite small — simple cold copy or RMAN duplicate is good enough. But in case of huge warehouses or datamarts this way is too long. That’s why I recommend the following solution: reinstate DR by Flashback Database feature.

For this example I need 2 DBs, configured by DataGuard Manager, something I’ve made earlier in this article.

Work Plan:

  1. Simulate «disaster» at PRM;
  2. Failover to STB;
  3. Convert failed PRM into standby database;
  4. Reinstate PRM in DataGuard configuration;
  5. Switchover to PRM.

1. Simulate «disaster» at PRM:

SQL> select sequence#,archived from v$log;
 SEQUENCE# ARC
---------- ---
         4 YES
         5 NO
         3 YES
SQL> create table test01 as select * from v$log;
Table created.
SQL> shutdown abort;
ORACLE instance shut down.

2. Connect to dgmgrl@STB and failover to STB:

C:\Tools\Oracle\product\11.2.0\db\database>set ORACLE_SID=STB
C:\Tools\Oracle\product\11.2.0\db\database>dgmgrl sys/manager
DGMGRL for 64-bit Windows: Version 11.2.0.1.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> show configuration
Configuration - dr
Protection Mode: MaxAvailability
 Databases:
 prm - Primary database
 stb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
ORA-16625: cannot reach database "prm"
DGM-17017: unable to determine configuration status
DGMGRL> failover to STB;
Performing failover NOW, please wait...
Failover succeeded, new primary is "stb"

3. Convert failed PRM into standby database:

Here we need to determine SCN, when STB DB has became primary:

SQL> select STANDBY_BECAME_PRIMARY_SCN from v$database;
 STANDBY_BECAME_PRIMARY_SCN
--------------------------
                   1378375

After getting SCN, we need to mount PRM and execute:

C:\Tools\Oracle\product\11.2.0\db\database>set ORACLE_SID=PRM

C:\Tools\Oracle\product\11.2.0\db\database>sqlplus sys/manager as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Tue Feb 14 13:55:35 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount
ORACLE instance started.
Total System Global Area  810053632 bytes
Fixed Size                  2180104 bytes
Variable Size             532679672 bytes
Database Buffers          268435456 bytes
Redo Buffers                6758400 bytes
Database mounted.
SQL> FLASHBACK DATABASE TO SCN 1378375;
Flashback complete.
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

Database altered.
SQL> SHUTDOWN IMMEDIATE;

ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area  810053632 bytes
Fixed Size                  2180104 bytes
Variable Size             532679672 bytes
Database Buffers          268435456 bytes
Redo Buffers                6758400 bytes
Database mounted.

And now we have at PRM:

SQL> select database_role,open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED

4. Reinstate PRM in DataGuard configuration;

Connect to DataGuard at STB (as it’s configuration is only valid) and run:

DGMGRL> show configuration
Configuration - dr
  Protection Mode: MaxAvailability
  Databases:
    stb - Primary database
      Warning: ORA-16629: database reports a different protection level from the protection mode
    prm - Physical standby database (disabled)
      ORA-16661: the standby database needs to be reinstated
Fast-Start Failover: DISABLED
Configuration Status:
WARNING
DGMGRL> reinstate database prm;

Reinstating database "prm", please wait...
Reinstatement of database "prm" succeeded
DGMGRL> show configuration
Configuration - dr
  Protection Mode: MaxAvailability
  Databases:
    stb - Primary database
      Warning: ORA-16629: database reports a different protection level from the protection mode
    prm - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
WARNING

5. Switchover to PRM. At last we are ready to switchover back to PRM :

 
C:\Tools\Oracle\product\11.2.0\db\database>dgmgrl sys/manager@stb
DGMGRL for 64-bit Windows: Version 11.2.0.1.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> switchover to PRM;
Performing switchover NOW, please wait...
New primary database "prm" is opening...
Operation requires shutdown of instance "stb" on database "stb"
Shutting down instance "stb"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "stb" on database "stb"
Starting instance "stb"...
Unable to connect to database
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor Failed.
Warning: You are no longer connected to ORACLE.
Please complete the following steps to finish switchover:
        start up and mount instance "stb" of database "stb"

Starting STB as standby DB:

Connected to an idle instance.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 810053632 bytes
Fixed Size 2180104 bytes
Variable Size 478153720 bytes
Database Buffers 322961408 bytes
Redo Buffers 6758400 bytes
SQL> alter database mount standby database;
Database altered.

And at last:

C:\Tools\Oracle\product\11.2.0\db\database>dgmgrl sys/manager
DGMGRL for 64-bit Windows: Version 11.2.0.1.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> show configuration
Configuration - dr
Protection Mode: MaxAvailability
 Databases:
 prm - Primary database
 stb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

At the end of article all instances are fine, PRM is primary back and all work could be made by users is safe.

Here Oracle Docs I used to write this note.

Enjoy your safety!

Useful scripts: Gather some session statistics…

RDBMS Version: 10g.
Script shows following session statistic values:
  • PGA Memory, in MB;
  • CPU, used by session;
  • Hard Parse, %;
  • Physical read bytes, in MB;
  • Physical write bytes, in MB;
  • Redo size, in MB;
  • Received from client, in MB;
  • Sent to client, in MB.
  SELECT Logon_time,
         (SELECT ROUND (VALUE / 1024 / 1024, 2)
            FROM v$sesstat
           WHERE STATISTIC# = 25 AND v$sesstat.SID = v$session.sid)
            AS "PGA Memory, in MB",
         (SELECT VALUE
            FROM v$sesstat
           WHERE STATISTIC# = 12 AND v$sesstat.SID = v$session.sid)
            AS "CPU, used by session",
         ROUND ( (SELECT VALUE
                    FROM v$sesstat
                   WHERE STATISTIC# = 339 AND v$sesstat.SID = v$session.sid)
                / (SELECT DECODE (VALUE, 0, 1, VALUE)
                     FROM v$sesstat
                    WHERE STATISTIC# = 338 AND v$sesstat.SID = v$session.sid),
                2)
            AS "Hard Parse, %",
         (SELECT ROUND (VALUE / 1024 / 1024, 2)
            FROM v$sesstat
           WHERE STATISTIC# = 58 AND v$sesstat.SID = v$session.sid)
            AS "Physical read bytes, in MB",
         (SELECT ROUND (VALUE / 1024 / 1024, 2)
            FROM v$sesstat
           WHERE STATISTIC# = 66 AND v$sesstat.SID = v$session.sid)
            AS "Physical write bytes, in MB",
         (SELECT ROUND (VALUE / 1024 / 1024, 2)
            FROM v$sesstat
           WHERE STATISTIC# = 139 AND v$sesstat.SID = v$session.sid)
            AS "Redo size, in MB",
         (SELECT ROUND (VALUE / 1024 / 1024, 2)
            FROM v$sesstat
           WHERE STATISTIC# = 344 AND v$sesstat.SID = v$session.sid)
            AS "Received from client, in MB",
         (SELECT ROUND (VALUE / 1024 / 1024, 2)
            FROM v$sesstat
           WHERE STATISTIC# = 343 AND v$sesstat.SID = v$session.sid)
            AS "Sent to client, in MB",
         SID,
         SERIAL#,
         v$session.STATUS,
         PROGRAM,
         USER#,
         USERNAME,
         COMMAND,
         OWNERID,
         OSUSER,
         PROCESS,
         MACHINE,
         OBJECT_NAME
    FROM    v$session
         LEFT OUTER JOIN
            DBA_OBJECTS
         ON v$session.ROW_WAIT_OBJ# = dba_objects.object_ID
   WHERE v$session.LOGON_TIME BETWEEN TRUNC (SYSDATE) AND SYSDATE
         --AND v$session.STATUS = 'ACTIVE'
ORDER BY 5 DESC

Oracle 11g have changed statistac ID’s there for I put the same script for 11g:

SELECT Logon_time,
       (SELECT ROUND (VALUE / 1024 / 1024, 2)
          FROM v$sesstat
         WHERE STATISTIC# = 35 AND v$sesstat.SID = v$session.sid)
          AS "PGA Memory, in MB",
       (SELECT VALUE
          FROM v$sesstat
         WHERE STATISTIC# = 17 AND v$sesstat.SID = v$session.sid)
          AS "CPU, used by session",
       ROUND ( (SELECT VALUE
                  FROM v$sesstat
                 WHERE STATISTIC# = 584 AND v$sesstat.SID = v$session.sid)
              / (SELECT DECODE (VALUE, 0, 1, VALUE)
                   FROM v$sesstat
                  WHERE STATISTIC# = 583 AND v$sesstat.SID = v$session.sid),
              2)
          AS "Hard Parse, %",
       (SELECT ROUND (VALUE / 1024 / 1024, 2)
          FROM v$sesstat
         WHERE STATISTIC# = 83 AND v$sesstat.SID = v$session.sid)
          AS "Physical read bytes, in MB",
       (SELECT ROUND (VALUE / 1024 / 1024, 2)
          FROM v$sesstat
         WHERE STATISTIC# = 96 AND v$sesstat.SID = v$session.sid)
          AS "Physical write bytes, in MB",
       (SELECT ROUND (VALUE / 1024 / 1024, 2)
          FROM v$sesstat
         WHERE STATISTIC# = 185 AND v$sesstat.SID = v$session.sid)
          AS "Redo size, in MB",
       (SELECT ROUND (VALUE / 1024 / 1024, 2)
          FROM v$sesstat
         WHERE STATISTIC# = 590 AND v$sesstat.SID = v$session.sid)
          AS "Received from client, in MB",
       (SELECT ROUND (VALUE / 1024 / 1024, 2)
          FROM v$sesstat
         WHERE STATISTIC# = 589 AND v$sesstat.SID = v$session.sid)
          AS "Sent to client, in MB",
       SID,
       SERIAL#,
       v$session.STATUS,
       PROGRAM,
       USER#,
       USERNAME,
       COMMAND,
       OWNERID,
       OSUSER,
       PROCESS,
       MACHINE,
       OBJECT_NAME
  FROM    v$session
       LEFT OUTER JOIN
          DBA_OBJECTS
       ON v$session.ROW_WAIT_OBJ# = dba_objects.object_ID
 WHERE v$session.LOGON_TIME BETWEEN TRUNC (SYSDATE) AND SYSDATE
       --AND v$session.STATUS = 'ACTIVE'
ORDER BY 5 DESC

DGMGRL… Configuration of Disaster Recovery in few steps…

Sometimes there is a need to make a DR confgiuration as fast as possible, the fastet way is to use dgmgrl utility, which is available under Enterprise Edition.

We’ll need:

  • — Primary DB;
  • — Oracle_home.

At the first I need to make few preparations at primary DB:

SQL> alter database force logging;
Database altered.
SQL> alter database flashback on;
Database altered.

Then I need to create standby logfiles (amount of logfiles + 1), a standby control file and copy primary datafiles to target host (in my case the same, but in a different directory):

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('C:\TOOLS\ORACLE\PRODUCT\ORADATA\PRM\redo04.stb') SIZE 50M;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('C:\TOOLS\ORACLE\PRODUCT\ORADATA\PRM\redo05.stb') SIZE 50M;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('C:\TOOLS\ORACLE\PRODUCT\ORADATA\PRM\redo06.stb') SIZE 50M;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('C:\TOOLS\ORACLE\PRODUCT\ORADATA\PRM\redo07.stb') SIZE 50M;
Database altered.
SQL> alter database create standby controlfile as 'stbprm.ctl';
Database altered.
SQL> alter database begin backup;
Database altered.
SQL> host "copy C:\Tools\Oracle\product\oradata\PRM\*.* C:\Tools\Oracle\product\oradata\STB";
C:\Tools\Oracle\product\oradata\PRM\CONTROL01.CTL
C:\Tools\Oracle\product\oradata\PRM\REDO01.LOG
C:\Tools\Oracle\product\oradata\PRM\REDO02.LOG
C:\Tools\Oracle\product\oradata\PRM\REDO03.LOG
C:\Tools\Oracle\product\oradata\PRM\REDO04.STB
C:\Tools\Oracle\product\oradata\PRM\REDO05.STB
C:\Tools\Oracle\product\oradata\PRM\REDO06.STB
C:\Tools\Oracle\product\oradata\PRM\REDO07.STB
C:\Tools\Oracle\product\oradata\PRM\SYSAUX01.DBF
C:\Tools\Oracle\product\oradata\PRM\SYSTEM01.DBF
C:\Tools\Oracle\product\oradata\PRM\TEMP01.DBF
C:\Tools\Oracle\product\oradata\PRM\UNDOTBS01.DBF
C:\Tools\Oracle\product\oradata\PRM\USERS01.DBF
Скопировано файлов: 13.
SQL> alter database end backup;
Database altered.
SQL> create pfile from spfile;
File created.

Now I have everything I need to start standby instance.

1. Copy pfile INITprm.ora to INITstb.ora,add one string  into it and replace pathes to match their new locations:

*.control_files='C:\Tools\Oracle\product\oradata\STB\control01.ctl','C:\Tools\Oracle\product\oradata\STB\control02.ctl'
*.audit_file_dest='C:\Tools\Oracle\product\admin\STB\adump'
*.db_name='PRM'
db_unique_name='STB';

2. Copy PWDPRM.ora (password file) to PWDSTB.ora.

3. Set ORACLE_SID and add a service by oradim:

C:\Tools\Oracle\product\11.2.0\db\database>set ORACLE_SID=STB
C:\Tools\Oracle\product\11.2.0\db\database>oradim -new -SID STB -startmode manual -spfile -srvcstart system
Instance created.

4.Replace original control files by standby version .

5. Connect to new created idle instance by sqlplus and mount it using pfile :

SQL> startup mount pfile='%ORACLE_HOME%\database\INITstb.ora';

6. Then rename all datafiles and logfiles to match new pathes (You also can duplicate DB with RMAN):

SQL> alter database rename file 'C:\TOOLS\ORACLE\PRODUCT\ORADATA\PRM\SYSTEM01.DBF' to 'C:\TOOLS\ORACLE\PRODUCT\ORADATA\STB\SYSTEM01.DBF';
Database altered.

Repeat this step for every datafile and logfile. You can find their names in v$datafile, v$logfile views;

7. Create spfile, shutdown instance, startup nomount and mount in standby mode:

SQL> create spfile from pfile;
File created.
SQL> shutdown immediate;
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 810053632 bytes
Fixed Size 2180104 bytes
Variable Size 478153720 bytes
Database Buffers 322961408 bytes
Redo Buffers 6758400 bytes
SQL> alter database mount standby database;
Database altered.

Assure for ability to connect to both instances.

The final stage — DGMGRL:

1. To start DataGuard Broker run at both instances:

SQL> alter system set dg_broker_start=true scope=both;
System altered.

This is a dynamic parameter.

2. Connect to DataGuard broker and create a configuration in 3 steps:

C:\Tools\Oracle\product\11.2.0\db\BIN>dgmgrl sys/manager
DGMGRL for 64-bit Windows: Version 11.2.0.1.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> create configuration DR as primary database is PRM connect identifier is PRM;
Configuration "dr" created with primary database "prm"
DGMGRL> add database STB as connect identifier is STB maintained as physical;
Database "stb" added
DGMGRL> enable configuration
Enabled.
DGMGRL> show configuration
Configuration - dr
Protection Mode: MaxPerformance
 Databases:
 prm - Primary database
 stb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

3. Technically — that is all. You have an async MaxPerformance DR. But to make it more reliable I’ll make it SYNC and MaxAvailability:

DGMGRL> edit database PRM set property LogXptMode=SYNC;
Property "logxptmode" updated
DGMGRL> edit database STB set property LogXptMode=SYNC;
Property "logxptmode" updated
DGMGRL> edit configuration set protection mode as MaxAvailability;
Succeeded.

Now we have a syncronized and protected DR solution! And just in few steps.

No need to make huge changes in pfile — everything is done by dgmgrl! The longest procedure is to make a copy of the primary database.

‘COMPATIBLE’: as promised, a version upgrade procedure.

As I had promised earlier in my previous post, here is a short step-by-step description of upgrade procedure. I omit overall pre-upgrade checking , my goal is to show — when we need to manually change ‘COMPATIBLE’ parameter.

Requirements:

  • — 10g DB
  • — 11g Oracle home
  • — keg of a beer (just kidding 🙂 )
I’ve got both Oracle homes at one PC.

Run pre-upgrade script utlu112i.sql from 11g Oracle home and analyze output. Here is mine:

SQL> @c:\temp\utlu112i.sql
Oracle Database 11.2 Pre-Upgrade Information Tool 02-02-2012 13:01:40
.
**********************************************************************
Database:
**********************************************************************
--> name: ORCL10G
--> version: 10.2.0.4.0
--> compatible: 10.2.0.3.0
--> blocksize: 8192
--> platform: Microsoft Windows x86 64-bit
--> timezone file: V4
.
**********************************************************************
Tablespaces: [make adjustments in the current environment]
**********************************************************************
--> SYSTEM tablespace is adequate for the upgrade.
.... minimum required size: 682 MB
.... AUTOEXTEND additional space required: 192 MB
--> UNDOTBS1 tablespace is adequate for the upgrade.
.... minimum required size: 462 MB
.... AUTOEXTEND additional space required: 387 MB
--> SYSAUX tablespace is adequate for the upgrade.
.... minimum required size: 348 MB
.... AUTOEXTEND additional space required: 78 MB
--> TEMP tablespace is adequate for the upgrade.
.... minimum required size: 61 MB
.... AUTOEXTEND additional space required: 41 MB
.
**********************************************************************
Flashback: OFF
**********************************************************************
**********************************************************************
Update Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
-- No update parameter changes are required.
.
**********************************************************************
Renamed Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
-- No renamed parameters found. No changes are required.
.
**********************************************************************
Obsolete/Deprecated Parameters: [Update Oracle Database 11.2 init.ora or spfile]
**********************************************************************
--> background_dump_dest 11.1 DEPRECATED replaced by
"diagnostic_dest"
--> user_dump_dest 11.1 DEPRECATED replaced by
"diagnostic_dest"
--> core_dump_dest 11.1 DEPRECATED replaced by
"diagnostic_dest"
.
**********************************************************************
Components: [The following database components will be upgraded or installed]
**********************************************************************
--> Oracle Catalog Views [upgrade] VALID
--> Oracle Packages and Types [upgrade] VALID
--> JServer JAVA Virtual Machine [upgrade] VALID
--> Oracle XDK for Java [upgrade] VALID
--> Oracle Workspace Manager [upgrade] VALID
--> OLAP Analytic Workspace [upgrade] VALID
--> OLAP Catalog [upgrade] VALID
--> Oracle Text [upgrade] VALID
--> Oracle XML Database [upgrade] VALID
--> Oracle Java Packages [upgrade] VALID
--> Oracle interMedia [upgrade] VALID
--> Spatial [upgrade] VALID
--> Data Mining [upgrade] VALID
--> Expression Filter [upgrade] VALID
--> Rule Manager [upgrade] VALID
--> Oracle OLAP API [upgrade] VALID
.
**********************************************************************
Miscellaneous Warnings
**********************************************************************
WARNING: --> Database is using a timezone file older than version 11.
.... After the release migration, it is recommended that DBMS_DST package
.... be used to upgrade the 10.2.0.4.0 database timezone version
.... to the latest version which comes with the new release.
WARNING: --> Database contains schemas with stale optimizer statistics.
.... Refer to the Upgrade Guide for instructions to update
.... schema statistics prior to upgrading the database.
.... Component Schemas with stale statistics:
.... SYS
.... OLAPSYS
WARNING: --> Database contains schemas with objects dependent on network
packages.
.... Refer to the Upgrade Guide for instructions to configure Network ACLs.
WARNING:--> recycle bin in use.
.... Your recycle bin turned on.
.... It is REQUIRED
.... that the recycle bin is empty prior to upgrading
.... your database.
.... The command: PURGE DBA_RECYCLEBIN
.... must be executed immediately prior to executing your upgrade.
.
PL/SQL procedure successfully completed.

As you can see I need to modify pfile and purge recycle bin, but be careful — my DB is for testing purposes and to avoid all possible errors follow Oracle docs!

Shutdown and startup DB with UPGRADE option:

SQL> startup upgrade;

Then run DBUA from 11g Oracle home!

I won’t post screenshots of Database Upgrade Assistant (dbua), it is very simple, follow on-screen instructions and select required DB 😉

At the end of DBUA execution I’ve got the following:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select NAME,VALUE from v$parameter where NAME in ('db_name','compatible');
NAME                 VALUE
-------------------- --------------------
compatible           10.2.0.3.0
db_name              orcl10g

And only now I must set ‘COMPATIBLE’ to 11.2.0.1.0 (I’ve created pfile and manually set):

Connected to an idle instance.
SQL> startup mount pfile='INITorcl10g.ORA';
ORACLE instance started.
Total System Global Area 1185853440 bytes
Fixed Size 2175168 bytes
Variable Size 436211520 bytes
Database Buffers 738197504 bytes
Redo Buffers 9269248 bytes
Database mounted.
SQL> alter database open;
Database altered.
SQL> create spfile from pfile;
File created.
SQL> select NAME,VALUE from v$parameter where NAME in ('db_name','compatible');
NAME                 VALUE
-------------------- --------------------
compatible           11.2.0.1.0
db_name              orcl10g

And the last test, if database would be available with ‘COMPATIBLE’ immediatly set back to ‘10.2.0.3.0’:

SQL> startup pfile='INITorcl10g.ORA';
ORACLE instance started.
Total System Global Area 1185853440 bytes
Fixed Size 2175168 bytes
Variable Size 436211520 bytes
Database Buffers 738197504 bytes
Redo Buffers 9269248 bytes
ORA-00201: control file version 11.2.0.1.0 incompatible with ORACLE version 10.2.0.3.0
ORA-00202: control file: 'C:\TOOLS\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL10G\CONTROL01.CTL'

That’s it, enjoy compatibility and don’t let anybody confuse you!

%d такие блоггеры, как: