CLEVELAND -- Jhonny Peralta was looking for a fastball. Still, he wasn't expecting to hit the first game-ending homer of his life.
"I was just so happy because I never won a game with a home run before," Peralta said. "Not even when I was a kid."
Peralta gleefully tossed his helmet in the air as he reached home plate and was mobbed by his teammates.
"I looked for a fastball outside and that's what he threw. I hit it good and I was so happy running the bases," he said.
Travis Hafner's second homer of the game and 42nd of the season for Cleveland tied it at 2 in the eighth against Jeremy Accardo.
Two innings later, Peralta lined a 2-1 pitch from Ryan (1-2) into a strong wind and over the wall in right field for his 12th homer, handing Toronto its first loss in seven extra-inning games this season.
"You saw where it ended up," Ryan said. "I would like to have it back. He made a good swing and hit a bad pitch."
Rafael Betancourt (3-4) pitched two scoreless innings for the win as Cleveland improved to 16-5 since Aug. 9. Cleveland is 4-3 in extra innings overall.
The Indians loaded the bases with one out in the ninth against Brandon League. Then Ryan came on to strike out Hafner and get Victor Martinez on a flyout to force extra innings.
"I didn't want to use B.J. there, but it was dire straits," Toronto manager John Gibbons said. "You want to win the game. He's been unbelievable for us all year."
Hafner had a chance to hit his seventh grand slam of the season and break a tie for the major league record with former New York Yankees first baseman Don Mattingly.
"That was an unbelievable sequence," Indians manager Eric Wedge said. "One of the best hitters against one of the best pitchers. Ryan did a great job."
Hafner's fourth multihomer game this season and 12th of his career gave him 116 RBI, including 109 as the designated hitter. That ties the club record for a DH set by Andre Thornton in 1982.
Toronto rookie Shaun Marcum allowed one run and four hits over 6 1-3 innings, walking five and striking out four in his ninth career start. The 24-year-old right-hander snapped a three-game losing streak Friday by giving up only one run over six hits in a win over Kansas City.
Indians starter Jeremy Sowers allowed two runs and six hits over 5 2/3 innings.
The left-hander is 5-0 with a 1.84 ERA in eight starts since July 22, when he pitched the first of consecutive shutouts.
Sowers began the season by going 9-1 with a 1.39 ERA at Triple-A Buffalo and has pitched a combined 173 2/3 innings. Last week, general manager Mark Shapiro said the Indians intend to curtail the 23-year-old's workload in September to protect the sixth overall pick in the 2004 draft.
"I felt good, but just couldn't get the out I needed in the sixth," Sowers said. "It didn't matter. Our relievers held them, Hafner hit a rocket and then Jhonny won it. That was exciting."
Hafner put Cleveland ahead in the third with a 390-foot line shot into the Blue Jays' bullpen in right.
The Blue Jays went ahead in the sixth on RBI singles by Bengie Molina and Alex Rios, who broke an 0-for-18 streak with a two-out single just out of the reach of Peralta at shortstop.
The Indians have won nine of the past 10 meetings with the Blue Jays at Jacobs Field. ... Hafner has 13 homers in his last 27 games and is batting .382 with 22 RBI in his last 20 games. ... Toronto OF Reed Johnson went 0-for-4, snapping an eight-game hitting streak in which he had gone 13-for-32 (.406). ... Vernon Wells went 2-for-3 against Sowers and is batting .357 (46-for-129) against lefties overall. ... Marcum came in 0-3 with a 9.26 ERA in eight games, including four starts, on the road. ... Cleveland RHP Fernando Cabrera worked 2 1/3 scoreless innings and has not allowed an earned run in 10 2-3 innings since Aug. 11.