Omarsoft For IT Solutions (Java Codes ,C#.NET Codes , ASP.NET Codes ,VB.NET Codes ,Oracle Database Administration, Real Application Cluster , Remote Support, Cloud Services , Networks ,Virtualization....
  • الأنظــمــة المكتبية        Windows App Programming
  • أنظــمـةالويــب        Web based systems programming
  • تطبيقات الهواتف الذكية     smartphones programming
  • إدارة قواعــــــد البيــــــــــــــــانات        Database Administration
  • إدارة الشبكـــــــــــــــــــــــــــــــــات        Networks Administration
  • إدارة الســـيــرفرات (ويب - محلية)  Servers Administration
  • إدارة مخـــــــــــــــــازن البيــــــــــــانات     Storage Administration
  •             N Computing & 2X Application services

    Social Icons


Oracle GoldenGate Overview

Oracle Corp. has acquired so many companies of late that it's getting to be a job to keep up with things. GoldenGate is one of the products you'll want to stay on top of. It's still kind of under the radar, but it's going to be big. Really big.
Oracle (the corporation) has acquired so many other companies as of late that it’s getting to be job in and of itself to keep up with things. But with GoldenGate, this is one of the products you’ll want to be familiar with. This is one of those products or features where its usage and user base (at least within Oracle) is still kind of under the radar, but it’s going to be big. Really big.
We all know about data within a database, and how to put it in via a database language such as SQL. And we’re familiar with SQL reaching out to another database. But that’s something typically done ad hoc or via a job. How do you “flow” data from one database to another, hands free? That is, an insert on Table A in Database A gets propagated to Table A on Database B? Right now, Oracle Streams (named that I’m sure to reflect the idea of flowing streams of data) fulfills this requirement.
Oracle Streams comes with about, oh, 8,000 data dictionary views and DBMS built-ins, and is certainly not lacking in terms of complexity and moving parts. Additionally, a Streams implementation can include elements of Data Guard (specifically in the Downstream Capture configuration). With respect to Streams and Data Guard, GoldenGate encompasses both and can either augment or replace either tool.
So, what does it take to use GoldenGate?
First off, it takes money, as in more of it, because of how Oracle has chosen to license it. Its cost is tied to the database server licensing metric, so for one processor (perpetual), you’re looking at $17,500 for licensing and $3,850 for the first year’s support. Streams, in comparison, is included in whichever edition you use.
Second, using Linux as the host operating system, it’s a matter of downloading and uncompressing a tar file. Most everything for running GoldenGate is based out of a “ggs” directory. Running on Windows is a bit more involved because of services.
Finally, you have to get used to a new language replete with hundreds of new keywords using a not too complex syntax. The running of GoldenGate can be 100% command line interface. There is an optional add on product (Director) which offers a GUI-based centralized management feature.  do two things for you in terms of replication. Part of replication includes having a downstream or replicated copy (think of a restored backup, however you want to get that in place) of the target. If you choose, GoldenGate can perform the initial load, although it is recommended that you use native RDBMS tools for this step.
The second (and main) task is running and managing the replication process. Replicate how? From just one database to another, or something along the lines of what Streams can do (one-way, bi-directional, N-way)? The topology diagram below should cover just about every possible way you could envision replicating data.
Another neat feature of GoldenGate is that it practically couldn’t care less which database system you’re coming from or going to. It’s almost like a Mac: everything just works. GoldenGate mines transactions from what it refers to as transaction logs (so obviously in Oracle’s case, the redo logs). The extraction process creates “trail” files GoldenGate then sends to the RMTHOST (the remote host, and congratulations if you’re new to GoldenGate: you’ve just seen your first keyword). The configuration workflow diagram shown below highlights this agnostic approach to the database systems involved.
The reference to “Data Pump” in the diagram is not the same Data Pump used in Oracle. The concept is the same though (data being moved at a relatively high speed). Similar to Streams setup, access to the remote host is much easier to configure/perform if the admin account username is the same on all systems.
Under Step 4, you see the word Replicat. That is not a typo: Replicat is the word/term/process used in and by GoldenGate. If using GoldenGate for your replication needs, Replicat will become very familiar.
This leads us to the GoldenGate Software Command Interface, otherwise known as ggsci. GGSCI is to GoldenGate as SQL*Plus is to Oracle. The table below (partial listing) gives you an idea of what GGSCI uses word-wise. Note the INFO word in the left column: plenty of online (well, at least in your session) help is available simply by typing “help ” at the command line.
One of the downsides of Streams processing, where data is typically dealt with on a row-by-row basis for a logical change record (LCR), is that bulk loads can cause performance problems. GoldenGate, and Streams to a degree, has built-in access to SQL*Loader type APIs.
Timing is everything, so how does GoldenGate keep track of transactions? Just like everyone does by using a change number (for example, Oracle’s SCN, MSSQL’s LSN). GoldenGate’s internal bookkeeping “checkpoint” is based on a CSN, or Commit Sequence Number. Knowing the CSN allows you to pick up after a stopped or interrupted process.
For learning how to use GoldenGate, you definitely need to put hands on the keyboard and bang away. Understanding the relationship of parameter and definition files – at an abstract level – is simple; the rub is getting used to GoldenGate’s language and keywords. The sample data in the demo files included with the tool is seriously lacking. For teaching this class, one of the things I incorporate is running a stream of data. I mean, you want to see this work and observe its work in progress. Simply flowing two or three records in the demo files is fine for getting things to work in the first place, but after that, let’s fire this thing up and see what it does.
For the money it costs, especially if you are considering replacing Streams, you’re going to want to see a couple of advantages or benefits over what you’re doing now: a better/easier setup and management, and data being replicated at near real time. No product will ever be exactly real time, but we can get pretty close.

Oracle Enterprise Manager OEM in LINUX (Video)1

Oracle Enterprise Manager OEM  in LINUX
 OEM Configuration and Installation in details

Installing Oracle Database and Creating a Database(Linux) OS

  1. Log on to your computer as a member of the administrative group that is authorized to install Oracle Database software and to create and run the database.
    Refer to your operating system-specific documentation or contact your system administrator to determine whether you have the necessary privileges and permissions to install new software.
  2. Do one of the following:
    • If you are installing from distribution media, then insert the distribution media for the database into your computer.
      The Autorun feature opens the Select a Product to Install window automatically.
    • If you downloaded the installation software from the Oracle Web site, then follow the instructions on the site to run the Oracle Universal Installer. Or, see the Oracle Database Installation Guide for your platform.
  3. The first window that appears is the Configure Security Updates window. To receive notifications about security issues via e-mail, enter your e-mail address in the Email text field. To receive security updates from My Oracle Support, enter the e-mail address registered with My Oracle Support, select the I wish to receive security updates... option, and enter your My Oracle Support password.
    Click Next to continue.
    The Select Installation Option window appears.
  4. Choose the Create and configure a database option. Or, you also have the option of choosing to only install the database software, but then you must create a database in an additional step after the software is installed. If you are currently using a previous version of Oracle Database, choose Upgrade an existing database. After you have chosen an option, click Next.
    The System Class window appears.
  5. Choose Desktop Class.
    You can choose the Server Class option to customize your installation. For example, you use this method to configure Oracle Automatic Storage Management for your database, install the Sample Schemas, or configure automated backups. Selecting this option guides you through a series of installation steps that are not documented in this guide. For more information about the advanced choices, see "About Advanced Installation". Also see Oracle Database Installation Guide for your platform.
    Click Next.
    The Typical Install Configuration window appears.
    Description of install_basic.gif follows

  6. Provide the following configuration details for the database:
    • Oracle Base Location— The Oracle base directory helps to facilitate the organization of multiple Oracle software installations. See the Oracle Database Installation Guide for your platform for more information about ORACLE_BASE.
      If you did not set the ORACLE_BASE environment variable before starting OUI, then the Oracle base directory is created in anapp/username/directory on the first existing and writable directory from /u01 through /u09 for UNIX and Linux systems, or on the disk drive with the most available space for Windows systems. If /u01 through /u09 does not exist on the UNIX or Linux system, then the default location is user_home_directory/app/username.
      You can click Browse to find the directory you want to act as the Oracle base directory.
    • Software Location—The software location is the Oracle home for your database. You must specify a new Oracle home directory for each new installation of Oracle Database software. By default, the Oracle home directory is a subdirectory of the Oracle base directory.
      You can click Browse to find the directory where you want to install the Oracle Database software.
    • Database File Location—The database file location is the location where Oracle Database files are stored. By default, this location is Oracle_base/oradata. You can click Browse to select a different location.
    • Database Edition—Select either Enterprise EditionStandard EditionStandard Edition One, or Personal Edition (Microsoft Windows platforms only). See "Installation Type".
    • Character Set—Choose the character set to use to store the data within the database. You can choose between the Default, which is based on the operating system language settings, or Unicode.
    • OSDBA Group (Linux and UNIX platforms only)—Specify the operating system DBA group. Host computer users in this group have administrative privileges on the database. This group is typically named dba. Refer to Oracle Database Installation Guide for Linuxor for your UNIX platform for more details.
    • Global Database Name—Enter the fully qualified global database name. See "Installation Type" for more on global database name.
    • Administrative Password—Specify the initial password for the SYSSYSTEMSYSMAN, and DBSNMP administrator accounts. If the password you choose is not a secure password, a warning message will be displayed.
    After you enter the required information, click Next.
    If Oracle software has not previously been installed on this server, then the Create Inventory window appears. If this is not the first installation attempt on this server, then the Perform Prerequisite Checks window appears.
  7. For first time installations on Linux and UNIX operating systems only, specify a directory for installation files and the name of an operating system group that has write permissions for that directory.
    If this is the first time you are installing any Oracle software on this computer, then the Create Inventory Directory window appears. You must specify a local directory for the inventory, which OUI uses to keep track of all Oracle software installed on the computer. This information is used while applying patches or upgrading an existing installation, and while deinstalling Oracle software. Note that this directory is different from the Oracle home directory. The recommended value for the inventory directory isOracle_base/../oraInventory, or one level above the Oracle base directory, in the oraInventory subdirectory. If your Oracle base directory is /u01/app/oracle, then the Oracle inventory directory defaults to /u01/app/oraInventory.
    In this window you can also specify the operating system group that has write permissions on the inventory directory. This prevents other users from writing over the Oracle product installation files. Typically the oinstall group is selected.
    After you enter a directory path and optionally specify an operating system group, click Next to continue.
    The Perform Prerequisite Checks window appears.
  8. If any checks failed, then take corrective actions.
    OUI performs several environment checks and indicates whether the check was a success, or resulted in a warning or failure. Details of the checks are provided in the displayed window. The installation can proceed only when all checks have a status of either Succeeded or Warning. If any of the environment checks failed, then they must be resolved manually. See "Checking Prerequisites" for more information.
    If all the prerequisite checks passed, or after you click Next, the Summary window appears,
  9. Review the installation summary, then click Finish to start the installation.
    The Install window appears, showing the installation progress. After the installation phase, the Configuration Assistants window appears. This window lists the configuration assistants that are started automatically. If you chose to create a starter database, then Database Configuration Assistant starts automatically in a separate window.
    After database creation, a window is displayed that summarizes the database creation.
  10. (Optional) Click Password Management to unlock user accounts to make the accounts accessible to users.
    The SYS and SYSTEM accounts are unlocked by default.
  11. Click OK to continue the installation.
  12. For Linux and UNIX operating systems only, run the specified scripts, then click OK.
    In the Execute Configuration Scripts window, you are prompted to open a new terminal window, and to run scripts as the root user. After you run the scripts, return to this window and click OK.
  13. Make note of the information in the Finish window, then click Close to exit OUI.
    Your installation and database creation is now complete. The Finish window displays one or more important URLs, including one for the Oracle Enterprise Manager Database Control console. (The console is the user interface—the Web application—portion of Oracle Enterprise Manager Database Control.)
    You use Oracle Enterprise Manager Database Control to perform common database administration tasks. The URL and port information for Database Control can be found after installation in the Oracle_home/install/portlist.ini file.

DBA Interview Questions 3

What is Row Migration and Row Chaining?
There are two circumstances when this can occur, the data for a row in a table may be too large to fit into a single data block. This can be caused by either row chaining or row migration.
Chaining: Occurs when the row is too large to fit into one data block when it is first inserted. In this case, Oracle stores the data for the row in a chain of data blocks (one or more) reserved for that segment. Row chaining most often occurs with large rows, such as rows that contain a column of data type LONG, LONG RAW, LOB, etc. Row chaining in these cases is unavoidable.
Migration: Occurs when a row that originally fitted into one data block is updated so that the overall row length increases, and the block’s free space is already completely filled. In this case, Oracle migrates the data for the entire row to a new data block, assuming the entire row can fit in a new block. Oracle preserves the original row piece of a migrated row to point to the new block containing the migrated row: the rowid of a migrated row does not change. When a row is chained or migrated, performance associated with this row decreases because Oracle must scan more than one data block to retrieve the information for that row.
  1. INSERT and UPDATE statements that cause migration and chaining perform poorly, because they perform additional processing.
  2. SELECTs that use an index to select migrated or chained rows must perform additional I/Os.
Detection: Migrated and chained rows in a table or cluster can be identified by using the ANALYZE command with the LIST CHAINED ROWS option. This command collects information about each migrated or chained row and places this information into a specified output table. To create the table that holds the chained rows,
execute script UTLCHAIN.SQL.
SQL> SELECT * FROM chained_rows;
You can also detect migrated and chained rows by checking the ‘table fetch continued row’ statistic in the v$sysstat view.
SQL> SELECT name, value FROM v$sysstat WHERE name = ‘table fetch continued row’;
Although migration and chaining are two different things, internally they are represented by Oracle as one. When detecting migration and chaining of rows you should analyze carefully what you are dealing with.
What is Ora-01555 - Snapshot Too Old error and how do you avoid it?
1. Increase the size of rollback segment. (Which you have already done)
2. Process a range of data rather than the whole table.
3. Add a big rollback segment and allot your transaction to this RBS.
4. There is also possibility of RBS getting shrunk during the life of the query by setting optimal.
5. Avoid frequent commits.
6. Google out for other causes.
What is a locally Managed Tablespace?
A Locally Managed Tablespace is a tablespace that manages its own extents maintaining a bitmap in each data file to keep track of the free or used status of blocks in that data file. Each bit in the bitmap corresponds to a block or a group of blocks. When the extents are allocated or freed for reuse, Oracle changes the bitmap values to show the new status of the blocks. These changes do not generate rollback information because they do not update tables in the data dictionary (except for tablespace quota information), unlike the default method of Dictionary - Managed Tablespaces.
Following are the major advantages of locally managed tablespaces –
• Reduced contention on data dictionary tables 
• No rollback generated 
• No coalescing required 
• Reduced recursive space management.
Can you audit SELECT statements?
      Yes, we can audit the select statements. Check out the below example:
SQL> show parameter audit
———————————— ———– ——————————
audit_file_dest string E:\ORACLE\PRODUCT\10.2.0\DB_2\
audit_sys_operations boolean FALSE
audit_trail string NONE
SQL>  begin
dbms_fga.add_policy ( object_schema => ‘SCOTT’,
object_name => ‘EMP2′,
policy_name => ‘EMP_AUDIT’,
statement_types => ‘SELECT’ );
PL/SQL procedure successfully completed.
SQL>select * from dba_fga_audit_trail;
             no rows selected
In HR schema:
SQL> create table bankim(
name varchar2 (10),
roll number (20));
Table created.
SQL> insert into bankim values (‘bankim’, 10);
1 row created.
SQL> insert into bankim values (‘bankim2′, 20);
1 row created.
SQL> select * from bankim;
———- ———-
bankim 10
bankim2 20
SQL> select name from bankim;
In sys schema:
SQL>set head off
SQL> select sql_text from dba_fga_audit_trail;
select count(*) from emp2
select * from emp2
select * from emp3
select count(*) from bankim
select * from bankim
select name from bankim
What does DBMS_FGA package do?
The dbms_fga Package is the central mechanism for the FGA is implemented in the package dbms_fga, where all the APIs are defined. Typically, a user other than SYS is given the responsibility of maintaining these policies. With the convention followed earlier, we will go with the user SECUSER, who is entrusted with much of the security features. The following statement grants the user SECUSER enough authority to create and maintain the auditing facility.
Grant execute on dbms_fga to secuser;
The biggest problem with this package is that the polices are not like regular objects with owners. While a user with execute permission on this package can create policies, he or she can drop policies created by another user, too. This makes it extremely important to secure this package and limit the use to only a few users who are called to define the policies, such as SECUSER, a special user used in examples.
What is Cost Based Optimization?
The CBO is used to design an execution plan for SQL statement. The CBO takes an SQL statement and tries to weigh different ways (plan) to execute it. It assigns a cost to each plan and chooses the plan with smallest cost.
The cost for smallest is calculated: Physical IO + Logical IO / 1000 + net IO.
How often you should collect statistics for a table?
CBO needs some statistics in order to assess the cost of the different access plans. These statistics includes:
Size of tables, Size of indexes, number of rows in the tables, number of distinct keys in an index, number of levels in a B* index, average number of blocks for a value, average number of leaf blocks in an index
These statistics can be gathered with dbms_stats and the monitoring feature.
How do you collect statistics for a table, schema and Database?
Statistics are gathered using the DBMS_STATS package. The DBMS_STATS package can gather statistics on table and indexes, and well as individual columns and partitions of tables. When you generate statistics for a table, column, or index, if the data dictionary already contains statistics for the object, then Oracle updates the existing statistics. The older statistics are saved and can be restored later if necessary. When statistics are updated for a database object, Oracle invalidates any currently parsed SQL statements that access the object. The next time such a statement executes, the statement is re-parsed and the optimizer automatically chooses a new execution plan based on the new statistics.
Collect Statistics on Table Level
sqlplus scott/tiger
exec dbms_stats.gather_table_stats ( -
     ownname          => 'SCOTT', -
     tabname          => 'EMP', -
     estimate_percent => dbms_stats.auto_sample_size, -
     method_opt       => 'for all columns size auto', -
     cascade          => true, -
     degree           => 5 - )
Collect Statistics on Schema Level
sqlplus scott/tiger
exec dbms_stats.gather_schema_stats ( -
     ownname          => 'SCOTT', -
     options          => 'GATHER', -
     estimate_percent => dbms_stats.auto_sample_size, -
     method_opt       => 'for all columns size auto', -
     cascade          => true, -
     degree           => 5 - )

Collect Statistics on Other Levels
DBMS_STATS can collect optimizer statistics on the following levels, see Oracle Manual
Can you make collection of Statistics for tables automatic?
Yes, you can schedule your statistics but in some situation automatic statistics gathering may not be adequate. It suitable for those databases whose object is modified frequently. Because the automatic statistics gathering runs during an overnight batch window, the statistics on tables which are significantly modified during the day may become stale.
There may be two scenarios in this case:                           
·         Volatile tables that are being deleted or truncated and rebuilt during the course of the day.
·         Objects which are the target of large bulk loads which add 10% or more to the object’s total size.
So you may wish to manually gather statistics of those objects in order to choose the optimizer the best execution plan. There are two ways to gather statistics.
  1. Using DBMS_STATS package.
  2. Using ANALYZE command
How can you use ANALYZE statement to collect statistics?
To delete statistics:
To get the analyze details:
SELECT owner_name, table_name, head_rowid, analyze_timestamp FROM chained_rows;
On which columns you should create Indexes?
The following list gives guidelines in choosing columns to index:
  • You should create indexes on columns that are used frequently in WHERE clauses.
  • You should create indexes on columns that are used frequently to join tables.
  • You should create indexes on columns that are used frequently in ORDER BY clauses.
  • You should create indexes on columns that have few of the same values or unique values in the table.
  • You should not create indexes on small tables (tables that use only a few blocks) because a full table scan may be faster than an indexed query.
  • If possible, choose a primary key that orders the rows in the most appropriate order.
  • If only one column of the concatenated index is used frequently in WHERE clauses, place that column first in the CREATE INDEX statement.
  • If more than one column in a concatenated index is used frequently in WHERE clauses, place the most selective column first in the CREATE INDEX statement.
What type of Indexes is available in Oracle?
  • B-tree indexes: the default and the most common.
  • B-tree cluster indexes: defined specifically for cluster.
  • Hash cluster indexes: defined specifically for a hash cluster.
  • Global and local indexes: relate to partitioned tables and indexes.
  • Reverse key indexes: most useful for Oracle Real Application Clusters.
  • Bitmap indexes: compact; work best for columns with a small set of values
  • Function-based indexes: contain the pre-computed value of a function/expression Domain indexes: specific to an application or cartridge.
What is B-Tree Index?
B-Tree is an indexing technique most commonly used in databases and file systems where pointers to data are placed in a balance tree structure so that all references to any data can be accessed in an equal time frame. It is also a tree data structure which keeps data sorted so that searching, inserting and deleting can be done in logarithmic amortized time.
A table is having few rows, should you create indexes on this table?
You should not create indexes on small tables (tables that use only a few blocks) because a full table scan may be faster than an indexed query.
A Column is having many repeated values which type of index you should create on this column
B-Tree index is suitable if the columns being indexed are high cardinality (number of repeated values). In fact for this situation a bitmap index is very useful but bitmap index are vary expensive.
When should you rebuild indexes?
There is no thumb rule “when you should rebuild the index”. According to expert it depends upon your database situation:
When the data in index is sparse (lots of holes in index, due to deletes or updates) and your query is usually range based or If Blevel >3 then takes index in rebuild consideration; desc DBA_Indexes;
Because when you rebuild indexes then database performance goes down.
In fact binary tree index can never be unbalanced. Binary tree performance is good for both small and large tables and does not degrade with the growth of table.
Can you build indexes online?
Yes, we can build index online. It allows performing DML operation on the base table during index creation. You can use the statements:
ALTER INDEX REBUILD ONLINE is used to rebuild the index online.
A Table Lock is required on the index base table at the start of the CREATE or REBUILD process to guarantee DDL information. A lock at the end of the process also required to merge change into the final index structure.
A table is created with the following setting
                storage (initial 200k
                   next 200k
                   minextents 2
                   maxextents 100
                   pctincrease 40)
What will be size of 4th extent?
Percent Increase allows the segment to grow at an increasing rate.
The first two extents will be of a size determined by the Initial and Next parameter (200k)
The third extent will be 1 + PCTINCREASE/100 times the second extent (1.4*200=280k).
AND the 4th extent will be 1 + PCTINCREASE/100 times the third extent (1.4*280=392k!!!) and so on...
Can you Redefine a table Online?
Yes. We can perform online table redefinition with the Enterprise Manager Reorganize Objects wizard or with the DBMS_REDEFINITION package.
It provides a mechanism to make table structure modification without significantly affecting the table availability of the table. When a table is redefining online it is accessible to both queries and DML during the redefinition process.
Purpose for Table Redefinition
·         Add, remove, or rename columns from a table
·         Converting a non-partitioned table to a partitioned table and vice versa
·         Switching a heap table to an index organized and vice versa
Modifying storage parameters
·         Adding or removing parallel support
·         Reorganize (defragmenting) a table
·         Transform data in a table
Restrictions for Table Redefinition:
·         One cannot redefine Materialized Views (MViews) and tables with MViews or MView Logs defined on them.
·         One cannot redefine Temporary and Clustered Tables
·         One cannot redefine tables with BFILE, LONG or LONG RAW columns
·         One cannot redefine tables belonging to SYS or SYSTEM
·         One cannot redefine Object tables
·         Table redefinition cannot be done in NOLOGGING mode (watch out for heavy archiving)
·         Cannot be used to add or remove rows from a table
Can you assign Priority to users?
Yes, we can do this through resource manager. The Database Resource Manager gives a database administrators more control over resource management decisions, so that resource allocation can be aligned with an enterprise's business objectives.
With Oracle database Resource Manager an administrator can:
  • Guarantee certain users a minimum amount of processing resources regardless of the load on the system and the number of users
  • Distribute available processing resources by allocating percentages of CPU time to different users and applications.
  • Limit the degree of parallelism of any operation performed by members of a group of users
  • Create an active session pool. This pool consists of a specified maximum number of user sessions allowed to be concurrently active within a group of users. Additional sessions beyond the maximum are queued for execution, but you can specify a timeout period, after which queued jobs terminate.
  • Allow automatic switching of users from one group to another group based on administrator-defined criteria. If a member of a particular group of users creates a session that runs for longer than a specified amount of time, that session can be automatically switched to another group of users with different resource requirements.
  • Prevent the execution of operations that are estimated to run for a longer time than a predefined limit
  • Create an undo pool. This pool consists of the amount of undo space that can be consumed in by a group of users.
  • Configure an instance to use a particular method of allocating resources. You can dynamically change the method, for example, from a daytime setup to a nighttime setup, without having to shut down and restart the instance.

Sana'a Yemen - 50th st.

+967 738166685

للاتصال بنا CONTACT US

الاسم Name

بريد إلكتروني Email *

رسالة Message *

2015-2023 © All Rights Reserved Omarsoft
Back To Top